Skip to content

Commit d0fd350

Browse files
authored
fi: throw PrismaValidationError when auth() is used in @default without user context (#1618)
1 parent 3831350 commit d0fd350

File tree

2 files changed

+49
-4
lines changed

2 files changed

+49
-4
lines changed

packages/runtime/src/enhancements/default-auth.ts

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,19 @@
11
/* eslint-disable @typescript-eslint/no-unused-vars */
22
/* eslint-disable @typescript-eslint/no-explicit-any */
33

4-
import { FieldInfo, NestedWriteVisitor, PrismaWriteActionType, enumerate, getFields, requireField } from '../cross';
5-
import { clone } from '../cross';
4+
import {
5+
FieldInfo,
6+
NestedWriteVisitor,
7+
PrismaWriteActionType,
8+
clone,
9+
enumerate,
10+
getFields,
11+
requireField,
12+
} from '../cross';
613
import { DbClientContract } from '../types';
714
import { EnhancementContext, InternalEnhancementOptions } from './create-enhancement';
815
import { DefaultPrismaProxyHandler, PrismaProxyActions, makeProxy } from './proxy';
9-
import { isUnsafeMutate } from './utils';
16+
import { isUnsafeMutate, prismaClientValidationError } from './utils';
1017

1118
/**
1219
* Gets an enhanced Prisma client that supports `@default(auth())` attribute.
@@ -143,7 +150,11 @@ class DefaultAuthHandler extends DefaultPrismaProxyHandler {
143150

144151
private getDefaultValueFromAuth(fieldInfo: FieldInfo) {
145152
if (!this.userContext) {
146-
throw new Error(`Evaluating default value of field \`${fieldInfo.name}\` requires a user context`);
153+
throw prismaClientValidationError(
154+
this.prisma,
155+
this.options.prismaModule,
156+
`Evaluating default value of field \`${fieldInfo.name}\` requires a user context`
157+
);
147158
}
148159
return fieldInfo.defaultValueProvider?.(this.userContext);
149160
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { isPrismaClientValidationError } from '@zenstackhq/runtime';
2+
import { loadSchema } from '@zenstackhq/testtools';
3+
4+
describe('issue 1596', () => {
5+
it('regression', async () => {
6+
const { enhance } = await loadSchema(
7+
`
8+
model User {
9+
id Int @id
10+
posts Post[]
11+
}
12+
13+
model Post {
14+
id Int @id
15+
title String
16+
author User @relation(fields: [authorId], references: [id])
17+
authorId Int @default(auth().id)
18+
}
19+
`
20+
);
21+
22+
const db = enhance();
23+
24+
try {
25+
await db.post.create({ data: { title: 'Post1' } });
26+
} catch (e) {
27+
// eslint-disable-next-line jest/no-conditional-expect
28+
expect(isPrismaClientValidationError(e)).toBe(true);
29+
return;
30+
}
31+
32+
throw new Error('Expected error');
33+
});
34+
});

0 commit comments

Comments
 (0)