test-permission-admin.ts 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import { and, eq } from 'drizzle-orm';
  2. import { db } from '../src/db';
  3. import { permissions, rolePermissions, roles, users } from '../src/db/schema/auth';
  4. import { aclRules, resources } from '../src/db/schema/resource';
  5. async function runTest() {
  6. console.log('🛡️ Testing permission administration data flow...');
  7. const suffix = Date.now();
  8. const [permission] = await db.insert(permissions).values({
  9. action: `read-${suffix}`,
  10. resourceType: 'video',
  11. }).returning();
  12. const [viewerRole] = await db.select().from(roles).where(eq(roles.name, 'viewer')).limit(1);
  13. const [tester] = await db.select().from(users).where(eq(users.email, 'tester@ekb.com')).limit(1);
  14. if (!viewerRole || !tester) {
  15. console.error('❌ Required seed data missing. Run npx tsx src/db/seed.ts first.');
  16. process.exit(1);
  17. }
  18. await db.insert(rolePermissions).values({
  19. roleId: viewerRole.id,
  20. permissionId: permission.id,
  21. }).onConflictDoNothing();
  22. const [rolePermission] = await db.select().from(rolePermissions).where(and(
  23. eq(rolePermissions.roleId, viewerRole.id),
  24. eq(rolePermissions.permissionId, permission.id),
  25. )).limit(1);
  26. const [resource] = await db.insert(resources).values({
  27. name: `permission-admin-${suffix}.mp4`,
  28. path: `/permission-admin/${suffix}.mp4`,
  29. type: 'file',
  30. }).returning();
  31. const [aclRule] = await db.insert(aclRules).values({
  32. resourceId: resource.id,
  33. subjectType: 'user',
  34. subjectId: tester.id,
  35. permissionType: 'deny',
  36. action: 'read',
  37. }).returning();
  38. await db.delete(aclRules).where(eq(aclRules.id, aclRule.id));
  39. const [deletedAcl] = await db.select().from(aclRules).where(eq(aclRules.id, aclRule.id)).limit(1);
  40. if (!rolePermission || deletedAcl) {
  41. console.error('❌ Permission admin data flow failed.');
  42. process.exit(1);
  43. }
  44. console.log('✅ Permission administration data flow passed.');
  45. process.exit(0);
  46. }
  47. runTest().catch((error) => {
  48. console.error('❌ Test failed with error:', error);
  49. process.exit(1);
  50. });