| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- import { and, eq } from 'drizzle-orm';
- import { db } from '../src/db';
- import { permissions, rolePermissions, roles, users } from '../src/db/schema/auth';
- import { aclRules, resources } from '../src/db/schema/resource';
- async function runTest() {
- console.log('🛡️ Testing permission administration data flow...');
- const suffix = Date.now();
- const [permission] = await db.insert(permissions).values({
- action: `read-${suffix}`,
- resourceType: 'video',
- }).returning();
- let resourceId: string | null = null;
- try {
- const [viewerRole] = await db.select().from(roles).where(eq(roles.name, 'viewer')).limit(1);
- const [tester] = await db.select().from(users).where(eq(users.email, 'tester@ekb.com')).limit(1);
- if (!viewerRole || !tester) {
- throw new Error('Required seed data missing. Run npx tsx src/db/seed.ts first.');
- }
- await db.insert(rolePermissions).values({
- roleId: viewerRole.id,
- permissionId: permission.id,
- }).onConflictDoNothing();
- const [rolePermission] = await db.select().from(rolePermissions).where(and(
- eq(rolePermissions.roleId, viewerRole.id),
- eq(rolePermissions.permissionId, permission.id),
- )).limit(1);
- const [resource] = await db.insert(resources).values({
- name: `permission-admin-${suffix}.mp4`,
- path: `/permission-admin/${suffix}.mp4`,
- type: 'file',
- }).returning();
- resourceId = resource.id;
- const [aclRule] = await db.insert(aclRules).values({
- resourceId: resource.id,
- subjectType: 'user',
- subjectId: tester.id,
- permissionType: 'deny',
- action: 'read',
- }).returning();
- await db.delete(aclRules).where(eq(aclRules.id, aclRule.id));
- const [deletedAcl] = await db.select().from(aclRules).where(eq(aclRules.id, aclRule.id)).limit(1);
- if (!rolePermission || deletedAcl) {
- throw new Error('Permission admin data flow failed.');
- }
- } finally {
- await db.delete(rolePermissions).where(eq(rolePermissions.permissionId, permission.id));
- await db.delete(permissions).where(eq(permissions.id, permission.id));
- if (resourceId) {
- await db.delete(resources).where(eq(resources.id, resourceId));
- }
- }
- console.log('✅ Permission administration data flow passed.');
- process.exit(0);
- }
- runTest().catch((error) => {
- console.error('❌ Test failed with error:', error);
- process.exit(1);
- });
|