tests.ts•1.13 kB
import { faker } from '@faker-js/faker'
import testMatrix from './_matrix'
// @ts-ignore
import type { Prisma as PrismaNamespace, PrismaClient } from './generated/prisma/client'
declare let prisma: PrismaClient
declare let Prisma: typeof PrismaNamespace
testMatrix.setupTestSuite(({ driverAdapter }) => {
  // D1: iTx are not available.
  skipTestIf(driverAdapter === 'js_d1')('extension method is bound to transaction client within itx', async () => {
    const email = faker.internet.email()
    const xprisma = prisma.$extends({
      model: {
        user: {
          async exists(email: string) {
            const user = await Prisma.getExtensionContext(this).findFirst({ where: { email } })
            return user !== null
          },
        },
      },
      client: {
        foo() {
          Prisma.getExtensionContext(this)
        },
      },
    })
    const existsWithinTransaction = await xprisma.$transaction(async (tx) => {
      await tx.user.create({ data: { email } })
      const result = await tx.user.exists(email)
      return result
    })
    expect(existsWithinTransaction).toBe(true)
  })
})