tests.ts•2.44 kB
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>
testMatrix.setupTestSuite(
  (suiteConfig, suiteMeta, clientMeta) => {
    const OLD_ENV = { ...process.env }
    const restoreEnv = () => {
      for (const key of Object.keys(process.env)) {
        if (!(key in OLD_ENV)) {
          delete process.env[key]
        }
      }
      for (const [key, value] of Object.entries(OLD_ENV)) {
        if (value === undefined) {
          delete process.env[key]
        } else {
          process.env[key] = value
        }
      }
    }
    afterEach(() => {
      restoreEnv()
    })
    testIf(clientMeta.dataProxy)('url starts with invalid://', async () => {
      process.env[`DATABASE_URI_${suiteConfig.provider}`] = 'invalid://invalid'
      const prisma = newPrismaClient()
      await expect(prisma.user.findMany()).rejects.toThrow(
        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
        expect.objectContaining({
          message: expect.stringContaining(
            'Error validating datasource `db`: the URL must start with the protocol `prisma://`',
          ),
        }),
      )
    })
    testIf(clientMeta.dataProxy)('url starts with prisma:// but is invalid', async () => {
      process.env[`DATABASE_URI_${suiteConfig.provider}`] = 'prisma://invalid'
      const prisma = newPrismaClient()
      await expect(prisma.user.findMany()).rejects.toThrow(
        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
        expect.objectContaining({
          message: expect.stringContaining('Error validating datasource `db`: the URL must contain a valid API key'),
        }),
      )
    })
    testIf(clientMeta.dataProxy)('url starts with prisma:// with nothing else', async () => {
      process.env[`DATABASE_URI_${suiteConfig.provider}`] = 'prisma://'
      const prisma = newPrismaClient()
      await expect(prisma.user.findMany()).rejects.toThrow(
        // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
        expect.objectContaining({
          message: expect.stringContaining('Error validating datasource `db`: the URL must contain a valid API key'),
        }),
      )
    })
  },
  {
    skipDb: true,
    skipDefaultClientInstance: true,
  },
)