From 3aec6a448f4b79c5e5b24a1e4bcbfa0844e02fca Mon Sep 17 00:00:00 2001 From: huzhe01 Date: Fri, 4 Sep 2026 16:48:26 +0800 Subject: [PATCH] fix(frontend): correct global search result routes --- .github/workflows/build_frontend.yml | 4 ++++ frontend/lib/utils/search-data.test.ts | 19 +++++++++++++++++++ frontend/lib/utils/search-data.ts | 6 +++--- frontend/package.json | 4 +++- frontend/pnpm-lock.yaml | 3 +++ 5 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 frontend/lib/utils/search-data.test.ts diff --git a/.github/workflows/build_frontend.yml b/.github/workflows/build_frontend.yml index 22e8d969..d98fd984 100644 --- a/.github/workflows/build_frontend.yml +++ b/.github/workflows/build_frontend.yml @@ -31,6 +31,10 @@ jobs: working-directory: frontend run: pnpm install --frozen-lockfile + - name: Test + working-directory: frontend + run: pnpm test + - name: Build working-directory: frontend run: pnpm build diff --git a/frontend/lib/utils/search-data.test.ts b/frontend/lib/utils/search-data.test.ts new file mode 100644 index 00000000..5d7ca84d --- /dev/null +++ b/frontend/lib/utils/search-data.test.ts @@ -0,0 +1,19 @@ +import assert from "node:assert/strict" +import test from "node:test" + +import { searchItems } from "./search-data" + +const routeCases = [ + { query: "积分配置", isAdmin: true, expectedUrl: "/admin/credit" }, + { query: "通知设置", isAdmin: false, expectedUrl: "/settings/notifications" }, + { query: "安全设置", isAdmin: false, expectedUrl: "/settings/security" }, +] + +for (const { query, isAdmin, expectedUrl } of routeCases) { + test(`search result for ${query} links to its page`, () => { + const result = searchItems(query, isAdmin).find((item) => item.title === query) + + assert.ok(result, `expected an exact search result for ${query}`) + assert.equal(result.url, expectedUrl) + }) +} diff --git a/frontend/lib/utils/search-data.ts b/frontend/lib/utils/search-data.ts index aa48b44b..5e7d557b 100644 --- a/frontend/lib/utils/search-data.ts +++ b/frontend/lib/utils/search-data.ts @@ -452,7 +452,7 @@ export const searchData: SearchItem[] = [ id: 'settings-notification', title: '通知设置', description: '管理通知偏好', - url: '/settings', + url: '/settings/notifications', category: 'setting', keywords: ['settings', '设置', '通知', 'notification'], }, @@ -460,7 +460,7 @@ export const searchData: SearchItem[] = [ id: 'settings-security', title: '安全设置', description: '账户安全和隐私设置', - url: '/settings', + url: '/settings/security', category: 'setting', keywords: ['settings', '设置', '安全', 'security', '隐私'], }, @@ -478,7 +478,7 @@ export const searchData: SearchItem[] = [ id: 'admin-user-pay', title: '积分配置', description: '管理用户支付等级和配置', - url: '/admin/user_pay', + url: '/admin/credit', category: 'admin', keywords: ['admin', '管理', '积分', '配置', 'payment', 'config'], }, diff --git a/frontend/package.json b/frontend/package.json index 0e967f75..73ec95d4 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -7,7 +7,8 @@ "dev": "next dev --turbopack", "build": "next build", "start": "next start -p 3010", - "lint": "eslint" + "lint": "eslint", + "test": "jiti lib/utils/search-data.test.ts" }, "dependencies": { "@dnd-kit/core": "^6.3.1", @@ -79,6 +80,7 @@ "@types/react-dom": "^19", "eslint": "^9", "eslint-config-next": "15.5.6", + "jiti": "^2.6.1", "tailwindcss": "^4", "tw-animate-css": "^1.4.0", "typescript": "^5" diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index 1fd51fb7..b3e822b0 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -210,6 +210,9 @@ importers: eslint-config-next: specifier: 15.5.6 version: 15.5.6(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + jiti: + specifier: ^2.6.1 + version: 2.6.1 tailwindcss: specifier: ^4 version: 4.1.16