Skip to content

Commit 84a698f

Browse files
committed
fix(tests): remove autoincrement and move m2m guard before policy check
1 parent 934d719 commit 84a698f

2 files changed

Lines changed: 27 additions & 27 deletions

File tree

packages/plugins/policy/src/policy-handler.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,11 +288,11 @@ export class PolicyHandler<Schema extends SchemaDef> extends OperationNodeTransf
288288
whereCondition: OperationNode | undefined,
289289
proceed: ProceedKyselyQueryFunction,
290290
) {
291+
if (this.isManyToManyJoinTable(model)) return;
291292
if (this.tryGetConstantPolicy(model, operation) === true) return;
292293
if (this.options.fetchPolicyCodes === false) return;
293294
const policiesWithCode = this.getModelPolicies(model, operation).filter((p) => p.code);
294295
if (policiesWithCode.length === 0) return;
295-
if (this.isManyToManyJoinTable(model)) return;
296296

297297
// No WHERE clause means "match all rows" — use a literal TRUE so the existence sub-query is valid SQL.
298298
const where = whereCondition ?? trueNode(this.dialect);

tests/e2e/orm/policy/crud/error-codes.test.ts

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -669,7 +669,7 @@ model Foo {
669669
const db = await createPolicyTestClient(
670670
`
671671
model Foo {
672-
id Int @id @default(autoincrement())
672+
id Int @id
673673
x Int
674674
y Int
675675
@@deny('create', y <= 0, 'NEGATIVE_Y_CREATE')
@@ -685,34 +685,34 @@ model Foo {
685685
`,
686686
);
687687
// create: flag suppresses codes (y=0 triggers deny)
688-
await expect(db.foo.create({ data: { x: 1, y: 0 }, fetchPolicyCodes: false })).toBeRejectedByPolicy(
688+
await expect(db.foo.create({ data: { id: 1, x: 1, y: 0 }, fetchPolicyCodes: false })).toBeRejectedByPolicy(
689689
undefined,
690690
[],
691691
);
692692
// create: without flag, codes surface
693-
await expect(db.foo.create({ data: { x: 1, y: 0 } })).toBeRejectedByPolicy(undefined, ['NEGATIVE_Y_CREATE']);
694-
const row = await db.foo.create({ data: { x: 1, y: 1 } });
695-
const negRow = await db.$unuseAll().foo.create({ data: { x: -1, y: 1 } });
693+
await expect(db.foo.create({ data: { id: 2, x: 1, y: 0 } })).toBeRejectedByPolicy(undefined, ['NEGATIVE_Y_CREATE']);
694+
await db.foo.create({ data: { id: 3, x: 1, y: 1 } });
695+
await db.$unuseAll().foo.create({ data: { id: 4, x: -1, y: 1 } });
696696
// read: flag skips diagnostic query entirely → null (filter-based, same as no codes)
697-
await expect(db.foo.findFirst({ where: { id: negRow.id }, fetchPolicyCodes: false })).resolves.toBeNull();
697+
await expect(db.foo.findFirst({ where: { id: 4 }, fetchPolicyCodes: false })).resolves.toBeNull();
698698
// read: without flag, codes surface
699-
await expect(db.foo.findFirst({ where: { id: negRow.id } })).toBeRejectedByPolicy(undefined, ['NEGATIVE_X_READ']);
699+
await expect(db.foo.findFirst({ where: { id: 4 } })).toBeRejectedByPolicy(undefined, ['NEGATIVE_X_READ']);
700700
// update: flag skips diagnostic query entirely → NOT_FOUND (same as no codes defined)
701-
await expect(db.foo.update({ where: { id: negRow.id }, data: { x: 0 }, fetchPolicyCodes: false })).toBeRejectedNotFound();
701+
await expect(db.foo.update({ where: { id: 4 }, data: { x: 0 }, fetchPolicyCodes: false })).toBeRejectedNotFound();
702702
// update: without flag, codes surface
703-
await expect(db.foo.update({ where: { id: negRow.id }, data: { x: 0 } })).toBeRejectedByPolicy(undefined, [
703+
await expect(db.foo.update({ where: { id: 4 }, data: { x: 0 } })).toBeRejectedByPolicy(undefined, [
704704
'NEGATIVE_X_UPDATE',
705705
]);
706706
// delete: flag skips diagnostic query entirely → NOT_FOUND
707-
await expect(db.foo.delete({ where: { id: negRow.id }, fetchPolicyCodes: false })).toBeRejectedNotFound();
707+
await expect(db.foo.delete({ where: { id: 4 }, fetchPolicyCodes: false })).toBeRejectedNotFound();
708708
// delete: without flag, codes surface
709-
await expect(db.foo.delete({ where: { id: negRow.id } })).toBeRejectedByPolicy(undefined, ['NEGATIVE_X_DELETE']);
709+
await expect(db.foo.delete({ where: { id: 4 } })).toBeRejectedByPolicy(undefined, ['NEGATIVE_X_DELETE']);
710710
// post-update: flag suppresses codes
711711
await expect(
712-
db.foo.update({ where: { id: row.id }, data: { x: -1 }, fetchPolicyCodes: false }),
712+
db.foo.update({ where: { id: 3 }, data: { x: -1 }, fetchPolicyCodes: false }),
713713
).toBeRejectedByPolicy(undefined, []);
714714
// post-update: without flag, codes surface
715-
await expect(db.foo.update({ where: { id: row.id }, data: { x: -1 } })).toBeRejectedByPolicy(undefined, [
715+
await expect(db.foo.update({ where: { id: 3 }, data: { x: -1 } })).toBeRejectedByPolicy(undefined, [
716716
'NEGATIVE_AFTER_UPDATE',
717717
]);
718718
});
@@ -761,7 +761,7 @@ model Foo {
761761
const db = await createTestClient(
762762
`
763763
model Foo {
764-
id Int @id @default(autoincrement())
764+
id Int @id
765765
x Int
766766
y Int
767767
@@deny('create', y <= 0, 'NEGATIVE_Y_CREATE')
@@ -778,37 +778,37 @@ model Foo {
778778
{ plugins: [new PolicyPlugin({ fetchPolicyCodes: false })] },
779779
);
780780
// create: query-level true re-enables codes despite plugin false
781-
await expect(db.foo.create({ data: { x: 1, y: 0 }, fetchPolicyCodes: true })).toBeRejectedByPolicy(undefined, [
781+
await expect(db.foo.create({ data: { id: 1, x: 1, y: 0 }, fetchPolicyCodes: true })).toBeRejectedByPolicy(undefined, [
782782
'NEGATIVE_Y_CREATE',
783783
]);
784784
// create: without override, codes are suppressed
785-
await expect(db.foo.create({ data: { x: 1, y: 0 } })).toBeRejectedByPolicy(undefined, []);
786-
const row = await db.foo.create({ data: { x: 1, y: 1 } });
787-
const negRow = await db.$unuseAll().foo.create({ data: { x: -1, y: 1 } });
785+
await expect(db.foo.create({ data: { id: 2, x: 1, y: 0 } })).toBeRejectedByPolicy(undefined, []);
786+
await db.foo.create({ data: { id: 3, x: 1, y: 1 } });
787+
await db.$unuseAll().foo.create({ data: { id: 4, x: -1, y: 1 } });
788788
// read: query-level true re-enables codes despite plugin false
789-
await expect(db.foo.findFirst({ where: { id: negRow.id }, fetchPolicyCodes: true })).toBeRejectedByPolicy(undefined, [
789+
await expect(db.foo.findFirst({ where: { id: 4 }, fetchPolicyCodes: true })).toBeRejectedByPolicy(undefined, [
790790
'NEGATIVE_X_READ',
791791
]);
792792
// read: without override, codes are suppressed → null (filter-based)
793-
await expect(db.foo.findFirst({ where: { id: negRow.id } })).resolves.toBeNull();
793+
await expect(db.foo.findFirst({ where: { id: 4 } })).resolves.toBeNull();
794794
// update: query-level true re-enables codes despite plugin false
795-
await expect(db.foo.update({ where: { id: negRow.id }, data: { x: 0 }, fetchPolicyCodes: true })).toBeRejectedByPolicy(
795+
await expect(db.foo.update({ where: { id: 4 }, data: { x: 0 }, fetchPolicyCodes: true })).toBeRejectedByPolicy(
796796
undefined,
797797
['NEGATIVE_X_UPDATE'],
798798
);
799799
// update: without override, codes are suppressed
800-
await expect(db.foo.update({ where: { id: negRow.id }, data: { x: 0 } })).toBeRejectedNotFound();
800+
await expect(db.foo.update({ where: { id: 4 }, data: { x: 0 } })).toBeRejectedNotFound();
801801
// delete: query-level true re-enables codes despite plugin false
802-
await expect(db.foo.delete({ where: { id: negRow.id }, fetchPolicyCodes: true })).toBeRejectedByPolicy(undefined, [
802+
await expect(db.foo.delete({ where: { id: 4 }, fetchPolicyCodes: true })).toBeRejectedByPolicy(undefined, [
803803
'NEGATIVE_X_DELETE',
804804
]);
805805
// delete: without override, codes are suppressed
806-
await expect(db.foo.delete({ where: { id: negRow.id } })).toBeRejectedNotFound();
806+
await expect(db.foo.delete({ where: { id: 4 } })).toBeRejectedNotFound();
807807
// post-update: query-level true re-enables codes despite plugin false
808808
await expect(
809-
db.foo.update({ where: { id: row.id }, data: { x: -1 }, fetchPolicyCodes: true }),
809+
db.foo.update({ where: { id: 3 }, data: { x: -1 }, fetchPolicyCodes: true }),
810810
).toBeRejectedByPolicy(undefined, ['NEGATIVE_AFTER_UPDATE']);
811811
// post-update: without override, codes are suppressed and we get a policy rejection without codes (not NotFound)
812-
await expect(db.foo.update({ where: { id: row.id }, data: { x: -1 } })).toBeRejectedByPolicy(undefined, []);
812+
await expect(db.foo.update({ where: { id: 3 }, data: { x: -1 } })).toBeRejectedByPolicy(undefined, []);
813813
});
814814
});

0 commit comments

Comments
 (0)