From da22192d4c59234d4022777e4826e8e0cfe08f97 Mon Sep 17 00:00:00 2001 From: aditpras Date: Thu, 6 Mar 2025 10:01:10 -0600 Subject: [PATCH] fix: matching for models with a composite primary key --- src/__tests__/find/find-many.test.ts | 48 ++++++++++++++++++++++++++++ src/lib/operations/find/match.ts | 2 +- 2 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 src/__tests__/find/find-many.test.ts diff --git a/src/__tests__/find/find-many.test.ts b/src/__tests__/find/find-many.test.ts new file mode 100644 index 00000000..c9959245 --- /dev/null +++ b/src/__tests__/find/find-many.test.ts @@ -0,0 +1,48 @@ +/* eslint-disable @typescript-eslint/ban-ts-comment */ +/* eslint-disable jest/no-conditional-expect */ +// @ts-nocheck +import { PrismaClient, User } from '@prisma/client'; + +import { resetDb, seededUsers, simulateSeed, seededBlogs, seededServices, seededReactions } from '../../../testing'; +import { PrismockClient, PrismockClientType } from '../../lib/client'; +import { fetchGenerator, getProvider } from '../../lib/prismock'; + +jest.setTimeout(40000); + +describe('find', () => { + let prismock: PrismockClientType; + let prisma: PrismaClient; + + let realUser: User; + let mockUser: User; + + let provider: string; + + beforeAll(async () => { + await resetDb(); + + prisma = new PrismaClient(); + prismock = new PrismockClient() as PrismockClientType; + await simulateSeed(prismock); + + const generator = await fetchGenerator(); + provider = getProvider(generator)!; + generator.stop(); + }); + + describe('findMany', () => { + it('Should find the single item matching the composite primary key', async () => { + const expected = seededServices[0]; + const realServices = (await prisma.service.findMany({ + where: { name: { equals: expected.name }, userId: { equals: expected.userId } }, + }))!; + const mockServices = (await prismock.service.findMany({ + where: { name: { equals: expected.name }, userId: { equals: expected.userId } }, + }))!; + + expect(realServices.length).toEqual(1); + expect(realServices[0]).toEqual(expected); + expect(mockServices).toEqual(realServices); + }); + }); +}); diff --git a/src/lib/operations/find/match.ts b/src/lib/operations/find/match.ts index 336f4fff..32c8e3ac 100755 --- a/src/lib/operations/find/match.ts +++ b/src/lib/operations/find/match.ts @@ -123,7 +123,7 @@ export const matchMultiple = (item: Item, where: FindWhereArgs, current: Delegat const compositeIndex = current.model.uniqueIndexes.map((index) => index.name).includes(child) || current.model.primaryKey?.name === child || - current.model.primaryKey?.fields.join('_'); + current.model.primaryKey?.fields.join('_') === child; if (compositeIndex) { return matchMultiple(item, where[child] as FindWhereArgs, current, delegates);