From 846444623110e2c0da1e65adf654321191f6297a Mon Sep 17 00:00:00 2001 From: ymc9 <104139426+ymc9@users.noreply.github.com> Date: Wed, 15 Oct 2025 18:48:56 -0700 Subject: [PATCH] chore: test refactor --- packages/cli/test/ts-schema-gen.test.ts | 60 ++- packages/sdk/src/ts-schema-generator.ts | 8 +- packages/testtools/src/client.ts | 5 +- .../test/v2-migrated/issue-1058.test.ts | 12 +- .../test/v2-migrated/issue-1080.test.ts | 194 ++++----- .../test/v2-migrated/issue-1123.test.ts | 32 +- .../test/v2-migrated/issue-1135.test.ts | 66 +-- .../test/v2-migrated/issue-1149.test.ts | 102 ++--- .../test/v2-migrated/issue-1167.test.ts | 12 +- .../test/v2-migrated/issue-1179.test.ts | 12 +- .../test/v2-migrated/issue-1241.test.ts | 82 ++-- .../test/v2-migrated/issue-1257.test.ts | 22 +- .../test/v2-migrated/issue-1271.test.ts | 260 ++++++------ .../test/v2-migrated/issue-1381.test.ts | 14 +- .../test/v2-migrated/issue-1388.test.ts | 22 +- .../test/v2-migrated/issue-1410.test.ts | 34 +- .../test/v2-migrated/issue-1415.test.ts | 12 +- .../test/v2-migrated/issue-1416.test.ts | 12 +- .../test/v2-migrated/issue-1427.test.ts | 40 +- .../test/v2-migrated/issue-1467.test.ts | 30 +- .../test/v2-migrated/issue-1483.test.ts | 54 +-- .../test/v2-migrated/issue-1487.test.ts | 50 +-- .../test/v2-migrated/issue-1506.test.ts | 12 +- .../test/v2-migrated/issue-1507.test.ts | 20 +- .../test/v2-migrated/issue-1518.test.ts | 24 +- .../test/v2-migrated/issue-1520.test.ts | 66 +-- .../test/v2-migrated/issue-1522.test.ts | 150 +++---- .../test/v2-migrated/issue-1530.test.ts | 54 +-- .../test/v2-migrated/issue-1551.test.ts | 14 +- .../test/v2-migrated/issue-1562.test.ts | 38 +- .../test/v2-migrated/issue-1563.test.ts | 40 +- .../test/v2-migrated/issue-1575.test.ts | 12 +- .../test/v2-migrated/issue-1576.test.ts | 108 ++--- .../test/v2-migrated/issue-1585.test.ts | 48 ++- .../test/v2-migrated/issue-1627.test.ts | 90 ++-- .../test/v2-migrated/issue-1642.test.ts | 64 +-- .../test/v2-migrated/issue-1645.test.ts | 398 +++++++++--------- .../test/v2-migrated/issue-1648.test.ts | 82 ++-- .../test/v2-migrated/issue-1674.test.ts | 124 +++--- .../test/v2-migrated/issue-1681.test.ts | 48 ++- .../test/v2-migrated/issue-1693.test.ts | 12 +- .../test/v2-migrated/issue-1695.test.ts | 12 +- .../test/v2-migrated/issue-1698.test.ts | 116 ++--- .../test/v2-migrated/issue-1745.test.ts | 12 +- .../test/v2-migrated/issue-1755.test.ts | 112 ++--- .../test/v2-migrated/issue-1758.test.ts | 14 +- .../test/v2-migrated/issue-1763.test.ts | 20 +- .../test/v2-migrated/issue-177.test.ts | 20 +- .../test/v2-migrated/issue-1786.test.ts | 14 +- .../test/v2-migrated/issue-1835.test.ts | 12 +- .../test/v2-migrated/issue-1849.test.ts | 22 +- .../test/v2-migrated/issue-1857.test.ts | 26 +- .../test/v2-migrated/issue-1870.test.ts | 12 +- .../test/v2-migrated/issue-1894.test.ts | 86 ++-- .../test/v2-migrated/issue-1930.test.ts | 118 +++--- .../test/v2-migrated/issue-1991.test.ts | 22 +- .../test/v2-migrated/issue-1992.test.ts | 12 +- .../test/v2-migrated/issue-1994.test.ts | 166 ++++---- .../test/v2-migrated/issue-1997.test.ts | 206 ++++----- .../test/v2-migrated/issue-1998.test.ts | 110 ++--- .../test/v2-migrated/issue-2019.test.ts | 162 +++---- .../test/v2-migrated/issue-2025.test.ts | 60 +-- .../test/v2-migrated/issue-2028.test.ts | 144 +++---- .../test/v2-migrated/issue-2038.test.ts | 40 +- .../test/v2-migrated/issue-2039.test.ts | 44 +- .../test/v2-migrated/issue-2106.test.ts | 26 +- .../test/v2-migrated/issue-2246.test.ts | 130 +++--- .../test/v2-migrated/issue-2247.test.ts | 120 +++--- .../test/v2-migrated/issue-389.test.ts | 26 +- .../test/v2-migrated/issue-392.test.ts | 46 +- .../test/v2-migrated/issue-416.test.ts | 12 +- .../test/v2-migrated/issue-509.test.ts | 18 +- .../test/v2-migrated/issue-609.test.ts | 96 ++--- .../test/v2-migrated/issue-632.test.ts | 16 +- .../test/v2-migrated/issue-646.test.ts | 8 +- .../test/v2-migrated/issue-674.test.ts | 12 +- .../test/v2-migrated/issue-689.test.ts | 112 ++--- .../test/v2-migrated/issue-714.test.ts | 104 ++--- .../test/v2-migrated/issue-735.test.ts | 12 +- .../test/v2-migrated/issue-756.test.ts | 20 +- .../test/v2-migrated/issue-764.test.ts | 48 ++- .../test/v2-migrated/issue-765.test.ts | 54 +-- .../test/v2-migrated/issue-804.test.ts | 20 +- .../test/v2-migrated/issue-811.test.ts | 118 +++--- .../test/v2-migrated/issue-825.test.ts | 62 +-- .../test/v2-migrated/issue-947.test.ts | 14 +- .../test/v2-migrated/issue-971.test.ts | 14 +- 87 files changed, 2681 insertions(+), 2508 deletions(-) diff --git a/packages/cli/test/ts-schema-gen.test.ts b/packages/cli/test/ts-schema-gen.test.ts index d29a0c5c..4ac6f94f 100644 --- a/packages/cli/test/ts-schema-gen.test.ts +++ b/packages/cli/test/ts-schema-gen.test.ts @@ -370,56 +370,54 @@ model User { expect(schema.models).toMatchObject({ User: { - name: "User", + name: 'User', fields: { id: { - name: "id", - type: "String", + name: 'id', + type: 'String', id: true, attributes: [ { - name: "@id" + name: '@id', }, { - name: "@default", + name: '@default', args: [ { - name: "value", + name: 'value', value: { - kind: "call", - function: "uuid", + kind: 'call', + function: 'uuid', args: [ { - kind: "literal", - value: 7 - } - ] - } - } - ] - } + kind: 'literal', + value: 7, + }, + ], + }, + }, + ], + }, ], default: { - kind: "call", - function: "uuid", + kind: 'call', + function: 'uuid', args: [ { - kind: "literal", - value: 7 - } - ] - } - } + kind: 'literal', + value: 7, + }, + ], + }, + }, }, - idFields: [ - "id" - ], + idFields: ['id'], uniqueFields: { id: { - type: "String" - } - } - } + type: 'String', + }, + }, + }, }); }); }); diff --git a/packages/sdk/src/ts-schema-generator.ts b/packages/sdk/src/ts-schema-generator.ts index 78ba40e0..9c393bd5 100644 --- a/packages/sdk/src/ts-schema-generator.ts +++ b/packages/sdk/src/ts-schema-generator.ts @@ -507,9 +507,11 @@ export class TsSchemaGenerator { ...(defaultValue.args.length > 0 ? [ ts.factory.createArrayLiteralExpression( - defaultValue.args.map((arg) => this.createExpressionUtilsCall('literal', [ - this.createLiteralNode(arg) - ])), + defaultValue.args.map((arg) => + this.createExpressionUtilsCall('literal', [ + this.createLiteralNode(arg), + ]), + ), ), ] : []), diff --git a/packages/testtools/src/client.ts b/packages/testtools/src/client.ts index cb3fded5..4a23280e 100644 --- a/packages/testtools/src/client.ts +++ b/packages/testtools/src/client.ts @@ -37,6 +37,7 @@ export type CreateTestClientOptions = Omit; workDir?: string; + debug?: boolean; }; export async function createTestClient( @@ -103,7 +104,9 @@ export async function createTestClient( } invariant(workDir); - console.log(`Work directory: ${workDir}`); + if (options?.debug) { + console.log(`Work directory: ${workDir}`); + } const { plugins, ...rest } = options ?? {}; const _options: ClientOptions = { diff --git a/tests/regression/test/v2-migrated/issue-1058.test.ts b/tests/regression/test/v2-migrated/issue-1058.test.ts index fed09565..e89514ab 100644 --- a/tests/regression/test/v2-migrated/issue-1058.test.ts +++ b/tests/regression/test/v2-migrated/issue-1058.test.ts @@ -1,8 +1,9 @@ import { createTestClient } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 1058', async () => { - const schema = ` +describe('Regression for issue #1058', () => { + it('verifies issue 1058', async () => { + const schema = ` model User { id String @id @default(cuid()) name String @@ -45,8 +46,9 @@ it('verifies issue 1058', async () => { entity Entity @relation(fields: [entityId], references: [id], onUpdate: NoAction) userId String user User @relation(fields: [userId], references: [id], onDelete: Cascade, onUpdate: NoAction) - } + } `; - await createTestClient(schema, { provider: 'postgresql' }); + await createTestClient(schema, { provider: 'postgresql' }); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1080.test.ts b/tests/regression/test/v2-migrated/issue-1080.test.ts index 0f46beca..aacef5cd 100644 --- a/tests/regression/test/v2-migrated/issue-1080.test.ts +++ b/tests/regression/test/v2-migrated/issue-1080.test.ts @@ -1,9 +1,10 @@ import { createPolicyTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 1080', async () => { - const db = await createPolicyTestClient( - ` +describe('Regression for issue #1080', () => { + it('verifies issue 1080', async () => { + const db = await createPolicyTestClient( + ` model Project { id String @id @unique @default(uuid()) Fields Field[] @@ -20,110 +21,111 @@ model Field { @@allow('all', true) } `, - ); + ); - const project = await db.project.create({ - include: { Fields: true }, - data: { - Fields: { - create: [{ name: 'first' }, { name: 'second' }], + const project = await db.project.create({ + include: { Fields: true }, + data: { + Fields: { + create: [{ name: 'first' }, { name: 'second' }], + }, }, - }, - }); + }); - let updated = await db.project.update({ - where: { id: project.id }, - include: { Fields: true }, - data: { - Fields: { - upsert: [ - { - where: { id: project.Fields[0].id }, - create: { name: 'first1' }, - update: { name: 'first1' }, - }, - { - where: { id: project.Fields[1].id }, - create: { name: 'second1' }, - update: { name: 'second1' }, - }, - ], + let updated = await db.project.update({ + where: { id: project.id }, + include: { Fields: true }, + data: { + Fields: { + upsert: [ + { + where: { id: project.Fields[0].id }, + create: { name: 'first1' }, + update: { name: 'first1' }, + }, + { + where: { id: project.Fields[1].id }, + create: { name: 'second1' }, + update: { name: 'second1' }, + }, + ], + }, }, - }, - }); - expect(updated).toMatchObject({ - Fields: expect.arrayContaining([ - expect.objectContaining({ name: 'first1' }), - expect.objectContaining({ name: 'second1' }), - ]), - }); + }); + expect(updated).toMatchObject({ + Fields: expect.arrayContaining([ + expect.objectContaining({ name: 'first1' }), + expect.objectContaining({ name: 'second1' }), + ]), + }); - updated = await db.project.update({ - where: { id: project.id }, - include: { Fields: true }, - data: { - Fields: { - upsert: { - where: { id: project.Fields[0].id }, - create: { name: 'first2' }, - update: { name: 'first2' }, + updated = await db.project.update({ + where: { id: project.id }, + include: { Fields: true }, + data: { + Fields: { + upsert: { + where: { id: project.Fields[0].id }, + create: { name: 'first2' }, + update: { name: 'first2' }, + }, }, }, - }, - }); - expect(updated).toMatchObject({ - Fields: expect.arrayContaining([ - expect.objectContaining({ name: 'first2' }), - expect.objectContaining({ name: 'second1' }), - ]), - }); + }); + expect(updated).toMatchObject({ + Fields: expect.arrayContaining([ + expect.objectContaining({ name: 'first2' }), + expect.objectContaining({ name: 'second1' }), + ]), + }); - updated = await db.project.update({ - where: { id: project.id }, - include: { Fields: true }, - data: { - Fields: { - upsert: { - where: { id: project.Fields[0].id }, - create: { name: 'first3' }, - update: { name: 'first3' }, - }, - update: { - where: { id: project.Fields[1].id }, - data: { name: 'second3' }, + updated = await db.project.update({ + where: { id: project.id }, + include: { Fields: true }, + data: { + Fields: { + upsert: { + where: { id: project.Fields[0].id }, + create: { name: 'first3' }, + update: { name: 'first3' }, + }, + update: { + where: { id: project.Fields[1].id }, + data: { name: 'second3' }, + }, }, }, - }, - }); - expect(updated).toMatchObject({ - Fields: expect.arrayContaining([ - expect.objectContaining({ name: 'first3' }), - expect.objectContaining({ name: 'second3' }), - ]), - }); + }); + expect(updated).toMatchObject({ + Fields: expect.arrayContaining([ + expect.objectContaining({ name: 'first3' }), + expect.objectContaining({ name: 'second3' }), + ]), + }); - updated = await db.project.update({ - where: { id: project.id }, - include: { Fields: true }, - data: { - Fields: { - upsert: { - where: { id: 'non-exist' }, - create: { name: 'third1' }, - update: { name: 'third1' }, - }, - update: { - where: { id: project.Fields[1].id }, - data: { name: 'second4' }, + updated = await db.project.update({ + where: { id: project.id }, + include: { Fields: true }, + data: { + Fields: { + upsert: { + where: { id: 'non-exist' }, + create: { name: 'third1' }, + update: { name: 'third1' }, + }, + update: { + where: { id: project.Fields[1].id }, + data: { name: 'second4' }, + }, }, }, - }, - }); - expect(updated).toMatchObject({ - Fields: expect.arrayContaining([ - expect.objectContaining({ name: 'first3' }), - expect.objectContaining({ name: 'second4' }), - expect.objectContaining({ name: 'third1' }), - ]), + }); + expect(updated).toMatchObject({ + Fields: expect.arrayContaining([ + expect.objectContaining({ name: 'first3' }), + expect.objectContaining({ name: 'second4' }), + expect.objectContaining({ name: 'third1' }), + ]), + }); }); }); diff --git a/tests/regression/test/v2-migrated/issue-1123.test.ts b/tests/regression/test/v2-migrated/issue-1123.test.ts index 3c1cb4d0..4f2b5a5f 100644 --- a/tests/regression/test/v2-migrated/issue-1123.test.ts +++ b/tests/regression/test/v2-migrated/issue-1123.test.ts @@ -1,9 +1,10 @@ import { createPolicyTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 1123', async () => { - const db = await createPolicyTestClient( - ` +describe('Regression for issue #1123', () => { + it('verifies issue 1123', async () => { + const db = await createPolicyTestClient( + ` model Content { id String @id @default(cuid()) published Boolean @default(false) @@ -12,7 +13,7 @@ model Content { @@delegate(contentType) @@allow('all', true) } - + model Post extends Content { title String } @@ -28,16 +29,19 @@ model Like { @@allow('all', true) } `, - ); + ); - await db.post.create({ - data: { - title: 'a post', - likes: { create: {} }, - }, - }); + await db.post.create({ + data: { + title: 'a post', + likes: { create: {} }, + }, + }); - await expect(db.content.findFirst({ include: { _count: { select: { likes: true } } } })).resolves.toMatchObject({ - _count: { likes: 1 }, + await expect(db.content.findFirst({ include: { _count: { select: { likes: true } } } })).resolves.toMatchObject( + { + _count: { likes: 1 }, + }, + ); }); }); diff --git a/tests/regression/test/v2-migrated/issue-1135.test.ts b/tests/regression/test/v2-migrated/issue-1135.test.ts index 41df934f..521dd133 100644 --- a/tests/regression/test/v2-migrated/issue-1135.test.ts +++ b/tests/regression/test/v2-migrated/issue-1135.test.ts @@ -1,22 +1,23 @@ import { createTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 1135', async () => { - const db = await createTestClient( - ` +describe('Regression for issue #1135', () => { + it('verifies issue 1135', async () => { + const db = await createTestClient( + ` model Attachment { id String @id @default(cuid()) url String myEntityId String myEntity Entity @relation(fields: [myEntityId], references: [id], onUpdate: NoAction) } - + model Entity { - id String @id @default(cuid()) + id String @id @default(cuid()) name String createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @default(now()) - + attachments Attachment[] type String @@ -27,9 +28,9 @@ model Person extends Entity { age Int? } `, - { - extraSourceFiles: { - 'main.ts': ` + { + extraSourceFiles: { + 'main.ts': ` import { ZenStackClient } from '@zenstackhq/runtime'; import { schema } from './schema'; @@ -46,31 +47,32 @@ db.person.create({ }, }); `, + }, }, - }, - ); + ); - await expect( - db.person.create({ - data: { - name: 'test', - attachments: { - create: { - url: 'https://...', + await expect( + db.person.create({ + data: { + name: 'test', + attachments: { + create: { + url: 'https://...', + }, }, }, - }, - include: { attachments: true }, - }), - ).resolves.toMatchObject({ - id: expect.any(String), - name: 'test', - attachments: [ - { - id: expect.any(String), - url: 'https://...', - myEntityId: expect.any(String), - }, - ], + include: { attachments: true }, + }), + ).resolves.toMatchObject({ + id: expect.any(String), + name: 'test', + attachments: [ + { + id: expect.any(String), + url: 'https://...', + myEntityId: expect.any(String), + }, + ], + }); }); }); diff --git a/tests/regression/test/v2-migrated/issue-1149.test.ts b/tests/regression/test/v2-migrated/issue-1149.test.ts index 404c3969..ff18a4b5 100644 --- a/tests/regression/test/v2-migrated/issue-1149.test.ts +++ b/tests/regression/test/v2-migrated/issue-1149.test.ts @@ -1,90 +1,92 @@ import { createTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 1149', async () => { - const schema = ` +describe('Regression for issue #1149', () => { + it('verifies issue 1149', async () => { + const schema = ` model User { id String @id @default(cuid()) name String - + userRankings UserRanking[] userFavorites UserFavorite[] } - + model Entity { id String @id @default(cuid()) name String type String userRankings UserRanking[] userFavorites UserFavorite[] - + @@delegate(type) } - + model Person extends Entity { } - + model Studio extends Entity { } - - + + model UserRanking { id String @id @default(cuid()) rank Int - + entityId String entity Entity @relation(fields: [entityId], references: [id], onUpdate: NoAction) userId String user User @relation(fields: [userId], references: [id], onDelete: Cascade, onUpdate: NoAction) } - + model UserFavorite { id String @id @default(cuid()) - + entityId String entity Entity @relation(fields: [entityId], references: [id], onUpdate: NoAction) userId String user User @relation(fields: [userId], references: [id], onDelete: Cascade, onUpdate: NoAction) - } + } `; - const db = await createTestClient(schema); - - const user = await db.user.create({ data: { name: 'user' } }); - const person = await db.person.create({ data: { name: 'person' } }); - - await expect( - db.userRanking.createMany({ - data: { - rank: 1, - entityId: person.id, - userId: user.id, - }, - }), - ).resolves.toMatchObject({ count: 1 }); - - await expect( - db.userRanking.createMany({ - data: [ - { - rank: 2, - entityId: person.id, - userId: user.id, - }, - { - rank: 3, + const db = await createTestClient(schema); + + const user = await db.user.create({ data: { name: 'user' } }); + const person = await db.person.create({ data: { name: 'person' } }); + + await expect( + db.userRanking.createMany({ + data: { + rank: 1, entityId: person.id, userId: user.id, }, - ], - }), - ).resolves.toMatchObject({ count: 2 }); - - await expect(db.userRanking.findMany()).resolves.toEqual( - expect.arrayContaining([ - expect.objectContaining({ rank: 1 }), - expect.objectContaining({ rank: 2 }), - expect.objectContaining({ rank: 3 }), - ]), - ); + }), + ).resolves.toMatchObject({ count: 1 }); + + await expect( + db.userRanking.createMany({ + data: [ + { + rank: 2, + entityId: person.id, + userId: user.id, + }, + { + rank: 3, + entityId: person.id, + userId: user.id, + }, + ], + }), + ).resolves.toMatchObject({ count: 2 }); + + await expect(db.userRanking.findMany()).resolves.toEqual( + expect.arrayContaining([ + expect.objectContaining({ rank: 1 }), + expect.objectContaining({ rank: 2 }), + expect.objectContaining({ rank: 3 }), + ]), + ); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1167.test.ts b/tests/regression/test/v2-migrated/issue-1167.test.ts index 9a18c374..5b81fa67 100644 --- a/tests/regression/test/v2-migrated/issue-1167.test.ts +++ b/tests/regression/test/v2-migrated/issue-1167.test.ts @@ -1,9 +1,10 @@ import { loadSchema } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 1167', async () => { - await loadSchema( - ` +describe('Regression for issue #1167', () => { + it('verifies issue 1167', async () => { + await loadSchema( + ` model FileAsset { id String @id @default(cuid()) delegate_type String @@ -15,5 +16,6 @@ model ImageAsset extends FileAsset { @@map("image_assets") } `, - ); + ); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1179.test.ts b/tests/regression/test/v2-migrated/issue-1179.test.ts index b6a21879..0f2611ae 100644 --- a/tests/regression/test/v2-migrated/issue-1179.test.ts +++ b/tests/regression/test/v2-migrated/issue-1179.test.ts @@ -1,9 +1,10 @@ import { loadSchema } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('regression', async () => { - await loadSchema( - ` +describe('Regression for issue #1179', () => { + it('regression', async () => { + await loadSchema( + ` type Base { id String @id @default(uuid()) } @@ -22,5 +23,6 @@ model Post { @@allow('all', auth().id == userId) } `, - ); + ); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1241.test.ts b/tests/regression/test/v2-migrated/issue-1241.test.ts index bddfa4e8..f0f53fab 100644 --- a/tests/regression/test/v2-migrated/issue-1241.test.ts +++ b/tests/regression/test/v2-migrated/issue-1241.test.ts @@ -1,10 +1,11 @@ import { createPolicyTestClient } from '@zenstackhq/testtools'; import { randomBytes } from 'crypto'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 1241', async () => { - const db = await createPolicyTestClient( - ` +describe('Regression for issue #1241', () => { + it('verifies issue 1241', async () => { + const db = await createPolicyTestClient( + ` model User { id String @id @default(uuid()) todos Todo[] @@ -39,46 +40,47 @@ model File { @@allow('all', true) } `, - ); + ); - const user = await db.$unuseAll().user.create({ - data: {}, - }); - await db.$unuseAll().todo.create({ - data: { - user_id: user.id, - - images: { - create: new Array(3).fill(null).map((_, i) => ({ - s3_key: randomBytes(8).toString('hex'), - label: `img-label-${i + 1}`, - })), - }, + const user = await db.$unuseAll().user.create({ + data: {}, + }); + await db.$unuseAll().todo.create({ + data: { + user_id: user.id, - documents: { - create: new Array(3).fill(null).map((_, i) => ({ - s3_key: randomBytes(8).toString('hex'), - label: `doc-label-${i + 1}`, - })), - }, - }, - }); + images: { + create: new Array(3).fill(null).map((_, i) => ({ + s3_key: randomBytes(8).toString('hex'), + label: `img-label-${i + 1}`, + })), + }, - const todo = await db.todo.findFirst({ where: {}, include: { documents: true } }); - await expect( - db.todo.update({ - where: { id: todo.id }, - data: { documents: { - update: todo.documents.map((doc: any) => { - return { - where: { s3_key: doc.s3_key }, - data: { label: 'updated' }, - }; - }), + create: new Array(3).fill(null).map((_, i) => ({ + s3_key: randomBytes(8).toString('hex'), + label: `doc-label-${i + 1}`, + })), }, }, - include: { documents: true }, - }), - ).toResolveTruthy(); + }); + + const todo = await db.todo.findFirst({ where: {}, include: { documents: true } }); + await expect( + db.todo.update({ + where: { id: todo.id }, + data: { + documents: { + update: todo.documents.map((doc: any) => { + return { + where: { s3_key: doc.s3_key }, + data: { label: 'updated' }, + }; + }), + }, + }, + include: { documents: true }, + }), + ).toResolveTruthy(); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1257.test.ts b/tests/regression/test/v2-migrated/issue-1257.test.ts index 38fc799e..acd1a258 100644 --- a/tests/regression/test/v2-migrated/issue-1257.test.ts +++ b/tests/regression/test/v2-migrated/issue-1257.test.ts @@ -1,9 +1,10 @@ import { loadSchema } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 1257', async () => { - await loadSchema( - ` +describe('Regression for issue #1257', () => { + it('verifies issue 1257', async () => { + await loadSchema( + ` import "./user" import "./image" @@ -11,13 +12,13 @@ datasource db { provider = "postgresql" url = env("DATABASE_URL") }`, - { - base: ` + { + base: ` type Base { id Int @id @default(autoincrement()) } `, - user: ` + user: ` import "./base" import "./image" @@ -31,7 +32,7 @@ model User with Base { @@auth } `, - image: ` + image: ` import "./user" import "./base" @@ -43,6 +44,7 @@ model Image with Base { @@allow('all', auth().role == Admin) } `, - }, - ); + }, + ); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1271.test.ts b/tests/regression/test/v2-migrated/issue-1271.test.ts index d6acb7e6..8c264a36 100644 --- a/tests/regression/test/v2-migrated/issue-1271.test.ts +++ b/tests/regression/test/v2-migrated/issue-1271.test.ts @@ -1,188 +1,190 @@ import { createPolicyTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 1271', async () => { - const db = await createPolicyTestClient( - ` +describe('Regression for issue #1271', () => { + it('verifies issue 1271', async () => { + const db = await createPolicyTestClient( + ` model User { id String @id @default(uuid()) - + @@auth @@allow('all', true) } - + model Test { id String @id @default(uuid()) linkingTable LinkingTable[] key String @default('test') locale String @default('EN') - + @@unique([key, locale]) @@allow("all", true) } - + model LinkingTable { test_id String test Test @relation(fields: [test_id], references: [id]) - + another_test_id String another_test AnotherTest @relation(fields: [another_test_id], references: [id]) - + @@id([test_id, another_test_id]) @@allow("all", true) } - + model AnotherTest { id String @id @default(uuid()) status String linkingTable LinkingTable[] - + @@allow("all", true) -} +} `, - ); + ); - const test = await db.test.create({ - data: { - key: 'test1', - }, - }); - const anotherTest = await db.anotherTest.create({ - data: { - status: 'available', - }, - }); + const test = await db.test.create({ + data: { + key: 'test1', + }, + }); + const anotherTest = await db.anotherTest.create({ + data: { + status: 'available', + }, + }); - const updated = await db.test.upsert({ - where: { - key_locale: { - key: test.key, - locale: test.locale, + const updated = await db.test.upsert({ + where: { + key_locale: { + key: test.key, + locale: test.locale, + }, }, - }, - create: { - linkingTable: { - create: { - another_test_id: anotherTest.id, + create: { + linkingTable: { + create: { + another_test_id: anotherTest.id, + }, }, }, - }, - update: { - linkingTable: { - create: { - another_test_id: anotherTest.id, + update: { + linkingTable: { + create: { + another_test_id: anotherTest.id, + }, }, }, - }, - include: { - linkingTable: true, - }, - }); + include: { + linkingTable: true, + }, + }); - expect(updated.linkingTable).toHaveLength(1); - expect(updated.linkingTable[0]).toMatchObject({ another_test_id: anotherTest.id }); + expect(updated.linkingTable).toHaveLength(1); + expect(updated.linkingTable[0]).toMatchObject({ another_test_id: anotherTest.id }); - const test2 = await db.test.upsert({ - where: { - key_locale: { + const test2 = await db.test.upsert({ + where: { + key_locale: { + key: 'test2', + locale: 'locale2', + }, + }, + create: { key: 'test2', locale: 'locale2', - }, - }, - create: { - key: 'test2', - locale: 'locale2', - linkingTable: { - create: { - another_test_id: anotherTest.id, + linkingTable: { + create: { + another_test_id: anotherTest.id, + }, }, }, - }, - update: { - linkingTable: { - create: { - another_test_id: anotherTest.id, + update: { + linkingTable: { + create: { + another_test_id: anotherTest.id, + }, }, }, - }, - include: { - linkingTable: true, - }, - }); - expect(test2).toMatchObject({ key: 'test2', locale: 'locale2' }); - expect(test2.linkingTable).toHaveLength(1); - expect(test2.linkingTable[0]).toMatchObject({ another_test_id: anotherTest.id }); - - const linkingTable = test2.linkingTable[0]; - - // connectOrCreate: connect case - const test3 = await db.test.create({ - data: { - key: 'test3', - locale: 'locale3', - }, - }); - console.log('test3 created:', test3); - const updated2 = await db.linkingTable.update({ - where: { - test_id_another_test_id: { - test_id: linkingTable.test_id, - another_test_id: linkingTable.another_test_id, + include: { + linkingTable: true, }, - }, - data: { - test: { - connectOrCreate: { - where: { - key_locale: { - key: test3.key, - locale: test3.locale, + }); + expect(test2).toMatchObject({ key: 'test2', locale: 'locale2' }); + expect(test2.linkingTable).toHaveLength(1); + expect(test2.linkingTable[0]).toMatchObject({ another_test_id: anotherTest.id }); + + const linkingTable = test2.linkingTable[0]; + + // connectOrCreate: connect case + const test3 = await db.test.create({ + data: { + key: 'test3', + locale: 'locale3', + }, + }); + console.log('test3 created:', test3); + const updated2 = await db.linkingTable.update({ + where: { + test_id_another_test_id: { + test_id: linkingTable.test_id, + another_test_id: linkingTable.another_test_id, + }, + }, + data: { + test: { + connectOrCreate: { + where: { + key_locale: { + key: test3.key, + locale: test3.locale, + }, + }, + create: { + key: 'test4', + locale: 'locale4', }, - }, - create: { - key: 'test4', - locale: 'locale4', }, }, + another_test: { connect: { id: anotherTest.id } }, }, - another_test: { connect: { id: anotherTest.id } }, - }, - include: { test: true }, - }); - expect(updated2).toMatchObject({ - test: expect.objectContaining({ key: 'test3', locale: 'locale3' }), - another_test_id: anotherTest.id, - }); + include: { test: true }, + }); + expect(updated2).toMatchObject({ + test: expect.objectContaining({ key: 'test3', locale: 'locale3' }), + another_test_id: anotherTest.id, + }); - // connectOrCreate: create case - const updated3 = await db.linkingTable.update({ - where: { - test_id_another_test_id: { - test_id: updated2.test_id, - another_test_id: updated2.another_test_id, + // connectOrCreate: create case + const updated3 = await db.linkingTable.update({ + where: { + test_id_another_test_id: { + test_id: updated2.test_id, + another_test_id: updated2.another_test_id, + }, }, - }, - data: { - test: { - connectOrCreate: { - where: { - key_locale: { + data: { + test: { + connectOrCreate: { + where: { + key_locale: { + key: 'test4', + locale: 'locale4', + }, + }, + create: { key: 'test4', locale: 'locale4', }, }, - create: { - key: 'test4', - locale: 'locale4', - }, }, + another_test: { connect: { id: anotherTest.id } }, }, - another_test: { connect: { id: anotherTest.id } }, - }, - include: { test: true }, - }); - expect(updated3).toMatchObject({ - test: expect.objectContaining({ key: 'test4', locale: 'locale4' }), - another_test_id: anotherTest.id, + include: { test: true }, + }); + expect(updated3).toMatchObject({ + test: expect.objectContaining({ key: 'test4', locale: 'locale4' }), + another_test_id: anotherTest.id, + }); }); }); diff --git a/tests/regression/test/v2-migrated/issue-1381.test.ts b/tests/regression/test/v2-migrated/issue-1381.test.ts index 3f168270..2789d29e 100644 --- a/tests/regression/test/v2-migrated/issue-1381.test.ts +++ b/tests/regression/test/v2-migrated/issue-1381.test.ts @@ -1,9 +1,10 @@ import { loadSchema } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 1381', async () => { - await loadSchema( - ` +describe('Regression for issue #1381', () => { + it('verifies issue 1381', async () => { + await loadSchema( + ` enum MemberRole { owner admin @@ -49,7 +50,8 @@ model Option { space.type in [contractor, public] && space.memberships?[space.type in [contractor, public] && auth() == user && role in [owner, admin]] ) -} +} `, - ); + ); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1388.test.ts b/tests/regression/test/v2-migrated/issue-1388.test.ts index ab3f4701..5d617708 100644 --- a/tests/regression/test/v2-migrated/issue-1388.test.ts +++ b/tests/regression/test/v2-migrated/issue-1388.test.ts @@ -1,9 +1,10 @@ import { loadSchema } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 1388', async () => { - await loadSchema( - ` +describe('Regression for issue #1388', () => { + it('verifies issue 1388', async () => { + await loadSchema( + ` import './auth' import './post' @@ -12,14 +13,14 @@ datasource db { url = env("DATABASE_URL") } `, - { - auth: ` + { + auth: ` model User { id String @id @default(cuid()) role String -} +} `, - post: ` + post: ` model Post { id String @id @default(nanoid(6)) title String @@ -27,6 +28,7 @@ model Post { @@allow('all', auth().id == 'user1') } `, - }, - ); + }, + ); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1410.test.ts b/tests/regression/test/v2-migrated/issue-1410.test.ts index c4f7c2db..62749fc2 100644 --- a/tests/regression/test/v2-migrated/issue-1410.test.ts +++ b/tests/regression/test/v2-migrated/issue-1410.test.ts @@ -1,9 +1,10 @@ import { createTestClient } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 1410', async () => { - const db = await createTestClient( - ` +describe('Regression for issue #1410', () => { + it('verifies issue 1410', async () => { + const db = await createTestClient( + ` model Drink { id Int @id @default(autoincrement()) slug String @unique @@ -124,20 +125,21 @@ it('verifies issue 1410', async () => { @@allow('all', true) } `, - ); + ); - await db.beer.findMany({ - include: { style: true, manufacturer: true }, - where: { NOT: { gluten: true } }, - }); + await db.beer.findMany({ + include: { style: true, manufacturer: true }, + where: { NOT: { gluten: true } }, + }); - await db.beer.findMany({ - include: { style: true, manufacturer: true }, - where: { AND: [{ gluten: true }, { abv: { gt: 50 } }] }, - }); + await db.beer.findMany({ + include: { style: true, manufacturer: true }, + where: { AND: [{ gluten: true }, { abv: { gt: 50 } }] }, + }); - await db.beer.findMany({ - include: { style: true, manufacturer: true }, - where: { OR: [{ AND: [{ NOT: { gluten: true } }] }, { abv: { gt: 50 } }] }, + await db.beer.findMany({ + include: { style: true, manufacturer: true }, + where: { OR: [{ AND: [{ NOT: { gluten: true } }] }, { abv: { gt: 50 } }] }, + }); }); }); diff --git a/tests/regression/test/v2-migrated/issue-1415.test.ts b/tests/regression/test/v2-migrated/issue-1415.test.ts index 0ebbf7e9..2adecac0 100644 --- a/tests/regression/test/v2-migrated/issue-1415.test.ts +++ b/tests/regression/test/v2-migrated/issue-1415.test.ts @@ -1,9 +1,10 @@ import { loadSchema } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 1415', async () => { - await loadSchema( - ` +describe('Regression for issue #1415', () => { + it('verifies issue 1415', async () => { + await loadSchema( + ` model User { id String @id @default(cuid()) prices Price[] @@ -17,5 +18,6 @@ model Price { @@delegate(priceType) } `, - ); + ); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1416.test.ts b/tests/regression/test/v2-migrated/issue-1416.test.ts index 461ff068..d89b8280 100644 --- a/tests/regression/test/v2-migrated/issue-1416.test.ts +++ b/tests/regression/test/v2-migrated/issue-1416.test.ts @@ -1,9 +1,10 @@ import { loadSchema } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 1416', async () => { - await loadSchema( - ` +describe('Regression for issue #1416', () => { + it('verifies issue 1416', async () => { + await loadSchema( + ` model User { id String @id @default(cuid()) role String @@ -32,5 +33,6 @@ model MyEntity extends Entity { foo String } `, - ); + ); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1427.test.ts b/tests/regression/test/v2-migrated/issue-1427.test.ts index f111288f..84836443 100644 --- a/tests/regression/test/v2-migrated/issue-1427.test.ts +++ b/tests/regression/test/v2-migrated/issue-1427.test.ts @@ -1,9 +1,10 @@ import { createTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 1427', async () => { - const db = await createTestClient( - ` +describe('Regression for issue #1427', () => { + it('verifies issue 1427', async () => { + const db = await createTestClient( + ` model User { id String @id @default(cuid()) name String @@ -18,23 +19,24 @@ model Profile { @@allow('all', true) } `, - ); + ); - await db.$unuseAll().user.create({ - data: { - name: 'John', - profile: { - create: {}, + await db.$unuseAll().user.create({ + data: { + name: 'John', + profile: { + create: {}, + }, }, - }, - }); + }); - const found = await db.user.findFirst({ - select: { - id: true, - name: true, - profile: false, - }, + const found = await db.user.findFirst({ + select: { + id: true, + name: true, + profile: false, + }, + }); + expect(found.profile).toBeUndefined(); }); - expect(found.profile).toBeUndefined(); }); diff --git a/tests/regression/test/v2-migrated/issue-1467.test.ts b/tests/regression/test/v2-migrated/issue-1467.test.ts index 042ef8b6..e3ff1ffd 100644 --- a/tests/regression/test/v2-migrated/issue-1467.test.ts +++ b/tests/regression/test/v2-migrated/issue-1467.test.ts @@ -1,9 +1,10 @@ import { createTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 1467', async () => { - const db = await createTestClient( - ` +describe('Regression for issue #1467', () => { + it('verifies issue 1467', async () => { + const db = await createTestClient( + ` model User { id Int @id @default(autoincrement()) type String @@ -27,18 +28,19 @@ it('verifies issue 1467', async () => { model Beer extends Drink { } `, - ); + ); - await db.beer.create({ - data: { id: 1, name: 'Beer1' }, - }); + await db.beer.create({ + data: { id: 1, name: 'Beer1' }, + }); - await db.container.create({ data: { drink: { connect: { id: 1 } } } }); - await db.container.create({ data: { drink: { connect: { id: 1 } } } }); + await db.container.create({ data: { drink: { connect: { id: 1 } } } }); + await db.container.create({ data: { drink: { connect: { id: 1 } } } }); - const beers = await db.beer.findFirst({ - select: { id: true, name: true, _count: { select: { containers: true } } }, - orderBy: { name: 'asc' }, + const beers = await db.beer.findFirst({ + select: { id: true, name: true, _count: { select: { containers: true } } }, + orderBy: { name: 'asc' }, + }); + expect(beers).toMatchObject({ _count: { containers: 2 } }); }); - expect(beers).toMatchObject({ _count: { containers: 2 } }); }); diff --git a/tests/regression/test/v2-migrated/issue-1483.test.ts b/tests/regression/test/v2-migrated/issue-1483.test.ts index 8802a312..fa35644c 100644 --- a/tests/regression/test/v2-migrated/issue-1483.test.ts +++ b/tests/regression/test/v2-migrated/issue-1483.test.ts @@ -1,9 +1,10 @@ import { createTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 1483', async () => { - const db = await createTestClient( - ` +describe('Regression for issue #1483', () => { + it('verifies issue 1483', async () => { + const db = await createTestClient( + ` model User { @@auth id String @id @@ -38,30 +39,31 @@ model Edit { @@allow('all', true) } `, - ); + ); - await db.edit.deleteMany({}); - await db.person.deleteMany({}); - await db.user.deleteMany({}); + await db.edit.deleteMany({}); + await db.person.deleteMany({}); + await db.user.deleteMany({}); - const person = await db.person.create({ - data: { - name: 'test', - }, - }); - - await db.edit.create({ - data: { - entityId: person.id, - }, - }); + const person = await db.person.create({ + data: { + name: 'test', + }, + }); - await expect( - db.edit.findMany({ - include: { - author: true, - entity: true, + await db.edit.create({ + data: { + entityId: person.id, }, - }), - ).resolves.toHaveLength(1); + }); + + await expect( + db.edit.findMany({ + include: { + author: true, + entity: true, + }, + }), + ).resolves.toHaveLength(1); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1487.test.ts b/tests/regression/test/v2-migrated/issue-1487.test.ts index acf39ead..f75ac391 100644 --- a/tests/regression/test/v2-migrated/issue-1487.test.ts +++ b/tests/regression/test/v2-migrated/issue-1487.test.ts @@ -1,10 +1,11 @@ import { createTestClient } from '@zenstackhq/testtools'; import Decimal from 'decimal.js'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 1487', async () => { - const db = await createTestClient( - ` +describe('Regression for issue #1487', () => { + it('verifies issue 1487', async () => { + const db = await createTestClient( + ` model LineItem { id Int @id @default(autoincrement()) price Decimal @@ -25,28 +26,29 @@ model BaseType { @@delegate(entityType) } `, - ); + ); - const create = await db.Order.create({ - data: { - total: new Decimal(100_100.99), - lineItems: { create: [{ price: 90_000.66 }, { price: 20_100.33 }] }, - }, - }); + const create = await db.Order.create({ + data: { + total: new Decimal(100_100.99), + lineItems: { create: [{ price: 90_000.66 }, { price: 20_100.33 }] }, + }, + }); - const order = await db.Order.findFirst({ where: { id: create.id }, include: { lineItems: true } }); - expect(Decimal.isDecimal(order.total)).toBe(true); - expect(order.createdAt instanceof Date).toBe(true); - expect(order.total.toString()).toEqual('100100.99'); - order.lineItems.forEach((item: any) => { - expect(Decimal.isDecimal(item.price)).toBe(true); - expect(item.price.toString()).not.toEqual('[object Object]'); - }); + const order = await db.Order.findFirst({ where: { id: create.id }, include: { lineItems: true } }); + expect(Decimal.isDecimal(order.total)).toBe(true); + expect(order.createdAt instanceof Date).toBe(true); + expect(order.total.toString()).toEqual('100100.99'); + order.lineItems.forEach((item: any) => { + expect(Decimal.isDecimal(item.price)).toBe(true); + expect(item.price.toString()).not.toEqual('[object Object]'); + }); - const lineItems = await db.LineItem.findMany(); - lineItems.forEach((item: any) => { - expect(item.createdAt instanceof Date).toBe(true); - expect(Decimal.isDecimal(item.price)).toBe(true); - expect(item.price.toString()).not.toEqual('[object Object]'); + const lineItems = await db.LineItem.findMany(); + lineItems.forEach((item: any) => { + expect(item.createdAt instanceof Date).toBe(true); + expect(Decimal.isDecimal(item.price)).toBe(true); + expect(item.price.toString()).not.toEqual('[object Object]'); + }); }); }); diff --git a/tests/regression/test/v2-migrated/issue-1506.test.ts b/tests/regression/test/v2-migrated/issue-1506.test.ts index 759ec279..2472bc32 100644 --- a/tests/regression/test/v2-migrated/issue-1506.test.ts +++ b/tests/regression/test/v2-migrated/issue-1506.test.ts @@ -1,9 +1,10 @@ import { createPolicyTestClient } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 1506', async () => { - await createPolicyTestClient( - ` +describe('Regression for issue #1506', () => { + it('verifies issue 1506', async () => { + await createPolicyTestClient( + ` model A { id Int @id @default(autoincrement()) value Int @@ -31,5 +32,6 @@ model C { @@allow('read', true) } `, - ); + ); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1507.test.ts b/tests/regression/test/v2-migrated/issue-1507.test.ts index aee6fddd..ffcd3d5a 100644 --- a/tests/regression/test/v2-migrated/issue-1507.test.ts +++ b/tests/regression/test/v2-migrated/issue-1507.test.ts @@ -1,9 +1,10 @@ import { createPolicyTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 1507', async () => { - const db = await createPolicyTestClient( - ` +describe('Regression for issue #1507', () => { + it('verifies issue 1507', async () => { + const db = await createPolicyTestClient( + ` model User { id Int @id @default(autoincrement()) age Int @@ -16,10 +17,11 @@ model Profile { @@allow('read', auth().age == age) } `, - ); + ); - await db.$unuseAll().profile.create({ data: { age: 18 } }); - await db.$unuseAll().profile.create({ data: { age: 20 } }); - await expect(db.$setAuth({ id: 1, age: 18 }).profile.findMany()).resolves.toHaveLength(1); - await expect(db.$setAuth({ id: 1, age: 18 }).profile.count()).resolves.toBe(1); + await db.$unuseAll().profile.create({ data: { age: 18 } }); + await db.$unuseAll().profile.create({ data: { age: 20 } }); + await expect(db.$setAuth({ id: 1, age: 18 }).profile.findMany()).resolves.toHaveLength(1); + await expect(db.$setAuth({ id: 1, age: 18 }).profile.count()).resolves.toBe(1); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1518.test.ts b/tests/regression/test/v2-migrated/issue-1518.test.ts index 1dfa436e..50e30e3b 100644 --- a/tests/regression/test/v2-migrated/issue-1518.test.ts +++ b/tests/regression/test/v2-migrated/issue-1518.test.ts @@ -1,9 +1,10 @@ import { createTestClient } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 1518', async () => { - const db = await createTestClient( - ` +describe('Regression for issue #1518', () => { + it('verifies issue 1518', async () => { + const db = await createTestClient( + ` model Activity { id String @id @default(uuid()) title String @@ -18,13 +19,14 @@ model TaskActivity extends Activity { @@allow('all', true) } `, - ); + ); - await db.taskActivity.create({ - data: { - id: '00000000-0000-0000-0000-111111111111', - title: 'Test Activity', - description: 'Description of task', - }, + await db.taskActivity.create({ + data: { + id: '00000000-0000-0000-0000-111111111111', + title: 'Test Activity', + description: 'Description of task', + }, + }); }); }); diff --git a/tests/regression/test/v2-migrated/issue-1520.test.ts b/tests/regression/test/v2-migrated/issue-1520.test.ts index 79b8fc54..baef5464 100644 --- a/tests/regression/test/v2-migrated/issue-1520.test.ts +++ b/tests/regression/test/v2-migrated/issue-1520.test.ts @@ -1,9 +1,10 @@ import { createTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 1520', async () => { - const db = await createTestClient( - ` +describe('Regression for issue #1520', () => { + it('verifies issue 1520', async () => { + const db = await createTestClient( + ` model Course { id Int @id @default(autoincrement()) title String @@ -25,43 +26,44 @@ model Notification { } model AddedToGroupNotification extends Notification { - groupId Int + groupId Int group Group @relation(fields: [groupId], references: [id], onDelete: Cascade) } model AddedToCourseNotification extends Notification { - courseId Int + courseId Int course Course @relation(fields: [courseId], references: [id], onDelete: Cascade) } `, - ); + ); - const r = await db.course.create({ - data: { - title: 'English classes', - addedToNotifications: { - createMany: { - data: [ - { - id: 1, - receiverId: 1, - senderId: 2, - }, - ], + const r = await db.course.create({ + data: { + title: 'English classes', + addedToNotifications: { + createMany: { + data: [ + { + id: 1, + receiverId: 1, + senderId: 2, + }, + ], + }, }, }, - }, - include: { addedToNotifications: true }, - }); + include: { addedToNotifications: true }, + }); - expect(r.addedToNotifications).toEqual( - expect.arrayContaining([ - expect.objectContaining({ - id: 1, - courseId: 1, - receiverId: 1, - senderId: 2, - }), - ]), - ); + expect(r.addedToNotifications).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + id: 1, + courseId: 1, + receiverId: 1, + senderId: 2, + }), + ]), + ); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1522.test.ts b/tests/regression/test/v2-migrated/issue-1522.test.ts index da18046a..7ae43c7f 100644 --- a/tests/regression/test/v2-migrated/issue-1522.test.ts +++ b/tests/regression/test/v2-migrated/issue-1522.test.ts @@ -1,90 +1,92 @@ import { createTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 1522', async () => { - const db = await createTestClient( - ` -model Course { - id String @id @default(uuid()) - title String - description String - sections Section[] - activities Activity[] - @@allow('all', true) -} +describe('Regression for issue #1522', () => { + it('verifies issue 1522', async () => { + const db = await createTestClient( + ` + model Course { + id String @id @default(uuid()) + title String + description String + sections Section[] + activities Activity[] + @@allow('all', true) + } -model Section { - id String @id @default(uuid()) - title String - courseId String - idx Int @default(0) - course Course @relation(fields: [courseId], references: [id]) - activities Activity[] -} + model Section { + id String @id @default(uuid()) + title String + courseId String + idx Int @default(0) + course Course @relation(fields: [courseId], references: [id]) + activities Activity[] + } -model Activity { - id String @id @default(uuid()) - title String - courseId String - sectionId String - idx Int @default(0) - type String - course Course @relation(fields: [courseId], references: [id]) - section Section @relation(fields: [sectionId], references: [id]) - @@delegate(type) -} + model Activity { + id String @id @default(uuid()) + title String + courseId String + sectionId String + idx Int @default(0) + type String + course Course @relation(fields: [courseId], references: [id]) + section Section @relation(fields: [sectionId], references: [id]) + @@delegate(type) + } -model UrlActivity extends Activity { - url String -} + model UrlActivity extends Activity { + url String + } -model TaskActivity extends Activity { - description String -} - `, - ); + model TaskActivity extends Activity { + description String + } + `, + ); - const course = await db.course.create({ - data: { - title: 'Test Course', - description: 'Description of course', - sections: { - create: { - id: '00000000-0000-0000-0000-000000000002', - title: 'Test Section', - idx: 0, + const course = await db.course.create({ + data: { + title: 'Test Course', + description: 'Description of course', + sections: { + create: { + id: '00000000-0000-0000-0000-000000000002', + title: 'Test Section', + idx: 0, + }, }, }, - }, - include: { - sections: true, - }, - }); + include: { + sections: true, + }, + }); - const section = course.sections[0]; - await db.taskActivity.create({ - data: { - title: 'Test Activity', - description: 'Description of task', - idx: 0, - courseId: course.id, - sectionId: section.id, - }, - }); + const section = course.sections[0]; + await db.taskActivity.create({ + data: { + title: 'Test Activity', + description: 'Description of task', + idx: 0, + courseId: course.id, + sectionId: section.id, + }, + }); - const found = await db.course.findFirst({ - where: { id: course.id }, - include: { - sections: { - orderBy: { idx: 'asc' }, - include: { - activities: { orderBy: { idx: 'asc' } }, + const found = await db.course.findFirst({ + where: { id: course.id }, + include: { + sections: { + orderBy: { idx: 'asc' }, + include: { + activities: { orderBy: { idx: 'asc' } }, + }, }, }, - }, - }); + }); - expect(found.sections[0].activities[0]).toMatchObject({ - description: 'Description of task', + expect(found.sections[0].activities[0]).toMatchObject({ + description: 'Description of task', + }); }); }); diff --git a/tests/regression/test/v2-migrated/issue-1530.test.ts b/tests/regression/test/v2-migrated/issue-1530.test.ts index 55fb1089..d8877e84 100644 --- a/tests/regression/test/v2-migrated/issue-1530.test.ts +++ b/tests/regression/test/v2-migrated/issue-1530.test.ts @@ -1,34 +1,36 @@ import { createTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 1530', async () => { - const db = await createTestClient( - ` -model Category { - id Int @id @default(autoincrement()) - name String @unique +describe('Regression for issue #1530', () => { + it('verifies issue 1530', async () => { + const db = await createTestClient( + ` + model Category { + id Int @id @default(autoincrement()) + name String @unique - parentId Int? - parent Category? @relation("ParentChildren", fields: [parentId], references: [id]) - children Category[] @relation("ParentChildren") - @@allow('all', true) -} - `, - { usePrismaPush: true }, - ); + parentId Int? + parent Category? @relation("ParentChildren", fields: [parentId], references: [id]) + children Category[] @relation("ParentChildren") + @@allow('all', true) + } + `, + { usePrismaPush: true }, + ); - await db.$unuseAll().category.create({ - data: { id: 1, name: 'C1' }, - }); + await db.$unuseAll().category.create({ + data: { id: 1, name: 'C1' }, + }); - await db.category.update({ - where: { id: 1 }, - data: { parent: { connect: { id: 1 } } }, - }); + await db.category.update({ + where: { id: 1 }, + data: { parent: { connect: { id: 1 } } }, + }); - const r = await db.category.update({ - where: { id: 1 }, - data: { parent: { disconnect: true } }, + const r = await db.category.update({ + where: { id: 1 }, + data: { parent: { disconnect: true } }, + }); + expect(r.parent).toBeUndefined(); }); - expect(r.parent).toBeUndefined(); }); diff --git a/tests/regression/test/v2-migrated/issue-1551.test.ts b/tests/regression/test/v2-migrated/issue-1551.test.ts index 441eed43..beacb870 100644 --- a/tests/regression/test/v2-migrated/issue-1551.test.ts +++ b/tests/regression/test/v2-migrated/issue-1551.test.ts @@ -1,9 +1,10 @@ import { loadSchema } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 1551', async () => { - await loadSchema( - ` +describe('Regression for issue #1551', () => { + it('verifies issue 1551', async () => { + await loadSchema( + ` model User { id Int @id profile Profile? @relation(fields: [profileId], references: [id]) @@ -19,8 +20,9 @@ model Profile { } model IndividualProfile extends Profile { - name String + name String } `, - ); + ); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1562.test.ts b/tests/regression/test/v2-migrated/issue-1562.test.ts index 98e3e98a..3a7c7c05 100644 --- a/tests/regression/test/v2-migrated/issue-1562.test.ts +++ b/tests/regression/test/v2-migrated/issue-1562.test.ts @@ -1,25 +1,27 @@ import { createTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 1562', async () => { - const db = await createTestClient( - ` -type Base { - id String @id @default(uuid()) - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt() +describe('Regression for issue #1562', () => { + it('verifies issue 1562', async () => { + const db = await createTestClient( + ` + type Base { + id String @id @default(uuid()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt() - // require login - @@allow('all', true) -} + // require login + @@allow('all', true) + } -model User with Base { - name String @unique @regex('^[a-zA-Z0-9_]{3,30}$') + model User with Base { + name String @unique @regex('^[a-zA-Z0-9_]{3,30}$') - @@allow('read', true) -} - `, - ); + @@allow('read', true) + } + `, + ); - await expect(db.user.create({ data: { name: '1 2 3 4' } })).toBeRejectedByValidation(); + await expect(db.user.create({ data: { name: '1 2 3 4' } })).toBeRejectedByValidation(); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1563.test.ts b/tests/regression/test/v2-migrated/issue-1563.test.ts index 5b7c1b28..871927b3 100644 --- a/tests/regression/test/v2-migrated/issue-1563.test.ts +++ b/tests/regression/test/v2-migrated/issue-1563.test.ts @@ -1,26 +1,28 @@ import { createTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 1563', async () => { - const db = await createTestClient( - ` -model ModelA { - id String @id @default(cuid()) - ref ModelB[] -} +describe('Regression for issue #1563', () => { + it('verifies issue 1563', async () => { + const db = await createTestClient( + ` + model ModelA { + id String @id @default(cuid()) + ref ModelB[] + } -model ModelB { - id String @id @default(cuid()) - ref ModelA? @relation(fields: [refId], references: [id]) - refId String? + model ModelB { + id String @id @default(cuid()) + ref ModelA? @relation(fields: [refId], references: [id]) + refId String? - @@validate(refId != null, "refId must be set") -} - `, - ); + @@validate(refId != null, "refId must be set") + } + `, + ); - const a = await db.modelA.create({ data: {} }); - const b = await db.modelB.create({ data: { refId: a.id } }); + const a = await db.modelA.create({ data: {} }); + const b = await db.modelB.create({ data: { refId: a.id } }); - await expect(db.modelB.update({ where: { id: b.id }, data: { refId: a.id } })).toResolveTruthy(); + await expect(db.modelB.update({ where: { id: b.id }, data: { refId: a.id } })).toResolveTruthy(); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1575.test.ts b/tests/regression/test/v2-migrated/issue-1575.test.ts index c09ac5aa..3eb8fa1c 100644 --- a/tests/regression/test/v2-migrated/issue-1575.test.ts +++ b/tests/regression/test/v2-migrated/issue-1575.test.ts @@ -1,9 +1,10 @@ import { loadSchema } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 1575', async () => { - await loadSchema( - ` +describe('Regression for issue #1575', () => { + it('verifies issue 1575', async () => { + await loadSchema( + ` model UserAssets { id String @id @default(cuid()) videoId String @@ -25,5 +26,6 @@ model Movie extends Asset { duration Int } `, - ); + ); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1576.test.ts b/tests/regression/test/v2-migrated/issue-1576.test.ts index 078fd7cc..91870b3e 100644 --- a/tests/regression/test/v2-migrated/issue-1576.test.ts +++ b/tests/regression/test/v2-migrated/issue-1576.test.ts @@ -1,61 +1,63 @@ import { createTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 1576', async () => { - const db = await createTestClient( - ` -model Profile { - id Int @id @default(autoincrement()) - name String - items Item[] - type String - @@delegate(type) - @@allow('all', true) -} +describe('Regression for issue #1576', () => { + it('verifies issue 1576', async () => { + const db = await createTestClient( + ` + model Profile { + id Int @id @default(autoincrement()) + name String + items Item[] + type String + @@delegate(type) + @@allow('all', true) + } -model GoldProfile extends Profile { - ticket Int -} + model GoldProfile extends Profile { + ticket Int + } -model Item { - id Int @id @default(autoincrement()) - profileId Int - profile Profile @relation(fields: [profileId], references: [id]) - type String - @@delegate(type) - @@allow('all', true) -} + model Item { + id Int @id @default(autoincrement()) + profileId Int + profile Profile @relation(fields: [profileId], references: [id]) + type String + @@delegate(type) + @@allow('all', true) + } -model GoldItem extends Item { - inventory Boolean -} - `, - ); + model GoldItem extends Item { + inventory Boolean + } + `, + ); - const profile = await db.goldProfile.create({ - data: { - name: 'hello', - ticket: 5, - }, - }); + const profile = await db.goldProfile.create({ + data: { + name: 'hello', + ticket: 5, + }, + }); - await expect( - db.goldItem.createManyAndReturn({ - data: [ - { - profileId: profile.id, - inventory: true, - }, - { - profileId: profile.id, - inventory: true, - }, - ], - }), - ).resolves.toEqual( - expect.arrayContaining([ - expect.objectContaining({ profileId: profile.id, type: 'GoldItem', inventory: true }), - expect.objectContaining({ profileId: profile.id, type: 'GoldItem', inventory: true }), - ]), - ); + await expect( + db.goldItem.createManyAndReturn({ + data: [ + { + profileId: profile.id, + inventory: true, + }, + { + profileId: profile.id, + inventory: true, + }, + ], + }), + ).resolves.toEqual( + expect.arrayContaining([ + expect.objectContaining({ profileId: profile.id, type: 'GoldItem', inventory: true }), + expect.objectContaining({ profileId: profile.id, type: 'GoldItem', inventory: true }), + ]), + ); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1585.test.ts b/tests/regression/test/v2-migrated/issue-1585.test.ts index 388e0cde..aa9d3484 100644 --- a/tests/regression/test/v2-migrated/issue-1585.test.ts +++ b/tests/regression/test/v2-migrated/issue-1585.test.ts @@ -1,29 +1,31 @@ import { createTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 1585', async () => { - const db = await createTestClient( - ` - model Asset { - id Int @id @default(autoincrement()) - type String - views Int +describe('Regression for issue #1585', () => { + it('verifies issue 1585', async () => { + const db = await createTestClient( + ` + model Asset { + id Int @id @default(autoincrement()) + type String + views Int - @@allow('all', true) - @@delegate(type) - } + @@allow('all', true) + @@delegate(type) + } - model Post extends Asset { - title String - } - `, - ); + model Post extends Asset { + title String + } + `, + ); - await db.post.create({ data: { title: 'Post1', views: 0 } }); - await db.post.create({ data: { title: 'Post2', views: 1 } }); - await expect( - db.post.count({ - where: { views: { gt: 0 } }, - }), - ).resolves.toBe(1); + await db.post.create({ data: { title: 'Post1', views: 0 } }); + await db.post.create({ data: { title: 'Post2', views: 1 } }); + await expect( + db.post.count({ + where: { views: { gt: 0 } }, + }), + ).resolves.toBe(1); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1627.test.ts b/tests/regression/test/v2-migrated/issue-1627.test.ts index a086b42f..5337ef57 100644 --- a/tests/regression/test/v2-migrated/issue-1627.test.ts +++ b/tests/regression/test/v2-migrated/issue-1627.test.ts @@ -1,49 +1,51 @@ import { createPolicyTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; - -it('verifies issue 1627', async () => { - const db = await createPolicyTestClient( - ` -model User { - id String @id - memberships GymUser[] -} - -model Gym { - id String @id - members GymUser[] - - @@allow('all', true) -} - -model GymUser { - id String @id - userID String - user User @relation(fields: [userID], references: [id]) - gymID String? - gym Gym? @relation(fields: [gymID], references: [id]) - role String - - @@allow('read',gym.members?[user == auth() && (role == "ADMIN" || role == "TRAINER")]) - @@unique([userID, gymID]) -} - `, - ); - - await db.$unuseAll().user.create({ data: { id: '1' } }); - - await db.$unuseAll().gym.create({ - data: { - id: '1', - members: { - create: { - id: '1', - user: { connect: { id: '1' } }, - role: 'ADMIN', +import { describe, expect, it } from 'vitest'; + +describe('Regression for issue #1627', () => { + it('verifies issue 1627', async () => { + const db = await createPolicyTestClient( + ` + model User { + id String @id + memberships GymUser[] + } + + model Gym { + id String @id + members GymUser[] + + @@allow('all', true) + } + + model GymUser { + id String @id + userID String + user User @relation(fields: [userID], references: [id]) + gymID String? + gym Gym? @relation(fields: [gymID], references: [id]) + role String + + @@allow('read',gym.members?[user == auth() && (role == "ADMIN" || role == "TRAINER")]) + @@unique([userID, gymID]) + } + `, + ); + + await db.$unuseAll().user.create({ data: { id: '1' } }); + + await db.$unuseAll().gym.create({ + data: { + id: '1', + members: { + create: { + id: '1', + user: { connect: { id: '1' } }, + role: 'ADMIN', + }, }, }, - }, - }); + }); - await expect(db.gymUser.findMany()).resolves.toHaveLength(0); + await expect(db.gymUser.findMany()).resolves.toHaveLength(0); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1642.test.ts b/tests/regression/test/v2-migrated/issue-1642.test.ts index 3fc9b542..d0404af3 100644 --- a/tests/regression/test/v2-migrated/issue-1642.test.ts +++ b/tests/regression/test/v2-migrated/issue-1642.test.ts @@ -1,40 +1,42 @@ import { createPolicyTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 1642', async () => { - const db = await createPolicyTestClient( - ` -model User { - id Int @id - name String - posts Post[] +describe('Regression for issue #1642', () => { + it('verifies issue 1642', async () => { + const db = await createPolicyTestClient( + ` + model User { + id Int @id + name String + posts Post[] - @@allow('read', true) - @@allow('all', auth().id == 1) -} + @@allow('read', true) + @@allow('all', auth().id == 1) + } -model Post { - id Int @id - title String - description String - author User @relation(fields: [authorId], references: [id]) - authorId Int + model Post { + id Int @id + title String + description String + author User @relation(fields: [authorId], references: [id]) + authorId Int - // delegate all access policies to the author: - @@allow('all', check(author)) - @@allow('update', true) - @@allow('post-update', title == 'hello') -} - `, - ); + // delegate all access policies to the author: + @@allow('all', check(author)) + @@allow('update', true) + @@allow('post-update', title == 'hello') + } + `, + ); - await db.$unuseAll().user.create({ data: { id: 1, name: 'User1' } }); - await db.$unuseAll().post.create({ data: { id: 1, title: 'hello', description: 'desc1', authorId: 1 } }); + await db.$unuseAll().user.create({ data: { id: 1, name: 'User1' } }); + await db.$unuseAll().post.create({ data: { id: 1, title: 'hello', description: 'desc1', authorId: 1 } }); - const authDb = db.$setAuth({ id: 2 }); - await expect( - authDb.post.update({ where: { id: 1 }, data: { title: 'world', description: 'desc2' } }), - ).toBeRejectedByPolicy(); + const authDb = db.$setAuth({ id: 2 }); + await expect( + authDb.post.update({ where: { id: 1 }, data: { title: 'world', description: 'desc2' } }), + ).toBeRejectedByPolicy(); - await expect(authDb.post.update({ where: { id: 1 }, data: { description: 'desc2' } })).toResolveTruthy(); + await expect(authDb.post.update({ where: { id: 1 }, data: { description: 'desc2' } })).toResolveTruthy(); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1645.test.ts b/tests/regression/test/v2-migrated/issue-1645.test.ts index a04fca7d..8db966d4 100644 --- a/tests/regression/test/v2-migrated/issue-1645.test.ts +++ b/tests/regression/test/v2-migrated/issue-1645.test.ts @@ -1,201 +1,203 @@ import { createPolicyTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; - -it('verifies issue 1645', async () => { - const db = await createPolicyTestClient( - ` -model Product { - id String @id @default(cuid()) - name String - slug String - description String? - sku String - price Int - onSale Boolean @default(false) - salePrice Int @default(0) - saleStartDateTime DateTime? - saleEndDateTime DateTime? - scheduledAvailability Boolean @default(false) - availabilityStartDateTime DateTime? - availabilityEndDateTime DateTime? - type String @default('VARIABLE') - image String - orderItems OrderItem[] - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt - - @@unique([slug]) - - @@allow('all', true) -} - -model BaseOrder { - id String @id @default(cuid()) - orderNumber String @unique @default(nanoid(16)) - lineItems OrderItem[] - status String @default('PENDING') - type String @default('PARENT') - userType String? - billingAddress BillingAddress @relation(fields: [billingAddressId], references: [id]) - billingAddressId String @map("billing_address_id") - shippingAddress ShippingAddress @relation(fields: [shippingAddressId], references: [id]) - shippingAddressId String @map("shipping_address_id") - notes String? @default('') - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt - - @@allow('all', true) - @@delegate(userType) -} - -model Order extends BaseOrder { - parentId String? @map("parent_id") - parent Order? @relation("OrderToParent", fields: [parentId], references: [id]) - groupedOrders Order[] @relation("OrderToParent") - user User @relation(fields: [userId], references: [id], onDelete: Cascade) - userId String @map("user_id") -} - -model User { - id String @id @default(cuid()) - name String? - email String? @unique - emailVerified DateTime? - image String? - orders Order[] - billingAddresses BillingAddress[] - shippingAddresses ShippingAddress[] - - @@allow('create,read', true) - @@allow('update,delete', auth().id == this.id) -} - -model GuestUser { - id String @id @default(cuid()) - name String? - email String @unique - orders GuestOrder[] - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt - - @@auth - @@allow('all', true) -} - -model GuestOrder extends BaseOrder { - guestUser GuestUser @relation(fields: [guestUserId], references: [id], onDelete: Cascade) - guestUserId String @map("guest_user_id") - parentId String? @map("parent_id") - parent GuestOrder? @relation("OrderToParent", fields: [parentId], references: [id]) - groupedOrders GuestOrder[] @relation("OrderToParent") -} - -model OrderItem { - id String @id @default(cuid()) - order BaseOrder @relation(fields: [orderId], references: [id], onDelete: Cascade) - orderId String @map("order_id") - product Product @relation(fields: [productId], references: [id]) - productId String @map("product_id") - quantity Int - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt - - @@allow('all', true) -} - -model OrderAddress { - id String @id @default(cuid()) - firstName String - lastName String - address1 String - address2 String? - city String - state String - postalCode String - country String - email String - phone String - type String - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt - - @@allow('all', true) - @@delegate(type) -} - -model BillingAddress extends OrderAddress { - user User? @relation(fields: [userId], references: [id], onDelete: Cascade) - userId String? @map("user_id") - order BaseOrder[] -} - -model ShippingAddress extends OrderAddress { - user User? @relation(fields: [userId], references: [id], onDelete: Cascade) - userId String? @map("user_id") - order BaseOrder[] -} - `, - { usePrismaPush: true }, - ); - - await db.user.create({ data: { id: '1', name: 'John', email: 'john@example.com' } }); - - const shipping = await db.shippingAddress.create({ - data: { - id: '1', - firstName: 'John', - lastName: 'Doe', - address1: '123 Main St', - city: 'Anytown', - state: 'CA', - postalCode: '12345', - country: 'US', - email: 'john@example.com', - phone: '123-456-7890', - user: { connect: { id: '1' } }, - }, +import { describe, expect, it } from 'vitest'; + +describe('Regression for issue #1645', () => { + it('verifies issue 1645', async () => { + const db = await createPolicyTestClient( + ` + model Product { + id String @id @default(cuid()) + name String + slug String + description String? + sku String + price Int + onSale Boolean @default(false) + salePrice Int @default(0) + saleStartDateTime DateTime? + saleEndDateTime DateTime? + scheduledAvailability Boolean @default(false) + availabilityStartDateTime DateTime? + availabilityEndDateTime DateTime? + type String @default('VARIABLE') + image String + orderItems OrderItem[] + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@unique([slug]) + + @@allow('all', true) + } + + model BaseOrder { + id String @id @default(cuid()) + orderNumber String @unique @default(nanoid(16)) + lineItems OrderItem[] + status String @default('PENDING') + type String @default('PARENT') + userType String? + billingAddress BillingAddress @relation(fields: [billingAddressId], references: [id]) + billingAddressId String @map("billing_address_id") + shippingAddress ShippingAddress @relation(fields: [shippingAddressId], references: [id]) + shippingAddressId String @map("shipping_address_id") + notes String? @default('') + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@allow('all', true) + @@delegate(userType) + } + + model Order extends BaseOrder { + parentId String? @map("parent_id") + parent Order? @relation("OrderToParent", fields: [parentId], references: [id]) + groupedOrders Order[] @relation("OrderToParent") + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + userId String @map("user_id") + } + + model User { + id String @id @default(cuid()) + name String? + email String? @unique + emailVerified DateTime? + image String? + orders Order[] + billingAddresses BillingAddress[] + shippingAddresses ShippingAddress[] + + @@allow('create,read', true) + @@allow('update,delete', auth().id == this.id) + } + + model GuestUser { + id String @id @default(cuid()) + name String? + email String @unique + orders GuestOrder[] + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@auth + @@allow('all', true) + } + + model GuestOrder extends BaseOrder { + guestUser GuestUser @relation(fields: [guestUserId], references: [id], onDelete: Cascade) + guestUserId String @map("guest_user_id") + parentId String? @map("parent_id") + parent GuestOrder? @relation("OrderToParent", fields: [parentId], references: [id]) + groupedOrders GuestOrder[] @relation("OrderToParent") + } + + model OrderItem { + id String @id @default(cuid()) + order BaseOrder @relation(fields: [orderId], references: [id], onDelete: Cascade) + orderId String @map("order_id") + product Product @relation(fields: [productId], references: [id]) + productId String @map("product_id") + quantity Int + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@allow('all', true) + } + + model OrderAddress { + id String @id @default(cuid()) + firstName String + lastName String + address1 String + address2 String? + city String + state String + postalCode String + country String + email String + phone String + type String + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + + @@allow('all', true) + @@delegate(type) + } + + model BillingAddress extends OrderAddress { + user User? @relation(fields: [userId], references: [id], onDelete: Cascade) + userId String? @map("user_id") + order BaseOrder[] + } + + model ShippingAddress extends OrderAddress { + user User? @relation(fields: [userId], references: [id], onDelete: Cascade) + userId String? @map("user_id") + order BaseOrder[] + } + `, + { usePrismaPush: true }, + ); + + await db.user.create({ data: { id: '1', name: 'John', email: 'john@example.com' } }); + + const shipping = await db.shippingAddress.create({ + data: { + id: '1', + firstName: 'John', + lastName: 'Doe', + address1: '123 Main St', + city: 'Anytown', + state: 'CA', + postalCode: '12345', + country: 'US', + email: 'john@example.com', + phone: '123-456-7890', + user: { connect: { id: '1' } }, + }, + }); + + const billing = await db.billingAddress.create({ + data: { + id: '2', + firstName: 'John', + lastName: 'Doe', + address1: '123 Main St', + city: 'Anytown', + state: 'CA', + postalCode: '12345', + country: 'US', + email: 'john@example.com', + phone: '123-456-7890', + user: { connect: { id: '1' } }, + }, + }); + + await db.order.create({ + data: { + id: '1', + orderNumber: '1', + status: 'PENDING', + type: 'PARENT', + shippingAddress: { connect: { id: '1' } }, + billingAddress: { connect: { id: '2' } }, + user: { connect: { id: '1' } }, + }, + }); + + const updated = await db.order.update({ + where: { id: '1' }, + include: { + lineItems: true, + billingAddress: true, + shippingAddress: true, + }, + data: { + type: 'CAMPAIGN', + }, + }); + + expect(updated.shippingAddress).toEqual(shipping); + expect(updated.billingAddress).toEqual(billing); }); - - const billing = await db.billingAddress.create({ - data: { - id: '2', - firstName: 'John', - lastName: 'Doe', - address1: '123 Main St', - city: 'Anytown', - state: 'CA', - postalCode: '12345', - country: 'US', - email: 'john@example.com', - phone: '123-456-7890', - user: { connect: { id: '1' } }, - }, - }); - - await db.order.create({ - data: { - id: '1', - orderNumber: '1', - status: 'PENDING', - type: 'PARENT', - shippingAddress: { connect: { id: '1' } }, - billingAddress: { connect: { id: '2' } }, - user: { connect: { id: '1' } }, - }, - }); - - const updated = await db.order.update({ - where: { id: '1' }, - include: { - lineItems: true, - billingAddress: true, - shippingAddress: true, - }, - data: { - type: 'CAMPAIGN', - }, - }); - - expect(updated.shippingAddress).toEqual(shipping); - expect(updated.billingAddress).toEqual(billing); }); diff --git a/tests/regression/test/v2-migrated/issue-1648.test.ts b/tests/regression/test/v2-migrated/issue-1648.test.ts index 7fe06686..f9e0f3c9 100644 --- a/tests/regression/test/v2-migrated/issue-1648.test.ts +++ b/tests/regression/test/v2-migrated/issue-1648.test.ts @@ -1,42 +1,44 @@ import { createPolicyTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; - -it('verifies issue 1648', async () => { - const db = await createPolicyTestClient( - ` -model User { - id Int @id @default(autoincrement()) - profile Profile? - posts Post[] -} - -model Profile { - id Int @id @default(autoincrement()) - someText String - user User @relation(fields: [userId], references: [id]) - userId Int @unique -} - -model Post { - id Int @id @default(autoincrement()) - title String - - userId Int - user User @relation(fields: [userId], references: [id]) - - // this will always be true, even if the someText field is "canUpdate" - @@deny("post-update", user.profile.someText != "canUpdate") - - @@allow("all", true) -} - `, - ); - - await db.$unuseAll().user.create({ data: { id: 1, profile: { create: { someText: 'canUpdate' } } } }); - await db.$unuseAll().user.create({ data: { id: 2, profile: { create: { someText: 'nothing' } } } }); - await db.$unuseAll().post.create({ data: { id: 1, title: 'Post1', userId: 1 } }); - await db.$unuseAll().post.create({ data: { id: 2, title: 'Post2', userId: 2 } }); - - await expect(db.post.update({ where: { id: 1 }, data: { title: 'Post1-1' } })).toResolveTruthy(); - await expect(db.post.update({ where: { id: 2 }, data: { title: 'Post2-2' } })).toBeRejectedByPolicy(); +import { describe, expect, it } from 'vitest'; + +describe('Regression for issue #1648', () => { + it('verifies issue 1648', async () => { + const db = await createPolicyTestClient( + ` + model User { + id Int @id @default(autoincrement()) + profile Profile? + posts Post[] + } + + model Profile { + id Int @id @default(autoincrement()) + someText String + user User @relation(fields: [userId], references: [id]) + userId Int @unique + } + + model Post { + id Int @id @default(autoincrement()) + title String + + userId Int + user User @relation(fields: [userId], references: [id]) + + // this will always be true, even if the someText field is "canUpdate" + @@deny("post-update", user.profile.someText != "canUpdate") + + @@allow("all", true) + } + `, + ); + + await db.$unuseAll().user.create({ data: { id: 1, profile: { create: { someText: 'canUpdate' } } } }); + await db.$unuseAll().user.create({ data: { id: 2, profile: { create: { someText: 'nothing' } } } }); + await db.$unuseAll().post.create({ data: { id: 1, title: 'Post1', userId: 1 } }); + await db.$unuseAll().post.create({ data: { id: 2, title: 'Post2', userId: 2 } }); + + await expect(db.post.update({ where: { id: 1 }, data: { title: 'Post1-1' } })).toResolveTruthy(); + await expect(db.post.update({ where: { id: 2 }, data: { title: 'Post2-2' } })).toBeRejectedByPolicy(); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1674.test.ts b/tests/regression/test/v2-migrated/issue-1674.test.ts index 759f7d82..88c91625 100644 --- a/tests/regression/test/v2-migrated/issue-1674.test.ts +++ b/tests/regression/test/v2-migrated/issue-1674.test.ts @@ -1,80 +1,82 @@ import { createPolicyTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 1674', async () => { - const db = await createPolicyTestClient( - ` -model User { - id String @id @default(cuid()) - email String @unique @email @length(6, 32) - posts Post[] +describe('Regression for issue #1674', () => { + it('verifies issue 1674', async () => { + const db = await createPolicyTestClient( + ` + model User { + id String @id @default(cuid()) + email String @unique @email @length(6, 32) + posts Post[] - // everybody can signup - @@allow('create', true) + // everybody can signup + @@allow('create', true) - // full access by self - @@allow('all', auth() == this) -} + // full access by self + @@allow('all', auth() == this) + } -model Blog { - id String @id @default(cuid()) - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt + model Blog { + id String @id @default(cuid()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt - post Post? @relation(fields: [postId], references: [id], onDelete: Cascade) - postId String? -} + post Post? @relation(fields: [postId], references: [id], onDelete: Cascade) + postId String? + } -model Post { - id String @id @default(cuid()) - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt - title String @length(1, 256) - content String - published Boolean @default(false) - author User @relation(fields: [authorId], references: [id]) - authorId String + model Post { + id String @id @default(cuid()) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + title String @length(1, 256) + content String + published Boolean @default(false) + author User @relation(fields: [authorId], references: [id]) + authorId String - blogs Blog[] + blogs Blog[] - type String + type String - @@delegate(type) -} + @@delegate(type) + } -model PostA extends Post { -} + model PostA extends Post { + } -model PostB extends Post { -} - `, - ); + model PostB extends Post { + } + `, + ); - const user = await db.$unuseAll().user.create({ - data: { email: 'abc@def.com' }, - }); + const user = await db.$unuseAll().user.create({ + data: { email: 'abc@def.com' }, + }); - const blog = await db.$unuseAll().blog.create({ - data: {}, - }); + const blog = await db.$unuseAll().blog.create({ + data: {}, + }); - const authDb = db.$setAuth(user); - await expect( - authDb.postA.create({ - data: { - content: 'content', - title: 'title', - blogs: { - connect: { - id: blog.id, + const authDb = db.$setAuth(user); + await expect( + authDb.postA.create({ + data: { + content: 'content', + title: 'title', + blogs: { + connect: { + id: blog.id, + }, }, - }, - author: { - connect: { - id: user.id, + author: { + connect: { + id: user.id, + }, }, }, - }, - }), - ).toBeRejectedByPolicy(); + }), + ).toBeRejectedByPolicy(); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1681.test.ts b/tests/regression/test/v2-migrated/issue-1681.test.ts index 5fb20312..0483a1c3 100644 --- a/tests/regression/test/v2-migrated/issue-1681.test.ts +++ b/tests/regression/test/v2-migrated/issue-1681.test.ts @@ -1,29 +1,31 @@ import { createTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 1681', async () => { - const db = await createTestClient( - ` -model User { - id Int @id @default(autoincrement()) - posts Post[] - @@allow('all', true) -} +describe('Regression for issue #1681', () => { + it('verifies issue 1681', async () => { + const db = await createTestClient( + ` + model User { + id Int @id @default(autoincrement()) + posts Post[] + @@allow('all', true) + } -model Post { - id Int @id @default(autoincrement()) - title String - author User @relation(fields: [authorId], references: [id]) - authorId Int @default(auth().id) - @@allow('all', true) -} - `, - ); + model Post { + id Int @id @default(autoincrement()) + title String + author User @relation(fields: [authorId], references: [id]) + authorId Int @default(auth().id) + @@allow('all', true) + } + `, + ); - const authDb = db.$setAuth({ id: 1 }); - const user = await db.user.create({ data: {} }); - await expect(authDb.post.createMany({ data: [{ title: 'Post1' }] })).resolves.toMatchObject({ count: 1 }); + const authDb = db.$setAuth({ id: 1 }); + const user = await db.user.create({ data: {} }); + await expect(authDb.post.createMany({ data: [{ title: 'Post1' }] })).resolves.toMatchObject({ count: 1 }); - const r = await authDb.post.createManyAndReturn({ data: [{ title: 'Post2' }] }); - expect(r[0].authorId).toBe(user.id); + const r = await authDb.post.createManyAndReturn({ data: [{ title: 'Post2' }] }); + expect(r[0].authorId).toBe(user.id); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1693.test.ts b/tests/regression/test/v2-migrated/issue-1693.test.ts index 04c4075b..6d0af298 100644 --- a/tests/regression/test/v2-migrated/issue-1693.test.ts +++ b/tests/regression/test/v2-migrated/issue-1693.test.ts @@ -1,9 +1,10 @@ import { loadSchema } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 1693', async () => { - await loadSchema( - ` +describe('Regression for issue #1693', () => { + it('verifies issue 1693', async () => { + await loadSchema( + ` model Animal { id String @id @default(uuid()) animalType String @default("") @@ -14,5 +15,6 @@ model Dog extends Animal { name String } `, - ); + ); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1695.test.ts b/tests/regression/test/v2-migrated/issue-1695.test.ts index a713f1af..a297f726 100644 --- a/tests/regression/test/v2-migrated/issue-1695.test.ts +++ b/tests/regression/test/v2-migrated/issue-1695.test.ts @@ -1,9 +1,10 @@ import { loadSchema } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 1695', async () => { - await loadSchema( - ` +describe('Regression for issue #1695', () => { + it('verifies issue 1695', async () => { + await loadSchema( + ` type SoftDelete { deleted Int @default(0) } @@ -17,5 +18,6 @@ model MyModel with SoftDelete { @@deny('read', this.deleted != 0) } `, - ); + ); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1698.test.ts b/tests/regression/test/v2-migrated/issue-1698.test.ts index c93dfa03..3df2e823 100644 --- a/tests/regression/test/v2-migrated/issue-1698.test.ts +++ b/tests/regression/test/v2-migrated/issue-1698.test.ts @@ -1,72 +1,74 @@ import { createTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 1698', async () => { - const db = await createTestClient( - ` -model House { - id Int @id @default(autoincrement()) - doorTypeId Int - door Door @relation(fields: [doorTypeId], references: [id]) - houseType String - @@delegate(houseType) -} +describe('Regression for issue #1698', () => { + it('verifies issue 1698', async () => { + const db = await createTestClient( + ` + model House { + id Int @id @default(autoincrement()) + doorTypeId Int + door Door @relation(fields: [doorTypeId], references: [id]) + houseType String + @@delegate(houseType) + } -model PrivateHouse extends House { - size Int -} + model PrivateHouse extends House { + size Int + } -model Skyscraper extends House { - height Int -} + model Skyscraper extends House { + height Int + } -model Door { - id Int @id @default(autoincrement()) - color String - doorType String - houses House[] - @@delegate(doorType) -} + model Door { + id Int @id @default(autoincrement()) + color String + doorType String + houses House[] + @@delegate(doorType) + } -model IronDoor extends Door { - strength Int -} + model IronDoor extends Door { + strength Int + } -model WoodenDoor extends Door { - texture String -} - `, - ); + model WoodenDoor extends Door { + texture String + } + `, + ); - const door1 = await db.ironDoor.create({ - data: { strength: 100, color: 'blue' }, - }); - console.log(door1); + const door1 = await db.ironDoor.create({ + data: { strength: 100, color: 'blue' }, + }); + console.log(door1); - const door2 = await db.woodenDoor.create({ - data: { texture: 'pine', color: 'red' }, - }); - console.log(door2); + const door2 = await db.woodenDoor.create({ + data: { texture: 'pine', color: 'red' }, + }); + console.log(door2); - const house1 = await db.privateHouse.create({ - data: { size: 5000, door: { connect: { id: door1.id } } }, - }); - console.log(house1); + const house1 = await db.privateHouse.create({ + data: { size: 5000, door: { connect: { id: door1.id } } }, + }); + console.log(house1); - const house2 = await db.skyscraper.create({ - data: { height: 3000, door: { connect: { id: door2.id } } }, - }); - console.log(house2); + const house2 = await db.skyscraper.create({ + data: { height: 3000, door: { connect: { id: door2.id } } }, + }); + console.log(house2); - const r1 = await db.privateHouse.findFirst({ include: { door: true } }); - console.log(r1); - expect(r1).toMatchObject({ - door: { color: 'blue', strength: 100 }, - }); + const r1 = await db.privateHouse.findFirst({ include: { door: true } }); + console.log(r1); + expect(r1).toMatchObject({ + door: { color: 'blue', strength: 100 }, + }); - const r2 = (await db.skyscraper.findMany({ include: { door: true } }))[0]; - console.log(r2); - expect(r2).toMatchObject({ - door: { color: 'red', texture: 'pine' }, + const r2 = (await db.skyscraper.findMany({ include: { door: true } }))[0]; + console.log(r2); + expect(r2).toMatchObject({ + door: { color: 'red', texture: 'pine' }, + }); }); }); diff --git a/tests/regression/test/v2-migrated/issue-1745.test.ts b/tests/regression/test/v2-migrated/issue-1745.test.ts index 9140ad84..1dc3b91d 100644 --- a/tests/regression/test/v2-migrated/issue-1745.test.ts +++ b/tests/regression/test/v2-migrated/issue-1745.test.ts @@ -1,9 +1,10 @@ import { loadSchema } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 1745', async () => { - await loadSchema( - ` +describe('Regression for issue #1745', () => { + it('verifies issue 1745', async () => { + await loadSchema( + ` datasource db { provider = 'postgresql' url = env('DATABASE_URL') @@ -90,5 +91,6 @@ model User with Base { @@allow('all', auth().isAdmin) } `, - ); + ); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1755.test.ts b/tests/regression/test/v2-migrated/issue-1755.test.ts index 47ac92a1..5615e0c3 100644 --- a/tests/regression/test/v2-migrated/issue-1755.test.ts +++ b/tests/regression/test/v2-migrated/issue-1755.test.ts @@ -1,58 +1,60 @@ import { createTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; - -it('verifies issue 1755', async () => { - const db = await createTestClient( - ` -model User { - id Int @id @default(autoincrement()) - contents Content[] -} - -model Content { - id Int @id @default(autoincrement()) - createdAt DateTime @default(now()) - user User @relation(fields: [userId], references: [id]) - userId Int - contentType String - @@delegate(contentType) -} - -model Post extends Content { - title String -} - -model Video extends Content { - name String - duration Int -} - `, - ); - - const user = await db.user.create({ data: {} }); - const now = Date.now(); - await db.post.create({ - data: { title: 'post1', createdAt: new Date(now - 1000), user: { connect: { id: user.id } } }, - }); - await db.post.create({ - data: { title: 'post2', createdAt: new Date(now), user: { connect: { id: user.id } } }, - }); - - // scalar orderBy - await expect(db.post.findFirst({ orderBy: { createdAt: 'desc' } })).resolves.toMatchObject({ - title: 'post2', - }); - - // array orderBy - await expect(db.post.findFirst({ orderBy: [{ createdAt: 'desc' }] })).resolves.toMatchObject({ - title: 'post2', - }); - - // nested orderBy - await expect( - db.user.findFirst({ include: { contents: { orderBy: [{ createdAt: 'desc' }] } } }), - ).resolves.toMatchObject({ - id: user.id, - contents: [{ title: 'post2' }, { title: 'post1' }], +import { describe, expect, it } from 'vitest'; + +describe('Regression for issue #1755', () => { + it('verifies issue 1755', async () => { + const db = await createTestClient( + ` + model User { + id Int @id @default(autoincrement()) + contents Content[] + } + + model Content { + id Int @id @default(autoincrement()) + createdAt DateTime @default(now()) + user User @relation(fields: [userId], references: [id]) + userId Int + contentType String + @@delegate(contentType) + } + + model Post extends Content { + title String + } + + model Video extends Content { + name String + duration Int + } + `, + ); + + const user = await db.user.create({ data: {} }); + const now = Date.now(); + await db.post.create({ + data: { title: 'post1', createdAt: new Date(now - 1000), user: { connect: { id: user.id } } }, + }); + await db.post.create({ + data: { title: 'post2', createdAt: new Date(now), user: { connect: { id: user.id } } }, + }); + + // scalar orderBy + await expect(db.post.findFirst({ orderBy: { createdAt: 'desc' } })).resolves.toMatchObject({ + title: 'post2', + }); + + // array orderBy + await expect(db.post.findFirst({ orderBy: [{ createdAt: 'desc' }] })).resolves.toMatchObject({ + title: 'post2', + }); + + // nested orderBy + await expect( + db.user.findFirst({ include: { contents: { orderBy: [{ createdAt: 'desc' }] } } }), + ).resolves.toMatchObject({ + id: user.id, + contents: [{ title: 'post2' }, { title: 'post1' }], + }); }); }); diff --git a/tests/regression/test/v2-migrated/issue-1758.test.ts b/tests/regression/test/v2-migrated/issue-1758.test.ts index d62282e6..3a32386f 100644 --- a/tests/regression/test/v2-migrated/issue-1758.test.ts +++ b/tests/regression/test/v2-migrated/issue-1758.test.ts @@ -1,9 +1,10 @@ import { loadSchemaWithError } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 1758', async () => { - await loadSchemaWithError( - ` +describe('Regression for issue #1758', () => { + it('verifies issue 1758', async () => { + await loadSchemaWithError( + ` model Organization { id String @id @default(cuid()) contents Content[] @relation("OrganizationContents") @@ -22,6 +23,7 @@ model Store extends Content { @@unique([organizationId, name]) } `, - 'Cannot use fields inherited from a polymorphic base model in `@@unique`', - ); + 'Cannot use fields inherited from a polymorphic base model in `@@unique`', + ); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1763.test.ts b/tests/regression/test/v2-migrated/issue-1763.test.ts index ec3d5748..ec571787 100644 --- a/tests/regression/test/v2-migrated/issue-1763.test.ts +++ b/tests/regression/test/v2-migrated/issue-1763.test.ts @@ -1,9 +1,10 @@ import { createTestClient } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 1763', async () => { - await createTestClient( - ` +describe('Regression for issue #1763', () => { + it('verifies issue 1763', async () => { + await createTestClient( + ` model Post { id Int @id @default(autoincrement()) name String @@ -20,9 +21,9 @@ model ConcretePost extends Post { } `, - { - extraSourceFiles: { - main: ` + { + extraSourceFiles: { + main: ` import { ZenStackClient } from '@zenstackhq/runtime'; import { schema } from './schema'; @@ -36,7 +37,8 @@ async function test() { }, }); }`, + }, }, - }, - ); + ); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-177.test.ts b/tests/regression/test/v2-migrated/issue-177.test.ts index 4c8558fb..146cd776 100644 --- a/tests/regression/test/v2-migrated/issue-177.test.ts +++ b/tests/regression/test/v2-migrated/issue-177.test.ts @@ -1,25 +1,27 @@ import { loadSchemaWithError } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 177', async () => { - await loadSchemaWithError( - ` +describe('Regression for issue 177', () => { + it('verifies issue 177', async () => { + await loadSchemaWithError( + ` model Foo { id String @id @default(cuid()) - + bar Bar @relation(fields: [barId1, barId2], references: [id1, id2]) barId1 String? barId2 String } - + model Bar { id1 String @default(cuid()) id2 String @default(cuid()) foos Foo[] @@id([id1, id2]) - } + } `, - 'relation "bar" is not optional, but field "barId1" is optional', - ); + 'relation "bar" is not optional, but field "barId1" is optional', + ); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1786.test.ts b/tests/regression/test/v2-migrated/issue-1786.test.ts index f67a98a7..fd373573 100644 --- a/tests/regression/test/v2-migrated/issue-1786.test.ts +++ b/tests/regression/test/v2-migrated/issue-1786.test.ts @@ -1,9 +1,10 @@ import { loadSchema } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 1786', async () => { - await loadSchema( - ` +describe('Regression for issue #1786', () => { + it('verifies issue 1786', async () => { + await loadSchema( + ` model User { id String @id @default(cuid()) email String @unique @email @length(6, 32) @@ -40,7 +41,8 @@ it('verifies issue 1786', async () => { model Video extends Content { name String duration Int - } + } `, - ); + ); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1835.test.ts b/tests/regression/test/v2-migrated/issue-1835.test.ts index 2cc6f088..01af7721 100644 --- a/tests/regression/test/v2-migrated/issue-1835.test.ts +++ b/tests/regression/test/v2-migrated/issue-1835.test.ts @@ -1,9 +1,10 @@ import { loadSchema } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 1835', async () => { - await loadSchema( - ` +describe('Regression for issue #1835', () => { + it('verifies issue 1835', async () => { + await loadSchema( + ` enum Enum { SOME_VALUE ANOTHER_VALUE @@ -19,5 +20,6 @@ model AnotherModel { id String @id @default(cuid()) } `, - ); + ); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1849.test.ts b/tests/regression/test/v2-migrated/issue-1849.test.ts index cf99d6f3..9dc4c2b3 100644 --- a/tests/regression/test/v2-migrated/issue-1849.test.ts +++ b/tests/regression/test/v2-migrated/issue-1849.test.ts @@ -1,9 +1,10 @@ import { loadSchema } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 1849', async () => { - await loadSchema( - ` +describe('Regression for issue #1849', () => { + it('verifies issue 1849', async () => { + await loadSchema( + ` import './enum' datasource db { @@ -15,13 +16,14 @@ model Post { id Int @id status Status @default(PUBLISHED) }`, - { - enum: ` -enum Status { + { + enum: ` +enum Status { PENDING PUBLISHED -} +} `, - }, - ); + }, + ); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1857.test.ts b/tests/regression/test/v2-migrated/issue-1857.test.ts index 2df875b2..99c9a862 100644 --- a/tests/regression/test/v2-migrated/issue-1857.test.ts +++ b/tests/regression/test/v2-migrated/issue-1857.test.ts @@ -1,9 +1,10 @@ import { createTestClient } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 1857', async () => { - await createTestClient( - ` +describe('Regression for issue #1857', () => { + it('verifies issue 1857', async () => { + await createTestClient( + ` type JSONContent { type String text String? @@ -15,12 +16,12 @@ it('verifies issue 1857', async () => { @@allow('all', true) } `, - { - extraSourceFiles: { - main: ` + { + extraSourceFiles: { + main: ` import { ZenStackClient } from '@zenstackhq/runtime'; import { schema } from './schema'; - + async function main() { const db = new ZenStackClient(schema, {} as any); await db.post.create({ @@ -30,10 +31,11 @@ it('verifies issue 1857', async () => { }); } `, + }, }, - }, - ); + ); - // TODO: zod schema support - // zodSchemas.models.JSONContentSchema.parse({ type: 'foo', text: null }); + // TODO: zod schema support + // zodSchemas.models.JSONContentSchema.parse({ type: 'foo', text: null }); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1870.test.ts b/tests/regression/test/v2-migrated/issue-1870.test.ts index 15c8b668..f2ec84c0 100644 --- a/tests/regression/test/v2-migrated/issue-1870.test.ts +++ b/tests/regression/test/v2-migrated/issue-1870.test.ts @@ -1,14 +1,16 @@ import { loadSchema } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 1870', async () => { - await loadSchema( - ` +describe('Regression for issue #1870', () => { + it('verifies issue 1870', async () => { + await loadSchema( + ` model Polygon { id Int @id @default(autoincrement()) geometry Unsupported("geometry(MultiPolygon, 4326)") @@index([geometry], name: "parcel_polygon_idx", type: Gist) } `, - ); + ); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1894.test.ts b/tests/regression/test/v2-migrated/issue-1894.test.ts index 92f4710e..0f3c3fec 100644 --- a/tests/regression/test/v2-migrated/issue-1894.test.ts +++ b/tests/regression/test/v2-migrated/issue-1894.test.ts @@ -1,46 +1,48 @@ import { createTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; - -it('verifies issue 1894', async () => { - const db = await createTestClient( - ` -model A { - id Int @id @default(autoincrement()) - b B[] -} - -model B { - id Int @id @default(autoincrement()) - a A @relation(fields: [aId], references: [id]) - aId Int - - type String - @@delegate(type) -} - -model C extends B { - f String? -} - `, - { - extraSourceFiles: { - main: ` - import { ZenStackClient } from '@zenstackhq/runtime'; - import { schema } from './schema'; - - async function main() { - const db = new ZenStackClient(schema, {} as any); - await db.a.create({ data: { id: 0 } }); - await db.c.create({ data: { a: { connect: { id: 0 } } } }); - } - - main(); - -`, +import { describe, expect, it } from 'vitest'; + +describe('Regression for issue #1894', () => { + it('verifies issue 1894', async () => { + const db = await createTestClient( + ` + model A { + id Int @id @default(autoincrement()) + b B[] + } + + model B { + id Int @id @default(autoincrement()) + a A @relation(fields: [aId], references: [id]) + aId Int + + type String + @@delegate(type) + } + + model C extends B { + f String? + } + `, + { + extraSourceFiles: { + main: ` + import { ZenStackClient } from '@zenstackhq/runtime'; + import { schema } from './schema'; + + async function main() { + const db = new ZenStackClient(schema, {} as any); + await db.a.create({ data: { id: 0 } }); + await db.c.create({ data: { a: { connect: { id: 0 } } } }); + } + + main(); + + `, + }, }, - }, - ); + ); - await db.a.create({ data: { id: 0 } }); - await expect(db.c.create({ data: { a: { connect: { id: 0 } } } })).toResolveTruthy(); + await db.a.create({ data: { id: 0 } }); + await expect(db.c.create({ data: { a: { connect: { id: 0 } } } })).toResolveTruthy(); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1930.test.ts b/tests/regression/test/v2-migrated/issue-1930.test.ts index 08b64e24..48fd35b7 100644 --- a/tests/regression/test/v2-migrated/issue-1930.test.ts +++ b/tests/regression/test/v2-migrated/issue-1930.test.ts @@ -1,76 +1,78 @@ import { createPolicyTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 1930', async () => { - const db = await createPolicyTestClient( - ` -model Organization { - id String @id @default(cuid()) - entities Entity[] +describe('Regression for issue #1930', () => { + it('verifies issue 1930', async () => { + const db = await createPolicyTestClient( + ` + model Organization { + id String @id @default(cuid()) + entities Entity[] - @@allow('all', true) -} + @@allow('all', true) + } -model Entity { - id String @id @default(cuid()) - org Organization? @relation(fields: [orgId], references: [id]) - orgId String? - contents EntityContent[] - entityType String - isDeleted Boolean @default(false) + model Entity { + id String @id @default(cuid()) + org Organization? @relation(fields: [orgId], references: [id]) + orgId String? + contents EntityContent[] + entityType String + isDeleted Boolean @default(false) - @@delegate(entityType) + @@delegate(entityType) - @@allow('all', !isDeleted) -} + @@allow('all', !isDeleted) + } -model EntityContent { - id String @id @default(cuid()) - entity Entity @relation(fields: [entityId], references: [id]) - entityId String + model EntityContent { + id String @id @default(cuid()) + entity Entity @relation(fields: [entityId], references: [id]) + entityId String - entityContentType String + entityContentType String - @@delegate(entityContentType) + @@delegate(entityContentType) - @@allow('create', true) - @@allow('read', check(entity)) -} + @@allow('create', true) + @@allow('read', check(entity)) + } -model Article extends Entity { -} + model Article extends Entity { + } -model ArticleContent extends EntityContent { - body String? -} + model ArticleContent extends EntityContent { + body String? + } -model OtherContent extends EntityContent { - data Int -} - `, - ); + model OtherContent extends EntityContent { + data Int + } + `, + ); - const org = await db.$unuseAll().organization.create({ data: {} }); - const article = await db.$unuseAll().article.create({ - data: { org: { connect: { id: org.id } } }, - }); + const org = await db.$unuseAll().organization.create({ data: {} }); + const article = await db.$unuseAll().article.create({ + data: { org: { connect: { id: org.id } } }, + }); - // normal create/read - await expect( - db.articleContent.create({ - data: { body: 'abc', entity: { connect: { id: article.id } } }, - }), - ).toResolveTruthy(); - await expect(db.article.findFirst({ include: { contents: true } })).resolves.toMatchObject({ - contents: expect.arrayContaining([expect.objectContaining({ body: 'abc' })]), - }); + // normal create/read + await expect( + db.articleContent.create({ + data: { body: 'abc', entity: { connect: { id: article.id } } }, + }), + ).toResolveTruthy(); + await expect(db.article.findFirst({ include: { contents: true } })).resolves.toMatchObject({ + contents: expect.arrayContaining([expect.objectContaining({ body: 'abc' })]), + }); - // deleted article's contents are not readable - const deletedArticle = await db.$unuseAll().article.create({ - data: { org: { connect: { id: org.id } }, isDeleted: true }, - }); - const content1 = await db.$unuseAll().articleContent.create({ - data: { body: 'bcd', entity: { connect: { id: deletedArticle.id } } }, + // deleted article's contents are not readable + const deletedArticle = await db.$unuseAll().article.create({ + data: { org: { connect: { id: org.id } }, isDeleted: true }, + }); + const content1 = await db.$unuseAll().articleContent.create({ + data: { body: 'bcd', entity: { connect: { id: deletedArticle.id } } }, + }); + await expect(db.articleContent.findUnique({ where: { id: content1.id } })).toResolveNull(); }); - await expect(db.articleContent.findUnique({ where: { id: content1.id } })).toResolveNull(); }); diff --git a/tests/regression/test/v2-migrated/issue-1991.test.ts b/tests/regression/test/v2-migrated/issue-1991.test.ts index dd92a16e..228765a4 100644 --- a/tests/regression/test/v2-migrated/issue-1991.test.ts +++ b/tests/regression/test/v2-migrated/issue-1991.test.ts @@ -1,9 +1,10 @@ import { createPolicyTestClient } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 1991', async () => { - await createPolicyTestClient( - ` +describe('Regression for issue #1991', () => { + it('verifies issue 1991', async () => { + await createPolicyTestClient( + ` type FooMetadata { isLocked Boolean } @@ -22,10 +23,10 @@ model FooOption { meta FooOptionMetadata @json } `, - { - provider: 'postgresql', - extraSourceFiles: { - main: ` + { + provider: 'postgresql', + extraSourceFiles: { + main: ` import { ZenStackClient } from '@zenstackhq/runtime'; import { schema } from './schema'; @@ -35,7 +36,8 @@ model FooOption { data: { meta: { color: 'red' } } }) `, + }, }, - }, - ); + ); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1992.test.ts b/tests/regression/test/v2-migrated/issue-1992.test.ts index 4ca6b7d8..4e77f45e 100644 --- a/tests/regression/test/v2-migrated/issue-1992.test.ts +++ b/tests/regression/test/v2-migrated/issue-1992.test.ts @@ -1,9 +1,10 @@ import { loadSchema } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 1992', async () => { - await loadSchema( - ` +describe('Regression for issue #1992', () => { + it('verifies issue 1992', async () => { + await loadSchema( + ` enum MyAppUserType { Local Google @@ -56,5 +57,6 @@ model MyAppUserFolder { user MyAppUser @relation(fields: [userId], references: [id]) } `, - ); + ); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1994.test.ts b/tests/regression/test/v2-migrated/issue-1994.test.ts index f072bdb3..ff065378 100644 --- a/tests/regression/test/v2-migrated/issue-1994.test.ts +++ b/tests/regression/test/v2-migrated/issue-1994.test.ts @@ -1,102 +1,104 @@ import { createTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 1994', async () => { - const db = await createTestClient( - ` -model OrganizationRole { - id Int @id @default(autoincrement()) - rolePrivileges OrganizationRolePrivilege[] - type String - @@delegate(type) -} +describe('Regression for issue #1994', () => { + it('verifies issue 1994', async () => { + const db = await createTestClient( + ` + model OrganizationRole { + id Int @id @default(autoincrement()) + rolePrivileges OrganizationRolePrivilege[] + type String + @@delegate(type) + } -model Organization { - id Int @id @default(autoincrement()) - customRoles CustomOrganizationRole[] -} + model Organization { + id Int @id @default(autoincrement()) + customRoles CustomOrganizationRole[] + } -// roles common to all orgs, defined once -model SystemDefinedRole extends OrganizationRole { - name String @unique -} + // roles common to all orgs, defined once + model SystemDefinedRole extends OrganizationRole { + name String @unique + } -// roles specific to each org -model CustomOrganizationRole extends OrganizationRole { - name String - organizationId Int - organization Organization @relation(fields: [organizationId], references: [id]) + // roles specific to each org + model CustomOrganizationRole extends OrganizationRole { + name String + organizationId Int + organization Organization @relation(fields: [organizationId], references: [id]) - @@unique([organizationId, name]) - @@index([organizationId]) -} + @@unique([organizationId, name]) + @@index([organizationId]) + } -model OrganizationRolePrivilege { - organizationRoleId Int - privilegeId Int + model OrganizationRolePrivilege { + organizationRoleId Int + privilegeId Int - organizationRole OrganizationRole @relation(fields: [organizationRoleId], references: [id]) - privilege Privilege @relation(fields: [privilegeId], references: [id]) + organizationRole OrganizationRole @relation(fields: [organizationRoleId], references: [id]) + privilege Privilege @relation(fields: [privilegeId], references: [id]) - @@id([organizationRoleId, privilegeId]) -} + @@id([organizationRoleId, privilegeId]) + } -model Privilege { - id Int @id @default(autoincrement()) - name String // e.g. "org:manage" + model Privilege { + id Int @id @default(autoincrement()) + name String // e.g. "org:manage" - orgRolePrivileges OrganizationRolePrivilege[] - @@unique([name]) -} - `, - { - extraSourceFiles: { - main: ` - import { ZenStackClient } from '@zenstackhq/runtime'; - import { schema } from './schema'; + orgRolePrivileges OrganizationRolePrivilege[] + @@unique([name]) + } + `, + { + extraSourceFiles: { + main: ` + import { ZenStackClient } from '@zenstackhq/runtime'; + import { schema } from './schema'; - const db = new ZenStackClient(schema, {} as any); + const db = new ZenStackClient(schema, {} as any); - async function main() { - const privilege = await db.privilege.create({ - data: { name: 'org:manage' }, - }); + async function main() { + const privilege = await db.privilege.create({ + data: { name: 'org:manage' }, + }); - await db.systemDefinedRole.create({ - data: { - name: 'Admin', - rolePrivileges: { - create: [ - { - privilegeId: privilege.id, - }, - ], + await db.systemDefinedRole.create({ + data: { + name: 'Admin', + rolePrivileges: { + create: [ + { + privilegeId: privilege.id, + }, + ], + }, }, - }, - }); - } - main() - `, + }); + } + main() + `, + }, }, - }, - ); + ); - const privilege = await db.privilege.create({ - data: { name: 'org:manage' }, - }); + const privilege = await db.privilege.create({ + data: { name: 'org:manage' }, + }); - await expect( - db.systemDefinedRole.create({ - data: { - name: 'Admin', - rolePrivileges: { - create: [ - { - privilegeId: privilege.id, - }, - ], + await expect( + db.systemDefinedRole.create({ + data: { + name: 'Admin', + rolePrivileges: { + create: [ + { + privilegeId: privilege.id, + }, + ], + }, }, - }, - }), - ).toResolveTruthy(); + }), + ).toResolveTruthy(); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-1997.test.ts b/tests/regression/test/v2-migrated/issue-1997.test.ts index 591694bd..dc742db7 100644 --- a/tests/regression/test/v2-migrated/issue-1997.test.ts +++ b/tests/regression/test/v2-migrated/issue-1997.test.ts @@ -1,129 +1,131 @@ import { createPolicyTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 1997', async () => { - const db = await createPolicyTestClient( - ` - model Tenant { - id String @id @default(uuid()) +describe('Regression for issue #1997', () => { + it('verifies issue 1997', async () => { + const db = await createPolicyTestClient( + ` + model Tenant { + id String @id @default(uuid()) - users User[] - posts Post[] - comments Comment[] - postUserLikes PostUserLikes[] - } + users User[] + posts Post[] + comments Comment[] + postUserLikes PostUserLikes[] + } - model User { - id String @id @default(uuid()) - tenantId String @default(auth().tenantId) - tenant Tenant @relation(fields: [tenantId], references: [id]) - posts Post[] - likes PostUserLikes[] + model User { + id String @id @default(uuid()) + tenantId String @default(auth().tenantId) + tenant Tenant @relation(fields: [tenantId], references: [id]) + posts Post[] + likes PostUserLikes[] - @@allow('all', true) - } + @@allow('all', true) + } - model Post { - tenantId String @default(auth().tenantId) - tenant Tenant @relation(fields: [tenantId], references: [id]) - id String @default(uuid()) - author User @relation(fields: [authorId], references: [id]) - authorId String @default(auth().id) + model Post { + tenantId String @default(auth().tenantId) + tenant Tenant @relation(fields: [tenantId], references: [id]) + id String @default(uuid()) + author User @relation(fields: [authorId], references: [id]) + authorId String @default(auth().id) - comments Comment[] - likes PostUserLikes[] + comments Comment[] + likes PostUserLikes[] - @@id([tenantId, id]) + @@id([tenantId, id]) - @@allow('all', true) - } + @@allow('all', true) + } - model PostUserLikes { - tenantId String @default(auth().tenantId) - tenant Tenant @relation(fields: [tenantId], references: [id]) - id String @default(uuid()) + model PostUserLikes { + tenantId String @default(auth().tenantId) + tenant Tenant @relation(fields: [tenantId], references: [id]) + id String @default(uuid()) - userId String - user User @relation(fields: [userId], references: [id]) + userId String + user User @relation(fields: [userId], references: [id]) - postId String - post Post @relation(fields: [tenantId, postId], references: [tenantId, id]) + postId String + post Post @relation(fields: [tenantId, postId], references: [tenantId, id]) - @@id([tenantId, id]) - @@unique([tenantId, userId, postId]) + @@id([tenantId, id]) + @@unique([tenantId, userId, postId]) - @@allow('all', true) - } + @@allow('all', true) + } - model Comment { - tenantId String @default(auth().tenantId) - tenant Tenant @relation(fields: [tenantId], references: [id]) - id String @default(uuid()) - postId String - post Post @relation(fields: [tenantId, postId], references: [tenantId, id]) + model Comment { + tenantId String @default(auth().tenantId) + tenant Tenant @relation(fields: [tenantId], references: [id]) + id String @default(uuid()) + postId String + post Post @relation(fields: [tenantId, postId], references: [tenantId, id]) - @@id([tenantId, id]) + @@id([tenantId, id]) - @@allow('all', true) - } - `, - ); + @@allow('all', true) + } + `, + ); - const tenant = await db.$unuseAll().tenant.create({ - data: {}, - }); - const user = await db.$unuseAll().user.create({ - data: { tenantId: tenant.id }, - }); + const tenant = await db.$unuseAll().tenant.create({ + data: {}, + }); + const user = await db.$unuseAll().user.create({ + data: { tenantId: tenant.id }, + }); - const authDb = db.$setAuth({ id: user.id, tenantId: tenant.id }); + const authDb = db.$setAuth({ id: user.id, tenantId: tenant.id }); - await expect( - authDb.post.create({ - data: { - likes: { - createMany: { - data: [ - { - userId: user.id, - }, - ], + await expect( + authDb.post.create({ + data: { + likes: { + createMany: { + data: [ + { + userId: user.id, + }, + ], + }, }, }, - }, - include: { - likes: true, - }, - }), - ).resolves.toMatchObject({ - authorId: user.id, - likes: [ - { - tenantId: tenant.id, - userId: user.id, - }, - ], - }); + include: { + likes: true, + }, + }), + ).resolves.toMatchObject({ + authorId: user.id, + likes: [ + { + tenantId: tenant.id, + userId: user.id, + }, + ], + }); - await expect( - authDb.post.create({ - data: { - comments: { - createMany: { - data: [{}], + await expect( + authDb.post.create({ + data: { + comments: { + createMany: { + data: [{}], + }, }, }, - }, - include: { - comments: true, - }, - }), - ).resolves.toMatchObject({ - authorId: user.id, - comments: [ - { - tenantId: tenant.id, - }, - ], + include: { + comments: true, + }, + }), + ).resolves.toMatchObject({ + authorId: user.id, + comments: [ + { + tenantId: tenant.id, + }, + ], + }); }); }); diff --git a/tests/regression/test/v2-migrated/issue-1998.test.ts b/tests/regression/test/v2-migrated/issue-1998.test.ts index 038278b0..ca57d280 100644 --- a/tests/regression/test/v2-migrated/issue-1998.test.ts +++ b/tests/regression/test/v2-migrated/issue-1998.test.ts @@ -1,56 +1,58 @@ import { createPolicyTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; - -it('verifies issue 1998', async () => { - const db = await createPolicyTestClient( - ` -model Entity { - id String @id - type String - updatable Boolean - children Relation[] @relation("children") - parents Relation[] @relation("parents") - - @@delegate(type) - @@allow('create,read', true) - @@allow('update', updatable) -} - -model A extends Entity {} - -model B extends Entity {} - -model Relation { - parent Entity @relation("children", fields: [parentId], references: [id]) - parentId String - child Entity @relation("parents", fields: [childId], references: [id]) - childId String - - @@allow('create', true) - @@allow('read', check(parent, 'read') && check(child, 'read')) - @@allow('delete', check(parent, 'update') && check(child, 'update')) - - @@id([parentId, childId]) -} - `, - ); - - await db.a.create({ data: { id: '1', updatable: true } }); - await db.b.create({ data: { id: '2', updatable: true } }); - await db.relation.create({ data: { parentId: '1', childId: '2' } }); - - await expect( - db.relation.deleteMany({ - where: { parentId: '1', childId: '2' }, - }), - ).resolves.toEqual({ count: 1 }); - - await db.a.create({ data: { id: '3', updatable: false } }); - await db.b.create({ data: { id: '4', updatable: false } }); - await db.relation.create({ data: { parentId: '3', childId: '4' } }); - await expect( - db.relation.deleteMany({ - where: { parentId: '3', childId: '4' }, - }), - ).resolves.toEqual({ count: 0 }); +import { describe, expect, it } from 'vitest'; + +describe('Regression for issue #1998', () => { + it('verifies issue 1998', async () => { + const db = await createPolicyTestClient( + ` + model Entity { + id String @id + type String + updatable Boolean + children Relation[] @relation("children") + parents Relation[] @relation("parents") + + @@delegate(type) + @@allow('create,read', true) + @@allow('update', updatable) + } + + model A extends Entity {} + + model B extends Entity {} + + model Relation { + parent Entity @relation("children", fields: [parentId], references: [id]) + parentId String + child Entity @relation("parents", fields: [childId], references: [id]) + childId String + + @@allow('create', true) + @@allow('read', check(parent, 'read') && check(child, 'read')) + @@allow('delete', check(parent, 'update') && check(child, 'update')) + + @@id([parentId, childId]) + } + `, + ); + + await db.a.create({ data: { id: '1', updatable: true } }); + await db.b.create({ data: { id: '2', updatable: true } }); + await db.relation.create({ data: { parentId: '1', childId: '2' } }); + + await expect( + db.relation.deleteMany({ + where: { parentId: '1', childId: '2' }, + }), + ).resolves.toEqual({ count: 1 }); + + await db.a.create({ data: { id: '3', updatable: false } }); + await db.b.create({ data: { id: '4', updatable: false } }); + await db.relation.create({ data: { parentId: '3', childId: '4' } }); + await expect( + db.relation.deleteMany({ + where: { parentId: '3', childId: '4' }, + }), + ).resolves.toEqual({ count: 0 }); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-2019.test.ts b/tests/regression/test/v2-migrated/issue-2019.test.ts index d25ab518..1c6c4c6e 100644 --- a/tests/regression/test/v2-migrated/issue-2019.test.ts +++ b/tests/regression/test/v2-migrated/issue-2019.test.ts @@ -1,85 +1,87 @@ import { createPolicyTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; - -it('verifies issue 2019', async () => { - const db = await createPolicyTestClient( - ` -model Tenant { - id String @id @default(uuid()) - - users User[] - content Content[] -} - -model User { - id String @id @default(uuid()) - tenantId String @default(auth().tenantId) - tenant Tenant @relation(fields: [tenantId], references: [id]) - posts Post[] - likes PostUserLikes[] - - @@allow('all', true) -} - -model Content { - tenantId String @default(auth().tenantId) - tenant Tenant @relation(fields: [tenantId], references: [id]) - id String @id @default(uuid()) - contentType String - - @@delegate(contentType) - @@allow('all', true) -} - -model Post extends Content { - author User @relation(fields: [authorId], references: [id]) - authorId String @default(auth().id) - - comments Comment[] - likes PostUserLikes[] - - @@allow('all', true) -} - -model PostUserLikes extends Content { - userId String - user User @relation(fields: [userId], references: [id]) - - postId String - post Post @relation(fields: [postId], references: [id]) - - @@unique([userId, postId]) - - @@allow('all', true) -} - -model Comment extends Content { - postId String - post Post @relation(fields: [postId], references: [id]) - - @@allow('all', true) -} - `, - ); - - const tenant = await db.$unuseAll().tenant.create({ data: {} }); - const user = await db.$unuseAll().user.create({ data: { tenantId: tenant.id } }); - const authDb = db.$setAuth({ id: user.id, tenantId: tenant.id }); - const result = await authDb.post.create({ - data: { - likes: { - createMany: { - data: [ - { - userId: user.id, - }, - ], +import { describe, expect, it } from 'vitest'; + +describe('Regression for issue #2019', () => { + it('verifies issue 2019', async () => { + const db = await createPolicyTestClient( + ` + model Tenant { + id String @id @default(uuid()) + + users User[] + content Content[] + } + + model User { + id String @id @default(uuid()) + tenantId String @default(auth().tenantId) + tenant Tenant @relation(fields: [tenantId], references: [id]) + posts Post[] + likes PostUserLikes[] + + @@allow('all', true) + } + + model Content { + tenantId String @default(auth().tenantId) + tenant Tenant @relation(fields: [tenantId], references: [id]) + id String @id @default(uuid()) + contentType String + + @@delegate(contentType) + @@allow('all', true) + } + + model Post extends Content { + author User @relation(fields: [authorId], references: [id]) + authorId String @default(auth().id) + + comments Comment[] + likes PostUserLikes[] + + @@allow('all', true) + } + + model PostUserLikes extends Content { + userId String + user User @relation(fields: [userId], references: [id]) + + postId String + post Post @relation(fields: [postId], references: [id]) + + @@unique([userId, postId]) + + @@allow('all', true) + } + + model Comment extends Content { + postId String + post Post @relation(fields: [postId], references: [id]) + + @@allow('all', true) + } + `, + ); + + const tenant = await db.$unuseAll().tenant.create({ data: {} }); + const user = await db.$unuseAll().user.create({ data: { tenantId: tenant.id } }); + const authDb = db.$setAuth({ id: user.id, tenantId: tenant.id }); + const result = await authDb.post.create({ + data: { + likes: { + createMany: { + data: [ + { + userId: user.id, + }, + ], + }, }, }, - }, - include: { - likes: true, - }, + include: { + likes: true, + }, + }); + expect(result.likes[0].tenantId).toBe(tenant.id); }); - expect(result.likes[0].tenantId).toBe(tenant.id); }); diff --git a/tests/regression/test/v2-migrated/issue-2025.test.ts b/tests/regression/test/v2-migrated/issue-2025.test.ts index 42da8fc4..e5a8f2de 100644 --- a/tests/regression/test/v2-migrated/issue-2025.test.ts +++ b/tests/regression/test/v2-migrated/issue-2025.test.ts @@ -1,38 +1,40 @@ import { createTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 2025', async () => { - const db = await createTestClient( - ` - model User { - id String @id @default(cuid()) - email String @unique @email - termsAndConditions Int? - @@allow('all', true) - } - `, - ); +describe('Regression for issue #2025', () => { + it('verifies issue 2025', async () => { + const db = await createTestClient( + ` + model User { + id String @id @default(cuid()) + email String @unique @email + termsAndConditions Int? + @@allow('all', true) + } + `, + ); - await expect( - db.user.create({ + await expect( + db.user.create({ + data: { + email: 'xyz', + }, + }), + ).toBeRejectedByValidation(); + + const user = await db.$setInputValidation(false).user.create({ data: { email: 'xyz', }, - }), - ).toBeRejectedByValidation(); + }); - const user = await db.$setInputValidation(false).user.create({ - data: { - email: 'xyz', - }, + await expect( + db.user.update({ + where: { id: user.id }, + data: { + termsAndConditions: 1, + }, + }), + ).toResolveTruthy(); }); - - await expect( - db.user.update({ - where: { id: user.id }, - data: { - termsAndConditions: 1, - }, - }), - ).toResolveTruthy(); }); diff --git a/tests/regression/test/v2-migrated/issue-2028.test.ts b/tests/regression/test/v2-migrated/issue-2028.test.ts index cff51a9f..192c40e5 100644 --- a/tests/regression/test/v2-migrated/issue-2028.test.ts +++ b/tests/regression/test/v2-migrated/issue-2028.test.ts @@ -1,90 +1,92 @@ import { createTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 2028', async () => { - const db = await createTestClient( - ` -enum FooType { - Bar - Baz -} +describe('Regression for issue #2028', () => { + it('verifies issue 2028', async () => { + const db = await createTestClient( + ` + enum FooType { + Bar + Baz + } -model User { - id String @id @default(cuid()) - userFolders UserFolder[] - @@allow('all', true) -} + model User { + id String @id @default(cuid()) + userFolders UserFolder[] + @@allow('all', true) + } -model Foo { - id String @id @default(cuid()) - type FooType + model Foo { + id String @id @default(cuid()) + type FooType - userFolders UserFolder[] + userFolders UserFolder[] - @@delegate(type) - @@allow('all', true) -} + @@delegate(type) + @@allow('all', true) + } -model Bar extends Foo { - name String -} + model Bar extends Foo { + name String + } -model Baz extends Foo { - age Int -} + model Baz extends Foo { + age Int + } -model UserFolder { - id String @id @default(cuid()) - userId String - fooId String + model UserFolder { + id String @id @default(cuid()) + userId String + fooId String - user User @relation(fields: [userId], references: [id]) - foo Foo @relation(fields: [fooId], references: [id]) + user User @relation(fields: [userId], references: [id]) + foo Foo @relation(fields: [fooId], references: [id]) - @@unique([userId, fooId]) - @@allow('all', true) -} - `, - ); + @@unique([userId, fooId]) + @@allow('all', true) + } + `, + ); - // Ensure we can query by the CompoundUniqueInput - const user = await db.user.create({ data: {} }); - const bar = await db.bar.create({ data: { name: 'bar' } }); - const baz = await db.baz.create({ data: { age: 1 } }); + // Ensure we can query by the CompoundUniqueInput + const user = await db.user.create({ data: {} }); + const bar = await db.bar.create({ data: { name: 'bar' } }); + const baz = await db.baz.create({ data: { age: 1 } }); - const userFolderA = await db.userFolder.create({ - data: { - userId: user.id, - fooId: bar.id, - }, - }); + const userFolderA = await db.userFolder.create({ + data: { + userId: user.id, + fooId: bar.id, + }, + }); - const userFolderB = await db.userFolder.create({ - data: { - userId: user.id, - fooId: baz.id, - }, - }); + const userFolderB = await db.userFolder.create({ + data: { + userId: user.id, + fooId: baz.id, + }, + }); - await expect( - db.userFolder.findUnique({ - where: { - userId_fooId: { - userId: user.id, - fooId: bar.id, + await expect( + db.userFolder.findUnique({ + where: { + userId_fooId: { + userId: user.id, + fooId: bar.id, + }, }, - }, - }), - ).resolves.toMatchObject(userFolderA); + }), + ).resolves.toMatchObject(userFolderA); - await expect( - db.userFolder.findUnique({ - where: { - userId_fooId: { - userId: user.id, - fooId: baz.id, + await expect( + db.userFolder.findUnique({ + where: { + userId_fooId: { + userId: user.id, + fooId: baz.id, + }, }, - }, - }), - ).resolves.toMatchObject(userFolderB); + }), + ).resolves.toMatchObject(userFolderB); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-2038.test.ts b/tests/regression/test/v2-migrated/issue-2038.test.ts index 61fb429a..4220010e 100644 --- a/tests/regression/test/v2-migrated/issue-2038.test.ts +++ b/tests/regression/test/v2-migrated/issue-2038.test.ts @@ -1,25 +1,27 @@ import { createTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 2038', async () => { - const db = await createTestClient( - ` -model User { - id Int @id @default(autoincrement()) - flag Boolean - @@allow('all', true) -} +describe('Regression for issue #2038', () => { + it('verifies issue 2038', async () => { + const db = await createTestClient( + ` + model User { + id Int @id @default(autoincrement()) + flag Boolean + @@allow('all', true) + } -model Post { - id Int @id @default(autoincrement()) - published Boolean @default(auth().flag) - @@allow('all', true) -} - `, - ); + model Post { + id Int @id @default(autoincrement()) + published Boolean @default(auth().flag) + @@allow('all', true) + } + `, + ); - const authDb = db.$setAuth({ id: 1, flag: true }); - await expect(authDb.post.create({ data: {} })).resolves.toMatchObject({ - published: true, + const authDb = db.$setAuth({ id: 1, flag: true }); + await expect(authDb.post.create({ data: {} })).resolves.toMatchObject({ + published: true, + }); }); }); diff --git a/tests/regression/test/v2-migrated/issue-2039.test.ts b/tests/regression/test/v2-migrated/issue-2039.test.ts index ba62278d..973896d6 100644 --- a/tests/regression/test/v2-migrated/issue-2039.test.ts +++ b/tests/regression/test/v2-migrated/issue-2039.test.ts @@ -1,27 +1,29 @@ import { createTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 2039', async () => { - const db = await createTestClient( - ` -type Foo { - a String -} +describe('Regression for issue #2039', () => { + it('verifies issue 2039', async () => { + const db = await createTestClient( + ` + type Foo { + a String + } -model Bar { - id String @id @default(cuid()) - foo Foo @json @default("{ \\"a\\": \\"a\\" }") - fooList Foo[] @json @default("[{ \\"a\\": \\"b\\" }]") - @@allow('all', true) -} - `, - { provider: 'postgresql' }, - ); + model Bar { + id String @id @default(cuid()) + foo Foo @json @default("{ \\"a\\": \\"a\\" }") + fooList Foo[] @json @default("[{ \\"a\\": \\"b\\" }]") + @@allow('all', true) + } + `, + { provider: 'postgresql' }, + ); - // Ensure default values are correctly set - await expect(db.bar.create({ data: {} })).resolves.toMatchObject({ - id: expect.any(String), - foo: { a: 'a' }, - fooList: [{ a: 'b' }], + // Ensure default values are correctly set + await expect(db.bar.create({ data: {} })).resolves.toMatchObject({ + id: expect.any(String), + foo: { a: 'a' }, + fooList: [{ a: 'b' }], + }); }); }); diff --git a/tests/regression/test/v2-migrated/issue-2106.test.ts b/tests/regression/test/v2-migrated/issue-2106.test.ts index af9afe96..92501841 100644 --- a/tests/regression/test/v2-migrated/issue-2106.test.ts +++ b/tests/regression/test/v2-migrated/issue-2106.test.ts @@ -1,16 +1,18 @@ import { createTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 2106', async () => { - const db = await createTestClient( - ` -model User { - id Int @id - age BigInt - @@allow('all', true) -} - `, - ); +describe('Regression for issue #2106', () => { + it('verifies issue 2106', async () => { + const db = await createTestClient( + ` + model User { + id Int @id + age BigInt + @@allow('all', true) + } + `, + ); - await expect(db.user.create({ data: { id: 1, age: 1n } })).toResolveTruthy(); + await expect(db.user.create({ data: { id: 1, age: 1n } })).toResolveTruthy(); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-2246.test.ts b/tests/regression/test/v2-migrated/issue-2246.test.ts index d6ff576c..3a4aabdb 100644 --- a/tests/regression/test/v2-migrated/issue-2246.test.ts +++ b/tests/regression/test/v2-migrated/issue-2246.test.ts @@ -1,79 +1,81 @@ import { createTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 2246', async () => { - const db = await createTestClient( - ` -model Media { - id Int @id @default(autoincrement()) - title String - mediaType String +describe('Regression for issue #2246', () => { + it('verifies issue 2246', async () => { + const db = await createTestClient( + ` + model Media { + id Int @id @default(autoincrement()) + title String + mediaType String - @@delegate(mediaType) - @@allow('all', true) -} + @@delegate(mediaType) + @@allow('all', true) + } -model Movie extends Media { - director Director @relation(fields: [directorId], references: [id]) - directorId Int - duration Int - rating String -} + model Movie extends Media { + director Director @relation(fields: [directorId], references: [id]) + directorId Int + duration Int + rating String + } -model Director { - id Int @id @default(autoincrement()) - name String - email String - movies Movie[] + model Director { + id Int @id @default(autoincrement()) + name String + email String + movies Movie[] - @@allow('all', true) -} - `, - ); + @@allow('all', true) + } + `, + ); - await db.director.create({ - data: { - name: 'Christopher Nolan', - email: 'christopher.nolan@example.com', - movies: { - create: { - title: 'Inception', - duration: 148, - rating: 'PG-13', + await db.director.create({ + data: { + name: 'Christopher Nolan', + email: 'christopher.nolan@example.com', + movies: { + create: { + title: 'Inception', + duration: 148, + rating: 'PG-13', + }, }, }, - }, - }); + }); - await expect( - db.director.findMany({ - include: { - movies: { - where: { title: 'Inception' }, + await expect( + db.director.findMany({ + include: { + movies: { + where: { title: 'Inception' }, + }, }, - }, - }), - ).resolves.toHaveLength(1); + }), + ).resolves.toHaveLength(1); - await expect( - db.director.findFirst({ - include: { - _count: { select: { movies: { where: { title: 'Inception' } } } }, - }, - }), - ).resolves.toMatchObject({ _count: { movies: 1 } }); + await expect( + db.director.findFirst({ + include: { + _count: { select: { movies: { where: { title: 'Inception' } } } }, + }, + }), + ).resolves.toMatchObject({ _count: { movies: 1 } }); - await expect( - db.movie.findMany({ - where: { title: 'Interstellar' }, - }), - ).resolves.toHaveLength(0); + await expect( + db.movie.findMany({ + where: { title: 'Interstellar' }, + }), + ).resolves.toHaveLength(0); - await expect( - db.director.findFirst({ - include: { - _count: { select: { movies: { where: { title: 'Interstellar' } } } }, - }, - }), - ).resolves.toMatchObject({ _count: { movies: 0 } }); + await expect( + db.director.findFirst({ + include: { + _count: { select: { movies: { where: { title: 'Interstellar' } } } }, + }, + }), + ).resolves.toMatchObject({ _count: { movies: 0 } }); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-2247.test.ts b/tests/regression/test/v2-migrated/issue-2247.test.ts index 6caf02a4..8f1104c1 100644 --- a/tests/regression/test/v2-migrated/issue-2247.test.ts +++ b/tests/regression/test/v2-migrated/issue-2247.test.ts @@ -1,61 +1,63 @@ import { createTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; - -it('verifies issue 2247', async () => { - const db = await createTestClient( - ` -model User { - id String @id @default(cuid()) - employerId String? -} - -model Member { - id String @id @default(cuid()) - placeId String - place Place @relation(fields: [placeId], references: [id]) -} - -model Place { - id String @id @default(cuid()) - name String - placeType String @map("owner_type") - members Member[] - - @@delegate(placeType) - @@unique([name, placeType]) -} - -model Country extends Place { - regions Region[] - things Thing[] -} - -model Region extends Place { - countryId String - country Country @relation(fields: [countryId], references: [id]) - cities City[] -} - -model City extends Place { - regionId String - region Region @relation(fields: [regionId], references: [id]) -} - - -model Thing { - id String @id @default(cuid()) - countryId String - country Country @relation(fields: [countryId], references: [id]) - - @@allow('read', - country.members?[id == auth().employerId] - || country.regions?[members?[id == auth().employerId]] - || country.regions?[cities?[members?[id == auth().employerId]]] - ) -} - `, - ); - - const authDb = db.$setAuth({ id: '1', employerId: '1' }); - await expect(authDb.thing.findMany()).toResolveTruthy(); +import { describe, expect, it } from 'vitest'; + +describe('Regression for issue #2247', () => { + it('verifies issue 2247', async () => { + const db = await createTestClient( + ` + model User { + id String @id @default(cuid()) + employerId String? + } + + model Member { + id String @id @default(cuid()) + placeId String + place Place @relation(fields: [placeId], references: [id]) + } + + model Place { + id String @id @default(cuid()) + name String + placeType String @map("owner_type") + members Member[] + + @@delegate(placeType) + @@unique([name, placeType]) + } + + model Country extends Place { + regions Region[] + things Thing[] + } + + model Region extends Place { + countryId String + country Country @relation(fields: [countryId], references: [id]) + cities City[] + } + + model City extends Place { + regionId String + region Region @relation(fields: [regionId], references: [id]) + } + + + model Thing { + id String @id @default(cuid()) + countryId String + country Country @relation(fields: [countryId], references: [id]) + + @@allow('read', + country.members?[id == auth().employerId] + || country.regions?[members?[id == auth().employerId]] + || country.regions?[cities?[members?[id == auth().employerId]]] + ) + } + `, + ); + + const authDb = db.$setAuth({ id: '1', employerId: '1' }); + await expect(authDb.thing.findMany()).toResolveTruthy(); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-389.test.ts b/tests/regression/test/v2-migrated/issue-389.test.ts index 20777b2e..c1ba5bbe 100644 --- a/tests/regression/test/v2-migrated/issue-389.test.ts +++ b/tests/regression/test/v2-migrated/issue-389.test.ts @@ -1,15 +1,17 @@ -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; import { createPolicyTestClient } from '@zenstackhq/testtools'; -it('verifies issue 389', async () => { - const db = await createPolicyTestClient(` - model model { - id String @id @default(uuid()) - value Int - @@allow('read', true) - @@allow('create', value > 0) - } - `); - await expect(db.model.create({ data: { value: 0 } })).toBeRejectedByPolicy(); - await expect(db.model.create({ data: { value: 1 } })).toResolveTruthy(); +describe('Regression for issue #389', () => { + it('verifies issue 389', async () => { + const db = await createPolicyTestClient(` + model model { + id String @id @default(uuid()) + value Int + @@allow('read', true) + @@allow('create', value > 0) + } + `); + await expect(db.model.create({ data: { value: 0 } })).toBeRejectedByPolicy(); + await expect(db.model.create({ data: { value: 1 } })).toResolveTruthy(); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-392.test.ts b/tests/regression/test/v2-migrated/issue-392.test.ts index bf8acfb4..857f4790 100644 --- a/tests/regression/test/v2-migrated/issue-392.test.ts +++ b/tests/regression/test/v2-migrated/issue-392.test.ts @@ -1,63 +1,65 @@ import { loadDocument } from '@zenstackhq/language'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 392', async () => { - await loadDocument( - ` +describe('Regression for issue #392', () => { + it('verifies issue 392', async () => { + await loadDocument( + ` model M1 { m2_id String @id m2 M2 @relation(fields: [m2_id], references: [id]) } - + model M2 { - id String @id + id String @id m1 M1? } `, - ); + ); - await loadDocument( - ` + await loadDocument( + ` model M1 { id String @id m2_id String @unique m2 M2 @relation(fields: [m2_id], references: [id]) } - + model M2 { - id String @id + id String @id m1 M1? } `, - ); + ); - await loadDocument( - ` + await loadDocument( + ` model M1 { m2_id String m2 M2 @relation(fields: [m2_id], references: [id]) @@id([m2_id]) } - + model M2 { - id String @id + id String @id m1 M1? } `, - ); + ); - await loadDocument( - ` + await loadDocument( + ` model M1 { m2_id String m2 M2 @relation(fields: [m2_id], references: [id]) @@unique([m2_id]) } - + model M2 { - id String @id + id String @id m1 M1? } `, - ); + ); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-416.test.ts b/tests/regression/test/v2-migrated/issue-416.test.ts index 75776394..827ebec8 100644 --- a/tests/regression/test/v2-migrated/issue-416.test.ts +++ b/tests/regression/test/v2-migrated/issue-416.test.ts @@ -1,9 +1,10 @@ import { loadSchema } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 416', async () => { - await loadSchema( - ` +describe('Regression for issue #416', () => { + it('verifies issue 416', async () => { + await loadSchema( + ` datasource db { provider = "postgresql" url = env("DATABASE_URL") @@ -16,5 +17,6 @@ model Example { json Json @default("{\\"theme\\": \\"light\\", \\"consoleDrawer\\": false}") } `, - ); + ); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-509.test.ts b/tests/regression/test/v2-migrated/issue-509.test.ts index ceefb2f5..a3691c05 100644 --- a/tests/regression/test/v2-migrated/issue-509.test.ts +++ b/tests/regression/test/v2-migrated/issue-509.test.ts @@ -1,16 +1,17 @@ import { loadDocument } from '@zenstackhq/language'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 509', async () => { - await loadDocument( - ` +describe('Regression for issue #509', () => { + it('verifies issue 509', async () => { + await loadDocument( + ` model User { id Int @id @default(autoincrement()) email String @unique name String? posts Post[] } - + model Post { id Int @id @default(autoincrement()) title String @@ -18,12 +19,13 @@ it('verifies issue 509', async () => { published Boolean @default(false) author User? @relation(fields: [authorId], references: [id]) authorId Int? - + deleted Boolean @default(false) @omit - + @@allow('all', true) @@deny('read', deleted) } `, - ); + ); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-609.test.ts b/tests/regression/test/v2-migrated/issue-609.test.ts index b25314c6..7eca4b1a 100644 --- a/tests/regression/test/v2-migrated/issue-609.test.ts +++ b/tests/regression/test/v2-migrated/issue-609.test.ts @@ -1,59 +1,61 @@ import { createPolicyTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 609', async () => { - const db = await createPolicyTestClient( - ` -model User { - id String @id @default(cuid()) - comments Comment[] -} +describe('Regression for issue #609', () => { + it('verifies issue 609', async () => { + const db = await createPolicyTestClient( + ` + model User { + id String @id @default(cuid()) + comments Comment[] + } -model Comment { - id String @id @default(cuid()) - parentCommentId String? - replies Comment[] @relation("CommentToComment") - parent Comment? @relation("CommentToComment", fields: [parentCommentId], references: [id]) - comment String - author User @relation(fields: [authorId], references: [id]) - authorId String + model Comment { + id String @id @default(cuid()) + parentCommentId String? + replies Comment[] @relation("CommentToComment") + parent Comment? @relation("CommentToComment", fields: [parentCommentId], references: [id]) + comment String + author User @relation(fields: [authorId], references: [id]) + authorId String - @@allow('read,create', true) - @@allow('update,delete', auth() == author) -} - `, - { usePrismaPush: true }, - ); + @@allow('read,create', true) + @@allow('update,delete', auth() == author) + } + `, + { usePrismaPush: true }, + ); - const rawDb = db.$unuseAll(); + const rawDb = db.$unuseAll(); - await rawDb.user.create({ - data: { - id: '1', - comments: { - create: { - id: '1', - comment: 'Comment 1', + await rawDb.user.create({ + data: { + id: '1', + comments: { + create: { + id: '1', + comment: 'Comment 1', + }, }, }, - }, - }); - - await rawDb.user.create({ - data: { - id: '2', - }, - }); + }); - // connecting a child comment from a different user to a parent comment should succeed - const dbAuth = db.$setAuth({ id: '2' }); - await expect( - dbAuth.comment.create({ + await rawDb.user.create({ data: { - comment: 'Comment 2', - author: { connect: { id: '2' } }, - parent: { connect: { id: '1' } }, + id: '2', }, - }), - ).toResolveTruthy(); + }); + + // connecting a child comment from a different user to a parent comment should succeed + const dbAuth = db.$setAuth({ id: '2' }); + await expect( + dbAuth.comment.create({ + data: { + comment: 'Comment 2', + author: { connect: { id: '2' } }, + parent: { connect: { id: '1' } }, + }, + }), + ).toResolveTruthy(); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-632.test.ts b/tests/regression/test/v2-migrated/issue-632.test.ts index 99d251d2..53a9817c 100644 --- a/tests/regression/test/v2-migrated/issue-632.test.ts +++ b/tests/regression/test/v2-migrated/issue-632.test.ts @@ -1,9 +1,10 @@ import { createTestClient } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 632', async () => { - await createTestClient( - ` +describe('Regression for issue #632', () => { + it('verifies issue 632', async () => { + await createTestClient( + ` enum InventoryUnit { DIGITAL FL_OZ @@ -13,13 +14,14 @@ enum InventoryUnit { UNIT UNLIMITED } - + model TwoEnumsOneModelTest { id String @id @default(cuid()) inventoryUnit InventoryUnit @default(UNIT) inputUnit InventoryUnit @default(UNIT) } `, - { provider: 'postgresql', usePrismaPush: true }, - ); + { provider: 'postgresql', usePrismaPush: true }, + ); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-646.test.ts b/tests/regression/test/v2-migrated/issue-646.test.ts index 12daf25b..e2811b13 100644 --- a/tests/regression/test/v2-migrated/issue-646.test.ts +++ b/tests/regression/test/v2-migrated/issue-646.test.ts @@ -1,11 +1,13 @@ import { loadSchema } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 646', async () => { - await loadSchema(` +describe('Regression for issue #646', () => { + it('verifies issue 646', async () => { + await loadSchema(` model Example { id Int @id epsilon Decimal @default(0.00000001) } `); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-674.test.ts b/tests/regression/test/v2-migrated/issue-674.test.ts index 03ef6cec..9c2a707f 100644 --- a/tests/regression/test/v2-migrated/issue-674.test.ts +++ b/tests/regression/test/v2-migrated/issue-674.test.ts @@ -1,14 +1,16 @@ import { loadSchema } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 674', async () => { - await loadSchema( - ` +describe('Regression for issue #674', () => { + it('verifies issue 674', async () => { + await loadSchema( + ` model Foo { id Int @id } enum MyUnUsedEnum { ABC CDE @@map('my_unused_enum') } `, - ); + ); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-689.test.ts b/tests/regression/test/v2-migrated/issue-689.test.ts index d62922ec..7d0c09bb 100644 --- a/tests/regression/test/v2-migrated/issue-689.test.ts +++ b/tests/regression/test/v2-migrated/issue-689.test.ts @@ -1,71 +1,73 @@ import { createPolicyTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 689', async () => { - const db = await createPolicyTestClient( - ` - model UserRole { - id Int @id @default(autoincrement()) - user User @relation(fields: [userId], references: [id]) - userId Int - role String +describe('Regression for issue #689', () => { + it('verifies issue 689', async () => { + const db = await createPolicyTestClient( + ` + model UserRole { + id Int @id @default(autoincrement()) + user User @relation(fields: [userId], references: [id]) + userId Int + role String - @@allow('all', true) - } + @@allow('all', true) + } - model User { - id Int @id @default(autoincrement()) - userRole UserRole[] - deleted Boolean @default(false) + model User { + id Int @id @default(autoincrement()) + userRole UserRole[] + deleted Boolean @default(false) - @@allow('create,read', true) - @@allow('read', auth() == this) - @@allow('read', userRole?[user == auth() && 'Admin' == role]) - @@allow('read', userRole?[user == auth()]) - } - `, - ); + @@allow('create,read', true) + @@allow('read', auth() == this) + @@allow('read', userRole?[user == auth() && 'Admin' == role]) + @@allow('read', userRole?[user == auth()]) + } + `, + ); - const rawDb = db.$unuseAll(); + const rawDb = db.$unuseAll(); - await rawDb.user.create({ - data: { - id: 1, - userRole: { - create: [ - { id: 1, role: 'Admin' }, - { id: 2, role: 'Student' }, - ], + await rawDb.user.create({ + data: { + id: 1, + userRole: { + create: [ + { id: 1, role: 'Admin' }, + { id: 2, role: 'Student' }, + ], + }, }, - }, - }); + }); - await rawDb.user.create({ - data: { - id: 2, - userRole: { - connect: { id: 1 }, + await rawDb.user.create({ + data: { + id: 2, + userRole: { + connect: { id: 1 }, + }, }, - }, - }); + }); - const c1 = await rawDb.user.count({ - where: { - userRole: { - some: { role: 'Student' }, + const c1 = await rawDb.user.count({ + where: { + userRole: { + some: { role: 'Student' }, + }, + NOT: { deleted: true }, }, - NOT: { deleted: true }, - }, - }); + }); - const c2 = await db.user.count({ - where: { - userRole: { - some: { role: 'Student' }, + const c2 = await db.user.count({ + where: { + userRole: { + some: { role: 'Student' }, + }, + NOT: { deleted: true }, }, - NOT: { deleted: true }, - }, - }); + }); - expect(c1).toEqual(c2); + expect(c1).toEqual(c2); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-714.test.ts b/tests/regression/test/v2-migrated/issue-714.test.ts index 854a5c19..71b35596 100644 --- a/tests/regression/test/v2-migrated/issue-714.test.ts +++ b/tests/regression/test/v2-migrated/issue-714.test.ts @@ -1,9 +1,10 @@ import { createPolicyTestClient } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 714', async () => { - const db = await createPolicyTestClient( - ` +describe('Regression for issue #714', () => { + it('verifies issue 714', async () => { + const db = await createPolicyTestClient( + ` model User { id Int @id @default(autoincrement()) username String @unique @@ -79,67 +80,68 @@ it('verifies issue 714', async () => { companyId Int @@allow('all', true) - } + } `, - { usePrismaPush: true }, - ); + { usePrismaPush: true }, + ); - await db.user.create({ - data: { - username: 'test@example.com', - }, - }); + await db.user.create({ + data: { + username: 'test@example.com', + }, + }); - await db.company.create({ - data: { - name: 'My Company', - companyUsers: { - create: { - dummyField: '', - user: { - connect: { - id: 1, + await db.company.create({ + data: { + name: 'My Company', + companyUsers: { + create: { + dummyField: '', + user: { + connect: { + id: 1, + }, }, }, }, - }, - propertyUsers: { - connect: { - id: 1, - }, - }, - properties: { - create: [ - { - name: 'Test', + propertyUsers: { + connect: { + id: 1, }, - ], + }, + properties: { + create: [ + { + name: 'Test', + }, + ], + }, }, - }, - }); + }); - await db.property.update({ - data: { - users: { - create: { - dummyField: '', - roles: { - createMany: { - data: { - type: 'Owner', + await db.property.update({ + data: { + users: { + create: { + dummyField: '', + roles: { + createMany: { + data: { + type: 'Owner', + }, }, }, - }, - user: { - connect: { - id: 1, + user: { + connect: { + id: 1, + }, }, }, }, }, - }, - where: { - id: 1, - }, + where: { + id: 1, + }, + }); }); }); diff --git a/tests/regression/test/v2-migrated/issue-735.test.ts b/tests/regression/test/v2-migrated/issue-735.test.ts index 0739f5d8..a78759d7 100644 --- a/tests/regression/test/v2-migrated/issue-735.test.ts +++ b/tests/regression/test/v2-migrated/issue-735.test.ts @@ -1,9 +1,10 @@ import { loadSchema } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 735', async () => { - await loadSchema( - ` +describe('Regression for issue #735', () => { + it('verifies issue 735', async () => { + await loadSchema( + ` model MyModel { id String @id @default(cuid()) view String @@ -15,5 +16,6 @@ it('verifies issue 735', async () => { name String } `, - ); + ); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-756.test.ts b/tests/regression/test/v2-migrated/issue-756.test.ts index 85b004a6..ae56f130 100644 --- a/tests/regression/test/v2-migrated/issue-756.test.ts +++ b/tests/regression/test/v2-migrated/issue-756.test.ts @@ -1,24 +1,25 @@ import { loadSchemaWithError } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 756', async () => { - await loadSchemaWithError( - ` +describe('Regression for issue #756', () => { + it('verifies issue 756', async () => { + await loadSchemaWithError( + ` generator client { provider = "prisma-client-js" } - + datasource db { provider = "postgresql" url = env("DATABASE_URL") } - + model User { id Int @id @default(autoincrement()) email Int posts Post[] } - + model Post { id Int @id @default(autoincrement()) author User? @relation(fields: [authorId], references: [id]) @@ -26,6 +27,7 @@ it('verifies issue 756', async () => { @@allow('all', auth().posts.authorId == authorId) } `, - `Could not resolve reference to MemberAccessTarget named 'authorId'.`, - ); + `Could not resolve reference to MemberAccessTarget named 'authorId'.`, + ); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-764.test.ts b/tests/regression/test/v2-migrated/issue-764.test.ts index b34f1bac..29ca3d82 100644 --- a/tests/regression/test/v2-migrated/issue-764.test.ts +++ b/tests/regression/test/v2-migrated/issue-764.test.ts @@ -1,46 +1,48 @@ import { createPolicyTestClient } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 764', async () => { - const db = await createPolicyTestClient( - ` +describe('Regression for issue #764', () => { + it('verifies issue 764', async () => { + const db = await createPolicyTestClient( + ` model User { id Int @id @default(autoincrement()) name String - + post Post? @relation(fields: [postId], references: [id]) postId Int? - + @@allow('all', true) } - + model Post { id Int @id @default(autoincrement()) title String User User[] - + @@allow('all', true) } `, - ); + ); - const user = await db.user.create({ - data: { name: 'Me' }, - }); + const user = await db.user.create({ + data: { name: 'Me' }, + }); - await db.user.update({ - where: { id: user.id }, - data: { - post: { - upsert: { - create: { - title: 'Hello World', - }, - update: { - title: 'Hello World', + await db.user.update({ + where: { id: user.id }, + data: { + post: { + upsert: { + create: { + title: 'Hello World', + }, + update: { + title: 'Hello World', + }, }, }, }, - }, + }); }); }); diff --git a/tests/regression/test/v2-migrated/issue-765.test.ts b/tests/regression/test/v2-migrated/issue-765.test.ts index f4cc959b..6d2d255d 100644 --- a/tests/regression/test/v2-migrated/issue-765.test.ts +++ b/tests/regression/test/v2-migrated/issue-765.test.ts @@ -1,35 +1,37 @@ import { createPolicyTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 765', async () => { - const db = await createPolicyTestClient( - ` -model User { - id Int @id @default(autoincrement()) - name String +describe('Regression for issue #765', () => { + it('verifies issue 765', async () => { + const db = await createPolicyTestClient( + ` + model User { + id Int @id @default(autoincrement()) + name String - post Post? @relation(fields: [postId], references: [id]) - postId Int? + post Post? @relation(fields: [postId], references: [id]) + postId Int? - @@allow('all', true) -} + @@allow('all', true) + } -model Post { - id Int @id @default(autoincrement()) - title String - User User[] + model Post { + id Int @id @default(autoincrement()) + title String + User User[] - @@allow('all', true) -} - `, - ); + @@allow('all', true) + } + `, + ); - const r = await db.user.create({ - data: { - name: 'Me', - post: undefined, - }, + const r = await db.user.create({ + data: { + name: 'Me', + post: undefined, + }, + }); + expect(r.name).toBe('Me'); + expect(r.post).toBeUndefined(); }); - expect(r.name).toBe('Me'); - expect(r.post).toBeUndefined(); }); diff --git a/tests/regression/test/v2-migrated/issue-804.test.ts b/tests/regression/test/v2-migrated/issue-804.test.ts index fcb1ab4d..8eb349e2 100644 --- a/tests/regression/test/v2-migrated/issue-804.test.ts +++ b/tests/regression/test/v2-migrated/issue-804.test.ts @@ -1,24 +1,25 @@ import { loadSchemaWithError } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 804', async () => { - await loadSchemaWithError( - ` +describe('Regression for issue #804', () => { + it('verifies issue 804', async () => { + await loadSchemaWithError( + ` generator client { provider = "prisma-client-js" } - + datasource db { provider = "postgresql" url = env("DATABASE_URL") } - + model User { id Int @id @default(autoincrement()) email Int posts Post[] } - + model Post { id Int @id @default(autoincrement()) author User? @relation(fields: [authorId], references: [id]) @@ -28,6 +29,7 @@ it('verifies issue 804', async () => { @@allow('all', auth().posts?[published] == 'TRUE') } `, - 'incompatible operand types', - ); + 'incompatible operand types', + ); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-811.test.ts b/tests/regression/test/v2-migrated/issue-811.test.ts index 384b3d19..95cfd2a7 100644 --- a/tests/regression/test/v2-migrated/issue-811.test.ts +++ b/tests/regression/test/v2-migrated/issue-811.test.ts @@ -1,70 +1,72 @@ import { createPolicyTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 811', async () => { - const db = await createPolicyTestClient( - ` - model Membership { - id String @id @default(uuid()) - role String @default('STANDARD') - user User @relation(fields: [userId], references: [id], onDelete: Cascade) - userId String @unique +describe('Regression for issue #811', () => { + it('verifies issue 811', async () => { + const db = await createPolicyTestClient( + ` + model Membership { + id String @id @default(uuid()) + role String @default('STANDARD') + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + userId String @unique - @@auth - @@allow('create,update,delete', auth().role == 'ADMIN') - @@allow('update', auth() == this) - @@allow('read', true) - } - model User { - id String @id @default(uuid()) - profile Profile @relation(fields: [profileId], references: [id], onDelete: Cascade) - profileId String @unique - memberships Membership[] + @@auth + @@allow('create,update,delete', auth().role == 'ADMIN') + @@allow('update', auth() == this) + @@allow('read', true) + } + model User { + id String @id @default(uuid()) + profile Profile @relation(fields: [profileId], references: [id], onDelete: Cascade) + profileId String @unique + memberships Membership[] - @@allow('create,update,delete', auth().role == 'ADMIN') - @@allow('update', id == auth().userId) - @@allow('read', true) - } - model Profile { - id String @id @default(uuid()) - firstName String - users User[] + @@allow('create,update,delete', auth().role == 'ADMIN') + @@allow('update', id == auth().userId) + @@allow('read', true) + } + model Profile { + id String @id @default(uuid()) + firstName String + users User[] - @@allow('create,update,delete', auth().role == 'ADMIN') - @@allow('update', users?[id == auth().userId]) - @@allow('read', true) - } - `, - ); + @@allow('create,update,delete', auth().role == 'ADMIN') + @@allow('update', users?[id == auth().userId]) + @@allow('read', true) + } + `, + ); - const r = await db.$unuseAll().user.create({ - data: { - profile: { - create: { firstName: 'Tom' }, + const r = await db.$unuseAll().user.create({ + data: { + profile: { + create: { firstName: 'Tom' }, + }, + memberships: { + create: { role: 'STANDARD' }, + }, }, - memberships: { - create: { role: 'STANDARD' }, + include: { + profile: true, + memberships: true, }, - }, - include: { - profile: true, - memberships: true, - }, - }); + }); - const membershipId = r.memberships[0].id; - const userId = r.id; - const authDb = db.$setAuth({ id: membershipId, role: 'ADMIN', userId }); + const membershipId = r.memberships[0].id; + const userId = r.id; + const authDb = db.$setAuth({ id: membershipId, role: 'ADMIN', userId }); - const r1 = await authDb.membership.update({ - data: { - role: 'VIP', - user: { update: { data: { profile: { update: { data: { firstName: 'Jerry' } } } } } }, - }, - include: { user: { include: { profile: true } } }, - where: { id: membershipId }, - }); + const r1 = await authDb.membership.update({ + data: { + role: 'VIP', + user: { update: { data: { profile: { update: { data: { firstName: 'Jerry' } } } } } }, + }, + include: { user: { include: { profile: true } } }, + where: { id: membershipId }, + }); - expect(r1.role).toBe('VIP'); - expect(r1.user.profile.firstName).toBe('Jerry'); + expect(r1.role).toBe('VIP'); + expect(r1.user.profile.firstName).toBe('Jerry'); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-825.test.ts b/tests/regression/test/v2-migrated/issue-825.test.ts index 56079097..4b5aa8eb 100644 --- a/tests/regression/test/v2-migrated/issue-825.test.ts +++ b/tests/regression/test/v2-migrated/issue-825.test.ts @@ -1,39 +1,41 @@ import { createPolicyTestClient } from '@zenstackhq/testtools'; -import { expect, it } from 'vitest'; +import { describe, expect, it } from 'vitest'; -it('verifies issue 825', async () => { - const db = await createPolicyTestClient( - ` -model User { - id Int @id @default(autoincrement()) - role String +describe('Regression for issue #825', () => { + it('verifies issue 825', async () => { + const db = await createPolicyTestClient( + ` + model User { + id Int @id @default(autoincrement()) + role String - @@allow('read', true) - @@allow('update', auth().id == id || auth().role == 'superadmin' || auth().role == 'admin') - @@deny('update', - (role == 'superadmin' && auth().id != id) - || (role == 'admin' && auth().id != id && auth().role != 'superadmin')) + @@allow('read', true) + @@allow('update', auth().id == id || auth().role == 'superadmin' || auth().role == 'admin') + @@deny('update', + (role == 'superadmin' && auth().id != id) + || (role == 'admin' && auth().id != id && auth().role != 'superadmin')) - @@deny('post-update', - (before().role != role && auth().role != 'admin' && auth().role != 'superadmin') - || (before().role != role && role == 'superadmin') - || (before().role != role && role == 'admin' && auth().role != 'superadmin')) -} - `, - ); + @@deny('post-update', + (before().role != role && auth().role != 'admin' && auth().role != 'superadmin') + || (before().role != role && role == 'superadmin') + || (before().role != role && role == 'admin' && auth().role != 'superadmin')) + } + `, + ); - const admin = await db.$unuseAll().user.create({ - data: { role: 'admin' }, - }); + const admin = await db.$unuseAll().user.create({ + data: { role: 'admin' }, + }); - const user = await db.$unuseAll().user.create({ - data: { role: 'customer' }, - }); + const user = await db.$unuseAll().user.create({ + data: { role: 'customer' }, + }); - const r = await db.$setAuth(admin).user.update({ - where: { id: user.id }, - data: { role: 'staff' }, - }); + const r = await db.$setAuth(admin).user.update({ + where: { id: user.id }, + data: { role: 'staff' }, + }); - expect(r.role).toEqual('staff'); + expect(r.role).toEqual('staff'); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-947.test.ts b/tests/regression/test/v2-migrated/issue-947.test.ts index 04a24538..21aca40f 100644 --- a/tests/regression/test/v2-migrated/issue-947.test.ts +++ b/tests/regression/test/v2-migrated/issue-947.test.ts @@ -1,9 +1,10 @@ import { loadSchema } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 947', async () => { - await loadSchema( - ` +describe('Regression for issue #947', () => { + it('verifies issue 947', async () => { + await loadSchema( + ` datasource db { provider = "postgresql" url = env("DATABASE_URL") @@ -13,11 +14,12 @@ model Test { id String @id props TestEnum[] @default([]) } - + enum TestEnum { A B } `, - ); + ); + }); }); diff --git a/tests/regression/test/v2-migrated/issue-971.test.ts b/tests/regression/test/v2-migrated/issue-971.test.ts index a20d5bb6..d571344a 100644 --- a/tests/regression/test/v2-migrated/issue-971.test.ts +++ b/tests/regression/test/v2-migrated/issue-971.test.ts @@ -1,16 +1,17 @@ import { loadSchema } from '@zenstackhq/testtools'; -import { it } from 'vitest'; +import { describe, it } from 'vitest'; -it('verifies issue 971', async () => { - await loadSchema( - ` +describe('Regression for issue #971', () => { + it('verifies issue 971', async () => { + await loadSchema( + ` type Level1 { id String @id @default(cuid()) URL String? @@validate(URL != null, "URL must be provided") // works } type Level2 with Level1 { - @@validate(URL != null, "URL must be provided") // works + @@validate(URL != null, "URL must be provided") // works } type Level3 with Level2 { @@validate(URL != null, "URL must be provided") // doesn't work @@ -18,5 +19,6 @@ type Level3 with Level2 { model Foo with Level3 { } `, - ); + ); + }); });