import { test, expect } from '@playwright/test'; import { registerAndLogin, textFile } from './helpers'; // every test runs as a fresh logged-in user, so the file list starts empty // and tests never see each other's files (the list is per-user on the backend). test.beforeEach(async ({ page }) => { await registerAndLogin(page); await page.goto('/'); }); test('a new user sees the empty state', async ({ page }) => { await expect(page.getByText('No files yet.')).toBeVisible(); }); test('uploading a file shows it in the list', async ({ page }) => { await page.locator('input[type="file"]').setInputFiles(textFile('hello.txt')); await expect(page.getByText('hello.txt')).toBeVisible(); }); test('downloading a file triggers a download', async ({ page }) => { await page.locator('input[type="file"]').setInputFiles(textFile('report.txt')); await expect(page.getByText('report.txt')).toBeVisible(); const downloadPromise = page.waitForEvent('download'); await page.locator('[title="Download"]').first().click(); const download = await downloadPromise; expect(download.suggestedFilename()).toBe('report.txt'); }); test('deleting a file with confirmation removes it', async ({ page }) => { await page.locator('input[type="file"]').setInputFiles(textFile('trash.txt')); await expect(page.getByText('trash.txt')).toBeVisible(); await page.locator('[title="Delete"]').first().click(); await expect(page.getByText('Confirm action')).toBeVisible(); await page.locator('[title="Confirm"]').click(); await expect(page.getByText('trash.txt')).toHaveCount(0); }); test('search filters the file list', async ({ page }) => { const input = page.locator('input[type="file"]'); await input.setInputFiles(textFile('alpha.txt')); await expect(page.getByText('alpha.txt')).toBeVisible(); await input.setInputFiles(textFile('bravo.txt')); await expect(page.getByText('bravo.txt')).toBeVisible(); await page.getByPlaceholder('Search files...').fill('alpha'); await expect(page.getByText('alpha.txt')).toBeVisible(); await expect(page.getByText('bravo.txt')).toHaveCount(0); }); test('previewing a video opens the player', async ({ page }) => { await page.locator('input[type="file"]').setInputFiles({ name: 'clip.mp4', mimeType: 'video/mp4', buffer: Buffer.from('fake mp4 bytes') }); await expect(page.getByText('clip.mp4')).toBeVisible(); await page.getByText('clip.mp4').dblclick(); await expect(page.getByRole('button', { name: 'Close' })).toBeVisible(); await expect(page.locator('video')).toHaveCount(1); await page.keyboard.press('Escape'); await expect(page.getByRole('button', { name: 'Close' })).toHaveCount(0); }); test('previewing a non-video shows no preview available', async ({ page }) => { await page.locator('input[type="file"]').setInputFiles(textFile('notes.txt')); await expect(page.getByText('notes.txt')).toBeVisible(); await page.getByText('notes.txt').dblclick(); await expect(page.getByText('No preview available')).toBeVisible(); await page.keyboard.press('Escape'); await expect(page.getByText('No preview available')).toHaveCount(0); });