import { describe, it, expect } from 'vitest'; import { readFileSync } from 'fs'; import { resolve } from 'path'; import { config } from 'dotenv'; config({ path: resolve(__dirname, '../../.env') }); const WORKER_URL = process.env.PUBLIC_WORKER_URL; const UPLOAD_SECRET = process.env.PUBLIC_UPLOAD_SECRET; const IMAGE = readFileSync(resolve(__dirname, '../../pictures/image2.png')); describe('Worker auth', () => { it('rejects request with no auth header', async () => { const res = await fetch(`${WORKER_URL}/presign?filename=image2.png`, { signal: AbortSignal.timeout(5000), }); expect(res.status).toBe(401); }); it('rejects request with wrong secret', async () => { const res = await fetch(`${WORKER_URL}/presign?filename=image2.png`, { headers: { Authorization: 'Bearer wrong-secret' }, signal: AbortSignal.timeout(5000), }); expect(res.status).toBe(401); }); }); describe('Presign endpoint', () => { it('returns 400 when filename is missing', async () => { const res = await fetch(`${WORKER_URL}/presign`, { headers: { Authorization: `Bearer ${UPLOAD_SECRET}` }, }); expect(res.status).toBe(400); }); it('returns a presigned URL and key', async () => { const res = await fetch(`${WORKER_URL}/presign?filename=image2.png`, { headers: { Authorization: `Bearer ${UPLOAD_SECRET}` }, }); expect(res.status).toBe(200); const body = await res.json(); expect(body.url).toMatch(/^https:\/\/.+r2\.cloudflarestorage\.com/); expect(body.key).toMatch(/^videos\/.+image2\.png$/); }); }); describe('R2 upload', () => { it('uploads image2.png successfully', async () => { const presignRes = await fetch(`${WORKER_URL}/presign?filename=image2.png`, { headers: { Authorization: `Bearer ${UPLOAD_SECRET}` }, }); const { url } = await presignRes.json(); const uploadRes = await fetch(url, { method: 'PUT', headers: { 'Content-Type': 'image/png' }, body: IMAGE, }); expect(uploadRes.status).toBe(200); }); });