118 lines
4.2 KiB
TypeScript
118 lines
4.2 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
|
|
test.describe('Transcoding Dashboard', () => {
|
|
test.beforeEach(async ({ page }) => {
|
|
// Login
|
|
await page.goto('http://localhost:5173/login');
|
|
await page.fill('input[type="email"]', 'test@example.com');
|
|
await page.fill('input[type="password"]', 'Test1234!');
|
|
await page.click('button[type="submit"]');
|
|
await page.waitForURL('**/dashboard');
|
|
});
|
|
|
|
test('should navigate to transcoding dashboard', async ({ page }) => {
|
|
await page.goto('http://localhost:5173/transcoding');
|
|
await expect(page.locator('h1')).toContainText('Transcoding Dashboard');
|
|
});
|
|
|
|
test('should display statistics cards', async ({ page }) => {
|
|
await page.goto('http://localhost:5173/transcoding');
|
|
|
|
// Check all 5 stat cards
|
|
await expect(page.locator('text=Total Jobs')).toBeVisible();
|
|
await expect(page.locator('text=Pending')).toBeVisible();
|
|
await expect(page.locator('text=Processing')).toBeVisible();
|
|
await expect(page.locator('text=Completed')).toBeVisible();
|
|
await expect(page.locator('text=Failed')).toBeVisible();
|
|
});
|
|
|
|
test('should open create job dialog', async ({ page }) => {
|
|
await page.goto('http://localhost:5173/transcoding');
|
|
|
|
// Click "New Job"
|
|
await page.click('button:has-text("New Job")');
|
|
|
|
// Verify dialog opened
|
|
await expect(page.locator('text=Create Transcoding Job')).toBeVisible();
|
|
await expect(page.locator('select[id="track"]')).toBeVisible();
|
|
await expect(page.locator('select[id="quality"]')).toBeVisible();
|
|
});
|
|
|
|
test('should create transcoding job', async ({ page }) => {
|
|
await page.goto('http://localhost:5173/transcoding');
|
|
|
|
// Open dialog
|
|
await page.click('button:has-text("New Job")');
|
|
|
|
// Select track (if available)
|
|
const trackSelect = page.locator('select[id="track"]');
|
|
const options = await trackSelect.locator('option').count();
|
|
|
|
if (options > 1) { // Has tracks besides placeholder
|
|
await trackSelect.selectOption({ index: 1 });
|
|
|
|
// Select quality
|
|
await page.selectOption('select[id="quality"]', 'medium');
|
|
|
|
// Submit
|
|
await page.click('button:has-text("Submit Job")');
|
|
|
|
// Verify job created
|
|
await expect(page.locator('text=Job submitted')).toBeVisible({ timeout: 5000 });
|
|
}
|
|
});
|
|
|
|
test('should display performance metrics', async ({ page }) => {
|
|
await page.goto('http://localhost:5173/transcoding');
|
|
|
|
// Scroll to metrics section
|
|
await page.locator('text=Performance Metrics').scrollIntoViewIfNeeded();
|
|
|
|
// Check metrics are visible
|
|
await expect(page.locator('text=Success Rate')).toBeVisible();
|
|
await expect(page.locator('text=Avg Processing Time')).toBeVisible();
|
|
await expect(page.locator('text=Queue Health')).toBeVisible();
|
|
});
|
|
|
|
test('should refresh statistics', async ({ page }) => {
|
|
await page.goto('http://localhost:5173/transcoding');
|
|
|
|
// Click refresh button
|
|
await page.click('button:has-text("Refresh")');
|
|
|
|
// Should still show dashboard (no error)
|
|
await expect(page.locator('h1')).toContainText('Transcoding Dashboard');
|
|
});
|
|
|
|
test('should display quality estimation', async ({ page }) => {
|
|
await page.goto('http://localhost:5173/transcoding');
|
|
|
|
await page.click('button:has-text("New Job")');
|
|
|
|
// Select different qualities and check estimation
|
|
const qualities = ['low', 'medium', 'high', 'lossless'];
|
|
|
|
for (const quality of qualities) {
|
|
await page.selectOption('select[id="quality"]', quality);
|
|
await expect(page.locator('text=Estimated Processing Time')).toBeVisible();
|
|
}
|
|
});
|
|
|
|
test('should show job progress bars', async ({ page }) => {
|
|
await page.goto('http://localhost:5173/transcoding');
|
|
|
|
// Check if any jobs are shown
|
|
const jobsList = page.locator('text=Recent Jobs');
|
|
await expect(jobsList).toBeVisible();
|
|
|
|
// If jobs exist, check for progress indicators
|
|
const processingJobs = page.locator('[data-status="processing"]');
|
|
const count = await processingJobs.count();
|
|
|
|
if (count > 0) {
|
|
// Should have progress bar
|
|
await expect(processingJobs.first().locator('[role="progressbar"]')).toBeVisible();
|
|
}
|
|
});
|
|
});
|
|
|