From a4400c9c4a898df68659adc378e68ed2db179054 Mon Sep 17 00:00:00 2001 From: Alberto Schiabel Date: Tue, 30 Jan 2024 12:05:58 +0100 Subject: [PATCH] test(driver-adapters): add test for `Bytes` (#22810) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Joël Galeran --- .../team-orm-687-bytes/_matrix.ts | 15 +++++++ .../team-orm-687-bytes/prisma/_schema.ts | 21 ++++++++++ .../team-orm-687-bytes/tests.ts | 42 +++++++++++++++++++ sandbox/driver-adapters/src/planetscale.ts | 8 ++-- 4 files changed, 82 insertions(+), 4 deletions(-) create mode 100644 packages/client/tests/functional/driver-adapters/team-orm-687-bytes/_matrix.ts create mode 100644 packages/client/tests/functional/driver-adapters/team-orm-687-bytes/prisma/_schema.ts create mode 100644 packages/client/tests/functional/driver-adapters/team-orm-687-bytes/tests.ts diff --git a/packages/client/tests/functional/driver-adapters/team-orm-687-bytes/_matrix.ts b/packages/client/tests/functional/driver-adapters/team-orm-687-bytes/_matrix.ts new file mode 100644 index 000000000000..2031fa060f0d --- /dev/null +++ b/packages/client/tests/functional/driver-adapters/team-orm-687-bytes/_matrix.ts @@ -0,0 +1,15 @@ +import { defineMatrix } from '../../_utils/defineMatrix' + +export default defineMatrix(() => [ + [ + { + provider: 'sqlite', + }, + { + provider: 'postgresql', + }, + { + provider: 'mysql', + }, + ], +]) diff --git a/packages/client/tests/functional/driver-adapters/team-orm-687-bytes/prisma/_schema.ts b/packages/client/tests/functional/driver-adapters/team-orm-687-bytes/prisma/_schema.ts new file mode 100644 index 000000000000..fcac4f565473 --- /dev/null +++ b/packages/client/tests/functional/driver-adapters/team-orm-687-bytes/prisma/_schema.ts @@ -0,0 +1,21 @@ +import { idForProvider } from '../../../_utils/idForProvider' +import testMatrix from '../_matrix' + +export default testMatrix.setupSchema(({ provider }) => { + return /* Prisma */ ` + generator client { + provider = "prisma-client-js" + previewFeatures = ["driverAdapters"] + } + + datasource db { + provider = "${provider}" + url = env("DATABASE_URI_${provider}") + } + + model A { + id ${idForProvider(provider)} + bytes Bytes + } + ` +}) diff --git a/packages/client/tests/functional/driver-adapters/team-orm-687-bytes/tests.ts b/packages/client/tests/functional/driver-adapters/team-orm-687-bytes/tests.ts new file mode 100644 index 000000000000..a91f30aae280 --- /dev/null +++ b/packages/client/tests/functional/driver-adapters/team-orm-687-bytes/tests.ts @@ -0,0 +1,42 @@ +import { defaultTestSuiteOptions } from '../_utils/test-suite-options' +import testMatrix from './_matrix' +// @ts-ignore +import type { PrismaClient } from './node_modules/@prisma/client' + +declare let prisma: PrismaClient + +testMatrix.setupTestSuite( + () => { + test('Bytes encoding is preserved', async () => { + const inputStrings = ['AQID', 'FSDF', 'AA', 'BB'] + const inputBtoas = inputStrings.map((s) => btoa(s)) + const inputs = [...inputStrings, ...inputBtoas] + + const inputBuffers = inputs.map((s) => Buffer.from(s)) + const inputData = inputBuffers.map((b, i) => ({ id: `${i + 1}`, bytes: b })) + + // sqlite doesn't support `createMany` yet + await prisma.$transaction(inputData.map((data) => prisma.a.create({ data }))) + + const results = await prisma.a.findMany() + + // We can't compare buffers directly, or else we'd see this diff in the test output: + // ``` + // - "bytes": Buffer [ + // + "bytes": C [ + // ``` + const outputData = results.map((result) => { + return { + id: result.id, + bytes: Buffer.from(result.bytes), + } + }) + + expect(outputData).toEqual(inputData) + }) + }, + { + ...defaultTestSuiteOptions, + skipDefaultClientInstance: false, + }, +) diff --git a/sandbox/driver-adapters/src/planetscale.ts b/sandbox/driver-adapters/src/planetscale.ts index 165adb74925f..335b161bc138 100644 --- a/sandbox/driver-adapters/src/planetscale.ts +++ b/sandbox/driver-adapters/src/planetscale.ts @@ -1,12 +1,12 @@ -import { connect } from '@planetscale/database' +import { Client } from '@planetscale/database' import { PrismaPlanetScale } from '@prisma/adapter-planetscale' import { smokeTest } from './test' async function main() { - const connectionString = `${process.env.JS_PLANETSCALE_DATABASE_URL as string}` + const connectionString = `${process.env.JS_PLANETSCALE_DATABASE_URL}` - const connection = connect({ url: connectionString }) - const adapter = new PrismaPlanetScale(connection) + const client = new Client({ url: connectionString }) + const adapter = new PrismaPlanetScale(client) await smokeTest(adapter) }