skillhub/web/e2e/search-flow.spec.ts
dongmucat 50a6c4b7fe test(e2e,ci): migrate web e2e to real API and add PR e2e workflow (#198)
* chore(workflow): align local hooks and e2e guidance

* test(e2e): expand reusable api mock helpers

* test(skill): stabilize share button e2e assertions

* chore(test): add e2e make target and tune playwright workers

* test(web): expand e2e coverage and smoke suite

* test(e2e): migrate to real API flows and add request-based data builder

* ci(e2e): add PR workflow for real-service frontend e2e

* ci(e2e): install playwright chromium in PR workflow

* test(e2e): relax timeout and force single worker in CI

* test(e2e): stabilize not-found assertions and harden CI session bootstrap

* chore(agents): align tester role with web/e2e workflow
2026-04-01 14:41:23 +08:00

25 lines
1.2 KiB
TypeScript

import { expect, test } from '@playwright/test'
import { setEnglishLocale } from './helpers/auth-fixtures'
test.describe('Search Flow (Real API)', () => {
test.beforeEach(async ({ page }) => {
await setEnglishLocale(page)
})
test('renders search controls and keeps query state in URL', async ({ page }) => {
await page.goto('/search?q=agent&sort=downloads&page=0&starredOnly=false')
await expect(page).toHaveURL('/search?q=agent&sort=downloads&page=0&starredOnly=false')
await expect(page.getByRole('button', { name: 'Relevance' })).toBeVisible()
await expect(page.getByRole('button', { name: 'Downloads' })).toBeVisible()
await expect(page.getByRole('button', { name: 'Newest' })).toBeVisible()
await expect(page.getByRole('button', { name: 'Starred only' })).toBeVisible()
})
test('redirects anonymous user to login when enabling starred filter', async ({ page }) => {
await page.goto('/search?q=agent&sort=relevance&page=0&starredOnly=false')
await page.getByRole('button', { name: 'Starred only' }).click()
await expect(page).toHaveURL(/\/login\?returnTo=%2Fsearch%3Fq%3Dagent%26sort%3Drelevance%26page%3D0%26starredOnly%3Dfalse$/)
})
})