From 512ddab74d9a67d234e1d20450738af88d67ec69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=ABl=20Galeran?= Date: Fri, 6 Aug 2021 19:28:44 +0200 Subject: [PATCH] test(client): namedConstraints @@unique @@id with and without name (#8620) * test(client): namedConstraints @@unique @@id with and without name * Update test.ts * Actually needs to be lower cased in Prisma Client API Co-authored-by: Matthias Oertel Co-authored-by: Jan Piotrowski --- .../happy/namedConstraints/schema.prisma | 33 +++++- .../happy/namedConstraints/test.ts | 101 +++++++++++++++--- .../types/namedConstraints/schema.prisma | 16 ++- .../__tests__/types/namedConstraints/test.ts | 23 +++- 4 files changed, 153 insertions(+), 20 deletions(-) diff --git a/packages/client/src/__tests__/integration/happy/namedConstraints/schema.prisma b/packages/client/src/__tests__/integration/happy/namedConstraints/schema.prisma index 7007de1e0bc0..dd7f2dcd0a5a 100644 --- a/packages/client/src/__tests__/integration/happy/namedConstraints/schema.prisma +++ b/packages/client/src/__tests__/integration/happy/namedConstraints/schema.prisma @@ -7,9 +7,32 @@ generator client { provider = "prisma-client-js" previewFeatures = ["namedConstraints"] } -model User1 { - firstName String - lastName String - isAdmin Boolean @default(false) - @@id(fields: [firstName, lastName], name: "customName") + +model AtAtId { + key1 String + key2 Int + + @@id([key1, key2]) +} + +model AtAtIdNamed { + key1 String + key2 Int + + @@id(fields: [key1, key2], name: "namedConstraintId") +} + +// named @@unique was possible before namedConstraints but we still want to test it +model AtAtUnique { + key1 String + key2 Int + + @@unique([key1, key2]) +} + +model AtAtUniqueNamed { + key1 String + key2 Int + + @@unique(fields: [key1, key2], name: "namedConstraintUnique") } diff --git a/packages/client/src/__tests__/integration/happy/namedConstraints/test.ts b/packages/client/src/__tests__/integration/happy/namedConstraints/test.ts index 9fc52d588e25..8acd464aecac 100644 --- a/packages/client/src/__tests__/integration/happy/namedConstraints/test.ts +++ b/packages/client/src/__tests__/integration/happy/namedConstraints/test.ts @@ -3,7 +3,7 @@ import { generateTestClient } from '../../../../utils/getTestClient' import { migrateDb } from '../../__helpers__/migrateDb' let prisma -describe('namedConstraint(sqlite)', () => { +describe('namedConstraints(sqlite)', () => { beforeAll(async () => { await migrateDb({ connectionString: `file:./dev.db`, @@ -14,27 +14,102 @@ describe('namedConstraint(sqlite)', () => { prisma = new PrismaClient() }) - afterEach(async () => { - await prisma.user1.deleteMany() + beforeEach(async () => { + await prisma.atAtId.deleteMany() + await prisma.atAtIdNamed.deleteMany() + await prisma.atAtUnique.deleteMany() + await prisma.atAtUniqueNamed.deleteMany() }) + afterAll(async () => { await prisma.$disconnect() }) - test('findUnique using namedConstraint', async () => { - await prisma.user1.create({ + + test('findUnique using @@id by default name', async () => { + await prisma.atAtId.create({ + data: { + key1: 'data', + key2: 2, + }, + }) + const result: { key1: string; key2: number } | null = + await prisma.atAtId.findUnique({ + where: { + key1_key2: { + key1: 'data', + key2: 2, + }, + }, + }) + expect(result).toEqual({ + key1: 'data', + key2: 2, + }) + }) + + test('findUnique using @@id by custom name', async () => { + await prisma.atAtIdNamed.create({ + data: { + key1: 'data', + key2: 2, + }, + }) + const result: { key1: string; key2: number } | null = + await prisma.atAtIdNamed.findUnique({ + where: { + namedConstraintId: { + key1: 'data', + key2: 2, + }, + }, + }) + expect(result).toEqual({ + key1: 'data', + key2: 2, + }) + }) + + test('findUnique using @@unique by default name', async () => { + await prisma.atAtUnique.create({ data: { - firstName: 'Alice', - lastName: 'Ball', + key1: 'data', + key2: 2, }, }) - const user = await prisma.user1.findUnique({ - where: { - customName: { - firstName: 'Alice', - lastName: 'Ball', + const result: { key1: string; key2: number } | null = + await prisma.atAtUnique.findUnique({ + where: { + key1_key2: { + key1: 'data', + key2: 2, + }, }, + }) + expect(result).toEqual({ + key1: 'data', + key2: 2, + }) + }) + + test('findUnique using @@unique by custom name', async () => { + await prisma.atAtUniqueNamed.create({ + data: { + key1: 'data', + key2: 2, }, }) - expect(user.firstName).toEqual('Alice') + const result: { key1: string; key2: number } | null = + await prisma.atAtUniqueNamed.findUnique({ + where: { + namedConstraintUnique: { + key1: 'data', + key2: 2, + }, + }, + }) + expect(result).toEqual({ + key1: 'data', + key2: 2, + }) }) }) diff --git a/packages/client/src/__tests__/types/namedConstraints/schema.prisma b/packages/client/src/__tests__/types/namedConstraints/schema.prisma index 597081f1cda8..ee8d96ae85c2 100644 --- a/packages/client/src/__tests__/types/namedConstraints/schema.prisma +++ b/packages/client/src/__tests__/types/namedConstraints/schema.prisma @@ -20,6 +20,20 @@ model AtAtIdNamed { key1 String key2 Int - @@id(fields:[key1, key2], name:"namedConstraint") + @@id(fields: [key1, key2], name: "namedConstraintId") } +// named @@unique was possible before namedConstraints but we still want to test it +model AtAtUnique { + key1 String + key2 Int + + @@unique([key1, key2]) +} + +model AtAtUniqueNamed { + key1 String + key2 Int + + @@unique(fields: [key1, key2], name: "namedConstraintUnique") +} diff --git a/packages/client/src/__tests__/types/namedConstraints/test.ts b/packages/client/src/__tests__/types/namedConstraints/test.ts index 8eb9e2c1ac83..d65a2b7f306a 100644 --- a/packages/client/src/__tests__/types/namedConstraints/test.ts +++ b/packages/client/src/__tests__/types/namedConstraints/test.ts @@ -5,10 +5,12 @@ import { PrismaClient } from '@prisma/client' // This file will not be executed, just compiled to check if the typings are valid async function main() { const prisma = new PrismaClient() + + // @@id const result: { key1: string; key2: number } | null = await prisma.atAtIdNamed.findUnique({ where: { - namedConstraint: { + namedConstraintId: { key1: 'data', key2: 2, }, @@ -23,6 +25,25 @@ async function main() { }, }, }) + + // @@unique + const result3 = await prisma.atAtUniqueNamed.findUnique({ + where: { + namedConstraintUnique: { + key1: 'data', + key2: 2, + }, + }, + }) + const result4: { key1: string; key2: number } | null = + await prisma.atAtUnique.findUnique({ + where: { + key1_key2: { + key1: 'data', + key2: 2, + }, + }, + }) } main().catch((e) => {