tests.ts•2.57 kB
import { QueryEvent } from '../../../../src/runtime/getPrismaClient'
import { Providers } from '../../_utils/providers'
import { waitFor } from '../../_utils/tests/waitFor'
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/6578
testMatrix.setupTestSuite(
({ provider }) => {
let _prisma: ReturnType<typeof newPrismaClient>
beforeAll(() => {
_prisma = newPrismaClient({
log: [
{
emit: 'event',
level: 'query',
},
],
})
})
afterAll(async () => {
await _prisma.$disconnect()
})
// TODO Planetscale InvalidArgument desc = Incorrect time value: '2023-09-30T03:07:55.276+00:00
test('should assert Dates, DateTimes, Times and UUIDs are wrapped in quotes and are deserializable', async () => {
const date = new Date()
let paramsString = ''
// @ts-expect-error - client not typed for log opts for cross generator compatibility - can be improved once we drop the prisma-client-js generator
_prisma.$on('query', (e) => {
const event = e as unknown as QueryEvent
if (event.query.includes('INSERT')) {
paramsString = event.params
}
})
if (provider === Providers.SQLITE) {
await _prisma.user.create({
// @ts-test-if: provider === Providers.SQLITE
data: {
dateTime: date,
},
})
} else {
await _prisma.user.create({
data: {
dateTime: date,
// @ts-test-if: provider !== Providers.SQLITE
date: date,
time: date,
},
})
}
await waitFor(() => {
if (paramsString === '') {
throw new Error('params not received from query logs')
}
})
// This test is asserting that JSON.parse does not throw because quotes are used
const params = JSON.parse(paramsString)
if (provider === Providers.SQLITE) {
expect(params).toHaveLength(3)
} else {
expect(params).toHaveLength(5)
}
params.forEach((param) => {
const isString = typeof param === 'string'
expect(isString).toEqual(true)
})
})
},
{
optOut: {
from: [Providers.MONGODB],
reason: 'Params not applicable to mongodb',
},
},
)