From 231f5a4724079c56fe4688f29f75df04c8126a83 Mon Sep 17 00:00:00 2001 From: Sergey Tatarintsev Date: Thu, 1 Dec 2022 10:15:15 +0100 Subject: [PATCH] fix(client): include enums into scalar select lists (#16540) Fix #16535 --- .../client/src/generation/TSClient/Model.ts | 2 +- .../issues/16535-select-enum/_matrix.ts | 15 ++++++++++ .../16535-select-enum/prisma/_schema.ts | 26 +++++++++++++++++ .../issues/16535-select-enum/tests.ts | 29 +++++++++++++++++++ 4 files changed, 71 insertions(+), 1 deletion(-) create mode 100644 packages/client/tests/functional/issues/16535-select-enum/_matrix.ts create mode 100644 packages/client/tests/functional/issues/16535-select-enum/prisma/_schema.ts create mode 100644 packages/client/tests/functional/issues/16535-select-enum/tests.ts diff --git a/packages/client/src/generation/TSClient/Model.ts b/packages/client/src/generation/TSClient/Model.ts index 2afe58f8a475..0ae6aed7bc9b 100644 --- a/packages/client/src/generation/TSClient/Model.ts +++ b/packages/client/src/generation/TSClient/Model.ts @@ -341,7 +341,7 @@ ${ifExtensions(() => { export type ${getSelectName(model.name)}Scalar = { ${indent( outputType.fields - .filter((field) => field.outputType.location === 'scalar') + .filter((field) => field.outputType.location === 'scalar' || field.outputType.location === 'enumTypes') .map((f) => `${f.name}?: boolean`) .join('\n'), TAB_SIZE, diff --git a/packages/client/tests/functional/issues/16535-select-enum/_matrix.ts b/packages/client/tests/functional/issues/16535-select-enum/_matrix.ts new file mode 100644 index 000000000000..38333790840a --- /dev/null +++ b/packages/client/tests/functional/issues/16535-select-enum/_matrix.ts @@ -0,0 +1,15 @@ +import { defineMatrix } from '../../_utils/defineMatrix' + +export default defineMatrix(() => [ + [ + { + provider: 'postgresql', + }, + { + provider: 'mysql', + }, + { + provider: 'cockroachdb', + }, + ], +]) diff --git a/packages/client/tests/functional/issues/16535-select-enum/prisma/_schema.ts b/packages/client/tests/functional/issues/16535-select-enum/prisma/_schema.ts new file mode 100644 index 000000000000..3f042e9730cc --- /dev/null +++ b/packages/client/tests/functional/issues/16535-select-enum/prisma/_schema.ts @@ -0,0 +1,26 @@ +import { idForProvider } from '../../../_utils/idForProvider' +import testMatrix from '../_matrix' + +export default testMatrix.setupSchema(({ provider }) => { + return /* Prisma */ ` + generator client { + provider = "prisma-client-js" + previewFeatures = ["clientExtensions"] + } + + datasource db { + provider = "${provider}" + url = env("DATABASE_URI_${provider}") + } + + model User { + id ${idForProvider(provider)} + role UserRole + } + + enum UserRole { + ADMIN + USER + } + ` +}) diff --git a/packages/client/tests/functional/issues/16535-select-enum/tests.ts b/packages/client/tests/functional/issues/16535-select-enum/tests.ts new file mode 100644 index 000000000000..21f7dca08ff3 --- /dev/null +++ b/packages/client/tests/functional/issues/16535-select-enum/tests.ts @@ -0,0 +1,29 @@ +import testMatrix from './_matrix' +// @ts-ignore +import type { Prisma as PrismaNamespace, PrismaClient } from './node_modules/@prisma/client' + +declare let prisma: PrismaClient +declare let Prisma: typeof PrismaNamespace + +testMatrix.setupTestSuite( + () => { + test('allows to select enum field', async () => { + const user = await prisma.user.create({ + data: { + role: 'ADMIN', + }, + select: { + role: true, + }, + }) + + expect(user).toEqual({ role: 'ADMIN' }) + }) + }, + { + optOut: { + from: ['sqlite', 'mongodb', 'sqlserver'], + reason: 'No support for enums', + }, + }, +)