tests.ts•1.88 kB
import { ClientEngineType } from '@prisma/internals'
import { NewPrismaClient } from '../../_utils/types'
import testMatrix from './_matrix'
// @ts-ignore
import type { PrismaClient } from './generated/prisma/client'
declare const newPrismaClient: NewPrismaClient<PrismaClient, typeof PrismaClient>
// https://github.com/prisma/prisma/issues/12507
testMatrix.setupTestSuite(
  ({ engineType }) => {
    test('should create data using one PrismaClient and read using another', async () => {
      if (engineType !== ClientEngineType.Binary) {
        return
      }
      const prismaClient1 = newPrismaClient({
        log: [
          {
            emit: 'event',
            level: 'info',
          },
        ],
      })
      const internalURL = await ((): Promise<string> =>
        new Promise((resolve, reject) => {
          // @ts-expect-error - client not typed for log opts for cross generator compatibility - can be improved once we drop the prisma-client-js generator
          prismaClient1.$on('info', (data: Prisma.LogEvent) => {
            if (/Started query engine/.test(data.message as string)) {
              const port = data.message.split(':').pop()
              resolve(`http://127.0.0.1:${port}`)
            }
          })
          prismaClient1.$connect().catch(reject)
        }))()
      const prismaClient2 = newPrismaClient({
        // @ts-test-if: false
        __internal: {
          engine: {
            endpoint: internalURL,
          },
        },
      })
      const name = 'some-random-name'
      const created = await prismaClient1.user.create({ data: { name } })
      const [found] = await prismaClient2.user.findMany({ where: { name } })
      expect(created).toMatchObject(found)
      await prismaClient1.$disconnect()
      await prismaClient2.$disconnect()
    })
  },
  {
    skipDefaultClientInstance: true,
  },
)