tests.ts•2.58 kB
import { expectTypeOf } from 'expect-type'
// @ts-ignore
import { Providers } from '../_utils/providers'
import testMatrix from './_matrix'
import type * as imports from './generated/prisma/client'
declare let prisma: imports.PrismaClient
declare let loaded: {
Plan: typeof imports.Plan
}
testMatrix.setupTestSuite(
({ provider }) => {
test('can create data with an enum value', async () => {
const { Plan } = loaded
await prisma.user.create({
data: {
plan: Plan.CUSTOM,
},
})
})
test('can retrieve data with an enum value', async () => {
const { Plan } = loaded
const user = await prisma.user.create({
data: {
plan: Plan.CUSTOM,
},
})
const data = await prisma.user.findFirstOrThrow({
where: {
id: user.id,
plan: Plan.CUSTOM,
},
})
expectTypeOf(data.plan).toEqualTypeOf<imports.Plan>()
expect(data.plan).toEqual(Plan.CUSTOM)
})
test('the enum type can be assigned its own values', () => {
const { Plan } = loaded
const value: imports.Plan = Plan.CUSTOM
expect(value).toEqual(Plan.CUSTOM)
expect(value).toEqual('CUSTOM')
expectTypeOf(value).toEqualTypeOf<'CUSTOM'>()
expectTypeOf<imports.Plan>().toEqualTypeOf<'CUSTOM' | 'FREE' | 'PAID'>()
})
testIf(provider == Providers.SQLITE)(
'fails at runtime when an invalid entry is entered manually in SQLite',
async () => {
// @ts-test-if: provider !== Providers.MONGODB
await prisma.$executeRaw`INSERT INTO "User" ("id", "plan") VALUES ('2', 'NONFREE')`
const result = await prisma.user.findMany().catch((e) => e)
expect(result).toBeInstanceOf(Error)
expect(result.message).toMatch(/Value 'NONFREE' not found in enum 'Plan'/)
},
)
testIf(provider == Providers.MONGODB)(
'fails at runtime when an invalid entry is entered manually in Mongo',
async () => {
// @ts-test-if: provider === Providers.MONGODB
await prisma.$runCommandRaw({
insert: 'User',
documents: [
{
_id: '2',
plan: 'NONFREE',
},
],
})
const result = await prisma.user.findMany().catch((e) => e)
expect(result).toBeInstanceOf(Error)
expect(result.message).toMatch(/Value 'NONFREE' not found in enum 'Plan'/)
},
)
},
{
optOut: {
from: ['sqlserver'],
reason: 'enum values are not supported',
},
},
)