tests.ts•3.13 kB
import { expectTypeOf } from 'expect-type'
import { Providers } from '../_utils/providers'
import testMatrix from './_matrix'
// @ts-ignore
import type { Prisma as PrismaNamespace, PrismaClient } from './generated/prisma/client'
declare let prisma: PrismaClient
testMatrix.setupTestSuite(({ provider }) => {
  beforeAll(async () => {
    const input: Partial<PrismaNamespace.ModelCreateInput> = {
      value: 'Foo',
      relation: {
        create: {},
      },
    }
    if (provider !== Providers.SQLITE && provider !== Providers.SQLSERVER) {
      // @ts-test-if: provider !== Providers.SQLITE && provider !== Providers.SQLSERVER
      input.enum = 'A'
    }
    if (provider === Providers.POSTGRESQL || provider === Providers.COCKROACHDB || provider === Providers.MONGODB) {
      // @ts-test-if: provider === Providers.POSTGRESQL || provider === Providers.COCKROACHDB || provider === Providers.MONGODB
      input.list = ['Hello', 'world']
      // @ts-test-if: provider === Providers.POSTGRESQL || provider === Providers.COCKROACHDB || provider === Providers.MONGODB
      input.enumList = ['A', 'B']
    }
    if (provider === Providers.MONGODB) {
      // @ts-test-if: provider === Providers.MONGODB
      input.composite = { value: 'I am composite' }
    }
    await prisma.model.create({ data: input as PrismaNamespace.ModelCreateInput })
  })
  test('includes scalars', async () => {
    const model = await prisma.model.findFirstOrThrow()
    expect(model.id).toBeDefined()
    expect(model.value).toBeDefined()
    expect(model.otherId).toBeDefined()
  })
  test('does not include relations', async () => {
    const model = await prisma.model.findFirstOrThrow()
    expectTypeOf(model).not.toHaveProperty('relation')
    expect(model).not.toHaveProperty('relation')
  })
  testIf(provider !== Providers.SQLITE && provider !== Providers.SQLSERVER)('includes enums', async () => {
    const model = await prisma.model.findFirstOrThrow()
    // @ts-test-if: provider !== Providers.SQLITE && provider !== Providers.SQLSERVER
    expect(model.enum).toBeDefined()
  })
  testIf(provider === Providers.POSTGRESQL || provider === Providers.COCKROACHDB || provider === Providers.MONGODB)(
    'includes lists',
    async () => {
      const model = await prisma.model.findFirstOrThrow()
      // @ts-test-if: provider === Providers.POSTGRESQL || provider === Providers.COCKROACHDB || provider === Providers.MONGODB
      expect(model.list).toBeDefined()
    },
  )
  testIf(provider === Providers.POSTGRESQL || provider === Providers.COCKROACHDB || provider === Providers.MONGODB)(
    'includes enum lists',
    async () => {
      const model = await prisma.model.findFirstOrThrow()
      // @ts-test-if: provider === Providers.POSTGRESQL || provider === Providers.COCKROACHDB || provider === Providers.MONGODB
      expect(model.enumList).toBeDefined()
    },
  )
  testIf(provider === Providers.MONGODB)('includes composites', async () => {
    const model = await prisma.model.findFirstOrThrow()
    // @ts-test-if: provider === Providers.MONGODB
    expect(model.composite).toBeDefined()
  })
})