Skip to content

Commit 2db1c4d

Browse files
committed
test: add e2e test for package@version search navigation
1 parent 9977171 commit 2db1c4d

File tree

1 file changed

+81
-0
lines changed

1 file changed

+81
-0
lines changed

test/e2e/search-at-version.spec.ts

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
import { expect, test } from './test-utils'
2+
3+
test.describe('Search pkg@version navigation', () => {
4+
test('esbuild@0.25.12 → navigates to exact version page', async ({ page, goto }) => {
5+
await goto('/search', { waitUntil: 'hydration' })
6+
7+
const searchInput = page.locator('input[type="search"]')
8+
await searchInput.fill('esbuild@0.25.12')
9+
await page.keyboard.press('Enter')
10+
11+
await expect(page).toHaveURL(/\/package\/esbuild\/v\/0\.25\.12/)
12+
})
13+
14+
test('@angular/core@18.0.0 → navigates to scoped exact version page', async ({ page, goto }) => {
15+
await goto('/search', { waitUntil: 'hydration' })
16+
17+
const searchInput = page.locator('input[type="search"]')
18+
await searchInput.fill('@angular/core@18.0.0')
19+
await page.keyboard.press('Enter')
20+
21+
await expect(page).toHaveURL(/\/package\/@angular\/core\/v\/18\.0\.0/)
22+
})
23+
24+
test('react@^18.0.0 → navigates to package page with semver filter', async ({ page, goto }) => {
25+
await goto('/search', { waitUntil: 'hydration' })
26+
27+
const searchInput = page.locator('input[type="search"]')
28+
await searchInput.fill('react@^18.0.0')
29+
await page.keyboard.press('Enter')
30+
31+
await expect(page).toHaveURL(/\/package\/react\?semver=/)
32+
await expect(page).toHaveURL(/#versions/)
33+
})
34+
35+
test('@angular/core@^18 || ^19 → navigates to package page with semver filter', async ({
36+
page,
37+
goto,
38+
}) => {
39+
await goto('/search', { waitUntil: 'hydration' })
40+
41+
const searchInput = page.locator('input[type="search"]')
42+
await searchInput.fill('@angular/core@^18 || ^19')
43+
await page.keyboard.press('Enter')
44+
45+
await expect(page).toHaveURL(/\/package\/@angular\/core\?semver=/)
46+
await expect(page).toHaveURL(/#versions/)
47+
})
48+
49+
test('nuxt@latest → navigates to package page with semver filter for dist-tag', async ({
50+
page,
51+
goto,
52+
}) => {
53+
await goto('/search', { waitUntil: 'hydration' })
54+
55+
const searchInput = page.locator('input[type="search"]')
56+
await searchInput.fill('nuxt@latest')
57+
await page.keyboard.press('Enter')
58+
59+
await expect(page).toHaveURL(/\/package\/nuxt\?semver=latest/)
60+
await expect(page).toHaveURL(/#versions/)
61+
})
62+
63+
test('plain package name without @ version → does not trigger version navigation', async ({
64+
page,
65+
goto,
66+
}) => {
67+
await goto('/search?q=vue', { waitUntil: 'hydration' })
68+
69+
// Wait for search results to load
70+
await expect(page.locator('text=/found \\d+|showing \\d+/i').first()).toBeVisible({
71+
timeout: 15000,
72+
})
73+
74+
const searchInput = page.locator('input[type="search"]')
75+
await searchInput.focus()
76+
await page.keyboard.press('Enter')
77+
78+
// Should navigate to the package page (exact match), not a version page
79+
await expect(page).toHaveURL(/\/package\/vue$/)
80+
})
81+
})

0 commit comments

Comments
 (0)