| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- import { eq } from 'drizzle-orm';
- import { getMediaStatus } from '../src/actions/media';
- import { db } from '../src/db';
- import { users } from '../src/db/schema/auth';
- import { media } from '../src/db/schema/media';
- import { resources } from '../src/db/schema/resource';
- async function upsertUser(email: string, name: string) {
- const [existing] = await db.select().from(users).where(eq(users.email, email)).limit(1);
- if (existing) {
- return existing;
- }
- const [created] = await db.insert(users).values({
- email,
- name,
- passwordHash: 'test_password_hash',
- }).returning();
- return created;
- }
- async function runTest() {
- console.log('🔐 Testing media permission checks...');
- const owner = await upsertUser('media-owner@ekb.com', 'Media Owner');
- const outsider = await upsertUser('media-outsider@ekb.com', 'Media Outsider');
- const [latestCompletedMedia] = await db
- .select()
- .from(media)
- .where(eq(media.status, 'completed'))
- .limit(1);
- if (!latestCompletedMedia?.metadata) {
- console.error('❌ No completed media found. Run npm run test:media-pipeline first.');
- process.exit(1);
- }
- const pathSuffix = `${Date.now()}-permission-test.mp4`;
- const [resource] = await db.insert(resources).values({
- name: 'permission-test.mp4',
- path: `/media/${pathSuffix}`,
- type: 'file',
- ownerId: owner.id,
- }).returning();
- const [ownedMedia] = await db.insert(media).values({
- resourceId: resource.id,
- filename: 'permission-test.mp4',
- storageKey: `uploads/${pathSuffix}`,
- mimeType: 'video/mp4',
- size: BigInt(1),
- status: 'completed',
- metadata: latestCompletedMedia.metadata,
- }).returning();
- const ownerStatus = await getMediaStatus(ownedMedia.id, {
- auth: { userId: owner.id, groupIds: [] },
- });
- if (!ownerStatus?.hlsUrl) {
- console.error('❌ Owner did not receive playback URL.');
- process.exit(1);
- }
- try {
- await getMediaStatus(ownedMedia.id, {
- auth: { userId: outsider.id, groupIds: [] },
- });
- console.error('❌ Outsider unexpectedly received media access.');
- process.exit(1);
- } catch (error) {
- const message = error instanceof Error ? error.message : String(error);
- if (!message.includes('No matching permission')) {
- throw error;
- }
- }
- console.log('✅ Media permission checks passed.');
- process.exit(0);
- }
- runTest().catch((error) => {
- console.error('❌ Test failed with error:', error);
- process.exit(1);
- });
|