Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 13 additions & 13 deletions e2e/tests/admin.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@ test.describe('Admin Panel', () => {
await page.goto('/admin');
await expect(page).toHaveURL(/\/admin/);
// Wait for stats grid to be visible — proves dashboard tab loaded with data
await page.waitForSelector('.stats-grid', { state: 'visible', timeout: 15000 });
await expect(page.locator('.stats-grid')).toBeVisible();
await expect(page.getByTestId('stats-grid')).toBeVisible({ timeout: 15000 });
await expect(page.getByTestId('stats-grid')).toBeVisible();
});

// ────────────────────────────────────────────
Expand Down Expand Up @@ -97,7 +97,7 @@ test.describe('Admin Panel', () => {

// Navigate and wait for stats to render
await page.goto('/admin');
await page.waitForSelector('.stats-grid', { state: 'visible', timeout: 15000 });
await expect(page.getByTestId('stats-grid')).toBeVisible({ timeout: 15000 });

// Stat values should be visible and numeric
const totalUsers = page.getByTestId('stat-users');
Expand Down Expand Up @@ -129,7 +129,7 @@ test.describe('Admin Panel', () => {

await api.setSession(page.context(), adminSession);
await page.goto('/admin');
await page.waitForSelector('.stats-grid', { state: 'visible', timeout: 15000 });
await expect(page.getByTestId('stats-grid')).toBeVisible({ timeout: 15000 });

// Switch to Users tab and wait for table rows to appear
await page.getByTestId('nav-users').click();
Expand Down Expand Up @@ -177,7 +177,7 @@ test.describe('Admin Panel', () => {

await api.setSession(page.context(), adminSession);
await page.goto('/admin');
await page.waitForSelector('.stats-grid', { state: 'visible', timeout: 15000 });
await expect(page.getByTestId('stats-grid')).toBeVisible({ timeout: 15000 });

// Navigate to Users tab and wait for table to load
await page.getByTestId('nav-users').click();
Expand Down Expand Up @@ -243,7 +243,7 @@ test.describe('Admin Panel', () => {

await api.setSession(page.context(), adminSession);
await page.goto('/admin');
await page.waitForSelector('.stats-grid', { state: 'visible', timeout: 15000 });
await expect(page.getByTestId('stats-grid')).toBeVisible({ timeout: 15000 });

// Navigate to Packages tab and wait for table rows
await page.getByTestId('nav-packages').click();
Expand Down Expand Up @@ -291,7 +291,7 @@ test.describe('Admin Panel', () => {

await api.setSession(page.context(), adminSession);
await page.goto('/admin');
await page.waitForSelector('.stats-grid', { state: 'visible', timeout: 15000 });
await expect(page.getByTestId('stats-grid')).toBeVisible({ timeout: 15000 });

// Navigate to Packages tab and wait for table rows
await page.getByTestId('nav-packages').click();
Expand Down Expand Up @@ -354,7 +354,7 @@ test.describe('Admin Panel', () => {

await api.setSession(page.context(), adminSession);
await page.goto('/admin');
await page.waitForSelector('.stats-grid', { state: 'visible', timeout: 15000 });
await expect(page.getByTestId('stats-grid')).toBeVisible({ timeout: 15000 });

// Switch to Audit Log tab
await page.getByTestId('nav-audit').click();
Expand All @@ -367,7 +367,7 @@ test.describe('Admin Panel', () => {
).toBeVisible({ timeout: 10000 });

// Wait for at least one entry to render
const entries = page.locator('[data-testid="audit-entry"]:visible');
const entries = page.getByTestId('audit-entry').filter({ visible: true });
await expect(entries.first()).toBeVisible({ timeout: 10000 });
const count = await entries.count();
expect(count).toBeGreaterThanOrEqual(1);
Expand Down Expand Up @@ -407,7 +407,7 @@ test.describe('Admin Panel', () => {

await api.setSession(page.context(), adminSession);
await page.goto('/admin');
await page.waitForSelector('.stats-grid', { state: 'visible', timeout: 15000 });
await expect(page.getByTestId('stats-grid')).toBeVisible({ timeout: 15000 });

// Switch to Reports tab and wait for report content to appear
await page.getByTestId('nav-reports').click();
Expand Down Expand Up @@ -455,7 +455,7 @@ test.describe('Admin Panel', () => {

await api.setSession(page.context(), adminSession);
await page.goto('/admin');
await page.waitForSelector('.stats-grid', { state: 'visible', timeout: 15000 });
await expect(page.getByTestId('stats-grid')).toBeVisible({ timeout: 15000 });

// Switch to Reports tab and wait for report content to appear
await page.getByTestId('nav-reports').click();
Expand Down Expand Up @@ -542,7 +542,7 @@ test.describe('Admin Panel', () => {

await api.setSession(page.context(), adminSession);
await page.goto('/admin');
await page.waitForSelector('.stats-grid', { state: 'visible', timeout: 15000 });
await expect(page.getByTestId('stats-grid')).toBeVisible({ timeout: 15000 });

// Navigate to Users tab
await page.getByTestId('nav-users').click();
Expand Down Expand Up @@ -657,7 +657,7 @@ test.describe('Admin Panel', () => {

await api.setSession(page.context(), adminSession);
await page.goto('/admin');
await page.waitForSelector('.stats-grid', { state: 'visible', timeout: 15000 });
await expect(page.getByTestId('stats-grid')).toBeVisible({ timeout: 15000 });

// Navigate to Users tab
await page.getByTestId('nav-users').click();
Expand Down
12 changes: 6 additions & 6 deletions e2e/tests/publisher.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ test.describe('Publisher — publish packages via API, verify on web UI', () =>
await publishPackage(request, apiToken, name, '1.0.0');

await authedPage.goto('/');
const recent = authedPage.locator('[data-testid="recent-packages"]');
const recent = authedPage.getByTestId('recent-packages');
await expect(recent).toContainText(name);
});

Expand All @@ -21,8 +21,8 @@ test.describe('Publisher — publish packages via API, verify on web UI', () =>
await publishPackage(request, apiToken, name, '1.0.0', description);

await authedPage.goto(`/packages/${name}`);
await expect(authedPage.locator('[data-testid="pkg-name"]')).toHaveText(name);
await expect(authedPage.locator('[data-testid="versions-table"]')).toContainText('1.0.0');
await expect(authedPage.getByTestId('pkg-name')).toHaveText(name);
await expect(authedPage.getByTestId('versions-table')).toContainText('1.0.0');
await expect(authedPage.locator('body')).toContainText(description);
});

Expand All @@ -36,7 +36,7 @@ test.describe('Publisher — publish packages via API, verify on web UI', () =>
await publishPackage(request, apiToken, name, '2.0.0');

await authedPage.goto(`/packages/${name}`);
const table = authedPage.locator('[data-testid="versions-table"]');
const table = authedPage.getByTestId('versions-table');
await expect(table).toContainText('1.0.0');
await expect(table).toContainText('2.0.0');
});
Expand All @@ -50,7 +50,7 @@ test.describe('Publisher — publish packages via API, verify on web UI', () =>
await publishPackage(request, apiToken, name, '1.0.0');

await authedPage.goto('/account');
const section = authedPage.locator('[data-testid="section-packages"]');
const section = authedPage.getByTestId('section-packages');
await expect(section).toContainText(name);
});

Expand All @@ -60,7 +60,7 @@ test.describe('Publisher — publish packages via API, verify on web UI', () =>
await yankVersion(request, apiToken, name, '1.0.0');

await authedPage.goto(`/packages/${name}`);
const table = authedPage.locator('[data-testid="versions-table"]');
const table = authedPage.getByTestId('versions-table');
await expect(table).toContainText('yanked');
});
});
42 changes: 21 additions & 21 deletions e2e/tests/tokens.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ test.describe('Tokens — API token CRUD lifecycle', () => {
test('generate token shows token value', async ({ authedPage }) => {
await authedPage.goto('/account');

await authedPage.locator('[data-testid="token-name-input"]').locator('input').fill('my-token');
await authedPage.locator('[data-testid="token-generate-btn"]').click();
await authedPage.getByTestId('token-name-input').locator('input').fill('my-token');
await authedPage.getByTestId('token-generate-btn').click();

const display = authedPage.locator('[data-testid="token-display"]');
const display = authedPage.getByTestId('token-display');
await expect(display).toBeVisible();
await expect(display).toContainText('sema_pat_');
});
Expand All @@ -16,12 +16,12 @@ test.describe('Tokens — API token CRUD lifecycle', () => {
await authedPage.goto('/account');

const tokenName = `list-token-${Date.now()}`;
await authedPage.locator('[data-testid="token-name-input"]').locator('input').fill(tokenName);
await authedPage.locator('[data-testid="token-generate-btn"]').click();
await authedPage.getByTestId('token-name-input').locator('input').fill(tokenName);
await authedPage.getByTestId('token-generate-btn').click();

await expect(authedPage.locator('[data-testid="token-display"]')).toBeVisible();
await expect(authedPage.getByTestId('token-display')).toBeVisible();

const row = authedPage.locator('[data-testid="token-row"]', { hasText: tokenName });
const row = authedPage.getByTestId('token-row').filter({ hasText: tokenName });
await expect(row).toBeVisible();
});

Expand All @@ -31,14 +31,14 @@ test.describe('Tokens — API token CRUD lifecycle', () => {
const name1 = `multi-a-${Date.now()}`;
const name2 = `multi-b-${Date.now()}`;

await authedPage.locator('[data-testid="token-name-input"]').locator('input').fill(name1);
await authedPage.locator('[data-testid="token-generate-btn"]').click();
await expect(authedPage.locator('[data-testid="token-display"]')).toBeVisible();
await authedPage.getByTestId('token-name-input').locator('input').fill(name1);
await authedPage.getByTestId('token-generate-btn').click();
await expect(authedPage.getByTestId('token-display')).toBeVisible();

await authedPage.locator('[data-testid="token-name-input"]').locator('input').fill(name2);
await authedPage.locator('[data-testid="token-generate-btn"]').click();
await authedPage.getByTestId('token-name-input').locator('input').fill(name2);
await authedPage.getByTestId('token-generate-btn').click();

const rows = authedPage.locator('[data-testid="token-row"]');
const rows = authedPage.getByTestId('token-row');
// The apiToken fixture also created one, so we check for our two by name
await expect(rows.filter({ hasText: name1 })).toBeVisible();
await expect(rows.filter({ hasText: name2 })).toBeVisible();
Expand All @@ -48,11 +48,11 @@ test.describe('Tokens — API token CRUD lifecycle', () => {
await authedPage.goto('/account');

const tokenName = `revoke-token-${Date.now()}`;
await authedPage.locator('[data-testid="token-name-input"]').locator('input').fill(tokenName);
await authedPage.locator('[data-testid="token-generate-btn"]').click();
await expect(authedPage.locator('[data-testid="token-display"]')).toBeVisible();
await authedPage.getByTestId('token-name-input').locator('input').fill(tokenName);
await authedPage.getByTestId('token-generate-btn').click();
await expect(authedPage.getByTestId('token-display')).toBeVisible();

const row = authedPage.locator('[data-testid="token-row"]', { hasText: tokenName });
const row = authedPage.getByTestId('token-row').filter({ hasText: tokenName });
await expect(row).toBeVisible();

// Auto-accept the confirm() dialog before clicking Revoke
Expand All @@ -66,11 +66,11 @@ test.describe('Tokens — API token CRUD lifecycle', () => {
await authedPage.goto('/account');

const tokenName = `exact-name-${Date.now()}`;
await authedPage.locator('[data-testid="token-name-input"]').locator('input').fill(tokenName);
await authedPage.locator('[data-testid="token-generate-btn"]').click();
await expect(authedPage.locator('[data-testid="token-display"]')).toBeVisible();
await authedPage.getByTestId('token-name-input').locator('input').fill(tokenName);
await authedPage.getByTestId('token-generate-btn').click();
await expect(authedPage.getByTestId('token-display')).toBeVisible();

const row = authedPage.locator('[data-testid="token-row"]', { hasText: tokenName });
const row = authedPage.getByTestId('token-row').filter({ hasText: tokenName });
await expect(row).toBeVisible();
await expect(row).toContainText(tokenName);
});
Expand Down
2 changes: 1 addition & 1 deletion templates/admin.html
Original file line number Diff line number Diff line change
Expand Up @@ -489,7 +489,7 @@
<h1 class="page-title" data-testid="page-title">Dashboard</h1>
<p class="page-desc">Registry overview and recent activity</p>

<div class="stats-grid">
<div class="stats-grid" data-testid="stats-grid">
<div class="stat-card">
<div class="stat-label">Total Users</div>
<div class="stat-value" data-testid="stat-users" x-text="stats.total_users"></div>
Expand Down