Skip to content

Commit

Permalink
test: tests for nestedQueries
Browse files Browse the repository at this point in the history
  • Loading branch information
WhyAsh5114 committed Dec 27, 2024
1 parent e62413e commit 50bd287
Show file tree
Hide file tree
Showing 7 changed files with 703 additions and 0 deletions.
111 changes: 111 additions & 0 deletions packages/usage/tests/api/nestedQueries/delete.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
import { test } from "../../fixtures";
import { expectQueryToFail, expectQueryToSucceed } from "../../queryRunnerHelper";

test("delete_NestedDeleteQuery_SuccessfullyDeletesNestedRelations", async ({ page }) => {
await expectQueryToSucceed({
page,
model: "user",
operation: "create",
query: { data: { name: "John", posts: { create: [{ title: "Post1" }, { title: "Post2" }] } } },
});

await expectQueryToSucceed({
page,
model: "user",
operation: "update",
query: { where: { id: 1 }, data: { posts: { delete: { id: 1 } } } },
});

await expectQueryToSucceed({
page,
model: "user",
operation: "findMany",
query: { include: { posts: true } },
});

await expectQueryToSucceed({
page,
model: "post",
operation: "findMany",
query: { where: { id: 1 } },
});
});

test("delete_NestedDeleteManyQuery_SuccessfullyDeletesMultipleNestedRelations", async ({ page }) => {
await expectQueryToSucceed({
page,
model: "user",
operation: "create",
query: { data: { name: "Alice", posts: { create: [{ title: "Post1" }, { title: "Post2" }] } } },
});

await expectQueryToSucceed({
page,
model: "user",
operation: "update",
query: { where: { id: 1 }, data: { posts: { deleteMany: { title: { contains: "Post" } } } } },
});

await expectQueryToSucceed({
page,
model: "user",
operation: "findMany",
query: { include: { posts: true } },
});

await expectQueryToSucceed({
page,
model: "post",
operation: "findMany",
});
});

test("delete_NestedDeleteQueryWithInvalidData_ThrowsError", async ({ page }) => {
await expectQueryToSucceed({
page,
model: "user",
operation: "create",
query: { data: { name: "Bob", posts: { create: [{ title: "Post1" }] } } },
});

await expectQueryToFail({
page,
model: "user",
operation: "update",
query: { where: { id: 1 }, data: { posts: { delete: { id: 999 } } } },
errorMessage: "Record not found",
});
});

test("delete_NestedDeleteQueryWithCascade_SuccessfullyDeletesCascadingRelations", async ({ page }) => {
await expectQueryToSucceed({
page,
model: "user",
operation: "create",
query: {
data: {
name: "David",
posts: { create: [{ title: "Post1", comments: { create: { text: "Comment1", userId: 1 } } }] },
},
},
});

await expectQueryToSucceed({
page,
model: "user",
operation: "update",
query: { where: { id: 1 }, data: { posts: { delete: { id: 1 } } } },
});

await expectQueryToSucceed({
page,
model: "post",
operation: "findMany",
});

await expectQueryToSucceed({
page,
model: "comment",
operation: "findMany",
});
});
116 changes: 116 additions & 0 deletions packages/usage/tests/api/nestedQueries/deleteMany.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
import { test } from "../../fixtures";
import { expectQueryToSucceed } from "../../queryRunnerHelper";

test("deleteMany_NestedDeleteManyQuery_SuccessfullyDeletesMultipleNestedRelations", async ({ page }) => {
await expectQueryToSucceed({
page,
model: "user",
operation: "create",
query: { data: { name: "Alice", posts: { create: [{ title: "Post1" }, { title: "Post2" }] } } },
});

await expectQueryToSucceed({
page,
model: "user",
operation: "update",
query: { where: { id: 1 }, data: { posts: { deleteMany: { title: { contains: "Post" } } } } },
});

await expectQueryToSucceed({
page,
model: "user",
operation: "findMany",
query: { include: { posts: true } },
});

await expectQueryToSucceed({
page,
model: "post",
operation: "findMany",
});
});

test("deleteMany_NestedDeleteManyQueryWithInvalidData_LeavesAsIs", async ({ page }) => {
await expectQueryToSucceed({
page,
model: "user",
operation: "create",
query: { data: { name: "Bob", posts: { create: [{ title: "Post1" }] } } },
});

await expectQueryToSucceed({
page,
model: "user",
operation: "update",
query: { where: { id: 1 }, data: { posts: { deleteMany: { id: 999 } } } },
});

await expectQueryToSucceed({
page,
model: "user",
operation: "findMany",
query: { include: { posts: true } },
});
});

test("deleteMany_NestedDeleteManyQueryWithCascade_SuccessfullyDeletesCascadingRelations", async ({ page }) => {
await expectQueryToSucceed({
page,
model: "user",
operation: "create",
query: {
data: {
name: "David",
posts: { create: [{ title: "Post1", comments: { create: { text: "Comment1", userId: 1 } } }] },
},
},
});

await expectQueryToSucceed({
page,
model: "user",
operation: "update",
query: { where: { id: 1 }, data: { posts: { deleteMany: { title: { contains: "Post" } } } } },
});

await expectQueryToSucceed({
page,
model: "post",
operation: "findMany",
});

await expectQueryToSucceed({
page,
model: "comment",
operation: "findMany",
});
});

test("deleteMany_NestedDeleteManyQueryWithEmptyData_SuccessfullyHandlesNoDeletion", async ({ page }) => {
await expectQueryToSucceed({
page,
model: "user",
operation: "create",
query: { data: { name: "Eve", posts: { create: [{ title: "Post1" }, { title: "Post2" }] } } },
});

await expectQueryToSucceed({
page,
model: "user",
operation: "update",
query: { where: { id: 1 }, data: { posts: { deleteMany: { title: { contains: "NonExistent" } } } } },
});

await expectQueryToSucceed({
page,
model: "user",
operation: "findMany",
query: { include: { posts: true } },
});

await expectQueryToSucceed({
page,
model: "post",
operation: "findMany",
});
});
66 changes: 66 additions & 0 deletions packages/usage/tests/api/nestedQueries/disconnect.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
import { test } from "../../fixtures";
import { expectQueryToFail, expectQueryToSucceed } from "../../queryRunnerHelper";

test("disconnect_DisconnectExistingRelations_SuccessfullyDisconnects", async ({ page }) => {
await expectQueryToSucceed({
page,
model: "user",
operation: "create",
query: { data: { name: "John", posts: { create: [{ title: "Post1" }, { title: "Post2" }] } } },
});

await expectQueryToSucceed({
page,
model: "user",
operation: "update",
query: { where: { id: 1 }, data: { posts: { disconnect: [{ id: 1 }] } } },
});

await expectQueryToSucceed({
page,
model: "user",
operation: "findMany",
query: { include: { posts: true } },
});

await expectQueryToSucceed({
page,
model: "post",
operation: "findMany",
query: { include: { author: true }, orderBy: { id: "asc" } },
});
});

test("disconnect_DisconnectNonExistentRelation_ThrowsError", async ({ page }) => {
await expectQueryToSucceed({
page,
model: "user",
operation: "create",
query: { data: { name: "John" } },
});

await expectQueryToFail({
page,
model: "user",
operation: "update",
query: { where: { id: 1 }, data: { posts: { disconnect: [{ id: 999 }] } } },
errorMessage: "Record not found",
});
});

test("disconnect_DisconnectRequiredRelation_ThrowsError", async ({ page }) => {
await expectQueryToSucceed({
page,
model: "user",
operation: "create",
query: { data: { name: "John", profile: { create: { bio: "John's bio" } } } },
});

await expectQueryToFail({
page,
model: "user",
operation: "update",
query: { where: { id: 1 }, data: { profile: { disconnect: true } } },
errorMessage: "Cannot disconnect required relation",
});
});
79 changes: 79 additions & 0 deletions packages/usage/tests/api/nestedQueries/set.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import { test } from "../../fixtures";
import { expectQueryToSucceed, expectQueryToFail } from "../../queryRunnerHelper";

test("set_DisconnectExistingRelations_SuccessfullyDisconnects", async ({ page }) => {
await expectQueryToSucceed({
page,
model: "user",
operation: "create",
query: { data: { name: "John", posts: { create: [{ title: "Post1" }, { title: "Post2" }] } } },
});

await expectQueryToSucceed({
page,
model: "user",
operation: "update",
query: { where: { id: 1 }, data: { posts: { set: [] } } },
});

await expectQueryToSucceed({
page,
model: "user",
operation: "findMany",
query: { include: { posts: true } },
});

await expectQueryToSucceed({
page,
model: "post",
operation: "findMany",
query: { include: { author: true } },
});
});

test("set_NestedSetQuery_SuccessfullySetsNestedRelations", async ({ page }) => {
await expectQueryToSucceed({
page,
model: "user",
operation: "create",
query: { data: { name: "John" } },
});

await expectQueryToSucceed({
page,
model: "post",
operation: "create",
query: { data: { title: "Post1" } },
});

await expectQueryToSucceed({
page,
model: "user",
operation: "update",
query: { where: { id: 1 }, data: { posts: { set: [{ id: 1 }] } } },
});

await expectQueryToSucceed({
page,
model: "user",
operation: "findMany",
query: { include: { posts: true } },
});
});

test("set_InvalidSetQuery_ThrowsError", async ({ page }) => {
await expectQueryToSucceed({
page,
model: "user",
operation: "create",
query: { data: { name: "John" } },
});

await expectQueryToFail({
page,
model: "user",
operation: "update",
query: { where: { id: 1 }, data: { posts: { set: [{ id: 999 }] } } },
errorMessage: "Record not found",
});
});
Loading

0 comments on commit 50bd287

Please sign in to comment.