tests.ts•2.14 kB
import testMatrix from './_matrix'
// @ts-ignore
import type { PrismaClient } from './generated/prisma/client'
declare let prisma: PrismaClient
/**
 * Tests for https://github.com/prisma/prisma/issues/21631, fixed in Prisma 5.12.0
 */
testMatrix.setupTestSuite(() => {
  describe("Transactions and batching (query compacting) shouldn't interfere with result sets", () => {
    async function setupData() {
      await prisma.worker.deleteMany()
      const email = 'test@prisma.io'
      const phone = '+39 123'
      await prisma.worker.create({
        data: {
          email,
          phone,
        },
      })
      return { email, phone }
    }
    test('2 independent `findUnique`s', async () => {
      const { email, phone } = await setupData()
      const notExistingPhone = `${phone}456`
      const workerFromEmail = await prisma.worker.findUnique({ where: { email } })
      const workerFromPhone = await prisma.worker.findUnique({ where: { phone: notExistingPhone } })
      expect(workerFromEmail).toMatchObject({
        email,
        phone,
      })
      expect(workerFromPhone).toEqual(null)
    })
    test('2 concurrent `findUnique`s', async () => {
      const { email, phone } = await setupData()
      const notExistingPhone = `${phone}456`
      const [workerFromEmail, workerFromPhone] = await Promise.all([
        prisma.worker.findUnique({ where: { email } }),
        prisma.worker.findUnique({ where: { phone: notExistingPhone } }),
      ])
      expect(workerFromEmail).toMatchObject({
        email,
        phone,
      })
      expect(workerFromPhone).toEqual(null)
    })
    test('2 `findUnique`s in a $transaction', async () => {
      const { email, phone } = await setupData()
      const notExistingPhone = `${phone}456`
      const [workerFromEmail, workerFromPhone] = await prisma.$transaction([
        prisma.worker.findUnique({ where: { email } }),
        prisma.worker.findUnique({ where: { phone: notExistingPhone } }),
      ])
      expect(workerFromEmail).toMatchObject({
        email,
        phone,
      })
      expect(workerFromPhone).toEqual(null)
    })
  })
})