tests.ts•1.71 kB
import testMatrix from './_matrix'
// @ts-ignore
import type { PrismaClient } from './generated/prisma/client'
declare let prisma: PrismaClient
// Regression test for https://github.com/prisma/prisma/issues/15204
testMatrix.setupTestSuite(
  ({ driverAdapter, fieldType }) => {
    test('should return a descriptive error', async () => {
      await prisma.$executeRaw`INSERT INTO "TestModel" ("id", "field") VALUES (1, 1.84467440724388e+19)`
      if (driverAdapter === undefined || driverAdapter === 'js_d1') {
        await expect(prisma.testModel.findMany()).rejects.toThrow(
          // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
          expect.objectContaining({
            code: 'P2023',
            message: expect.stringContaining(
              `Inconsistent column data: Could not convert from \`BigDecimal(18446744072438800000)\` to \`${fieldType}\``,
            ),
          }),
        )
      } else {
        await expect(prisma.testModel.findMany()).rejects.toThrow(
          // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
          expect.objectContaining({
            code: 'P2023',
            message: expect.stringContaining(
              `Conversion failed: number must be an integer in column 'field', got '1.84467440724388e19'`,
            ),
          }),
        )
      }
    })
  },
  {
    optOut: {
      from: ['mysql', 'mongodb', 'sqlserver', 'postgresql', 'cockroachdb'],
      reason: 'SQLite-specific test',
    },
    skipDriverAdapter: {
      from: ['js_better_sqlite3', 'js_d1', 'js_libsql'],
      reason: 'Tracked in https://linear.app/prisma-company/issue/ORM-1362/fix-issues15204-conversion-error',
    },
  },
)