style: format navigation.test.ts with prettier
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2s
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 3s
CI/CD Pipeline / Validate - Style (pull_request) Waiting to run
CI/CD Pipeline / Validate - Security (pull_request) Waiting to run
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Waiting to run
CI/CD Pipeline / Unit Tests (pull_request) Waiting to run
CI/CD Pipeline / Integration Tests (pull_request) Waiting to run
CI/CD Pipeline / Frontend Lint (pull_request) Waiting to run
CI/CD Pipeline / Frontend Unit Tests (pull_request) Waiting to run
CI/CD Pipeline / PR Build API Image (pull_request) Waiting to run
CI/CD Pipeline / PR Build Web Image (pull_request) Waiting to run
CI/CD Pipeline / PR Build Worker Image (pull_request) Waiting to run
CI/CD Pipeline / Build Staging API Image (pull_request) Waiting to run
CI/CD Pipeline / Build Staging Web Image (pull_request) Waiting to run
CI/CD Pipeline / Build Staging Worker Image (pull_request) Waiting to run
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Blocked by required conditions
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Blocked by required conditions
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Blocked by required conditions
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Blocked by required conditions
CI/CD Pipeline / Staging E2E Tests (pull_request) Blocked by required conditions
CI/CD Pipeline / Staging API Integration Tests (pull_request) Blocked by required conditions
CI/CD Pipeline / Build Production API Image (pull_request) Blocked by required conditions
CI/CD Pipeline / Build Production Web Image (pull_request) Blocked by required conditions
CI/CD Pipeline / Build Production Worker Image (pull_request) Blocked by required conditions
CI/CD Pipeline / Deploy Production (pull_request) Blocked by required conditions
CI/CD Pipeline / Production Browser E2E (pull_request) Blocked by required conditions
CI/CD Pipeline / ACR Image Cleanup (pull_request) Blocked by required conditions
CI/CD Pipeline / Canary Release to Production (pull_request) Blocked by required conditions
CI/CD Pipeline / CI Gate (pull_request) Blocked by required conditions
AI Code Review / AI Code Review (pull_request) Has been cancelled
PR Automation / Auto Approve on CI Green (pull_request) Has been cancelled
PR Automation / Auto Merge on CI Green + Approved (pull_request) Has been cancelled
Preview Deploy / Deploy Preview Environment (pull_request) Has been cancelled
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 2s
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 3s
CI/CD Pipeline / Validate - Style (pull_request) Waiting to run
CI/CD Pipeline / Validate - Security (pull_request) Waiting to run
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Waiting to run
CI/CD Pipeline / Unit Tests (pull_request) Waiting to run
CI/CD Pipeline / Integration Tests (pull_request) Waiting to run
CI/CD Pipeline / Frontend Lint (pull_request) Waiting to run
CI/CD Pipeline / Frontend Unit Tests (pull_request) Waiting to run
CI/CD Pipeline / PR Build API Image (pull_request) Waiting to run
CI/CD Pipeline / PR Build Web Image (pull_request) Waiting to run
CI/CD Pipeline / PR Build Worker Image (pull_request) Waiting to run
CI/CD Pipeline / Build Staging API Image (pull_request) Waiting to run
CI/CD Pipeline / Build Staging Web Image (pull_request) Waiting to run
CI/CD Pipeline / Build Staging Worker Image (pull_request) Waiting to run
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Blocked by required conditions
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Blocked by required conditions
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Blocked by required conditions
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Blocked by required conditions
CI/CD Pipeline / Staging E2E Tests (pull_request) Blocked by required conditions
CI/CD Pipeline / Staging API Integration Tests (pull_request) Blocked by required conditions
CI/CD Pipeline / Build Production API Image (pull_request) Blocked by required conditions
CI/CD Pipeline / Build Production Web Image (pull_request) Blocked by required conditions
CI/CD Pipeline / Build Production Worker Image (pull_request) Blocked by required conditions
CI/CD Pipeline / Deploy Production (pull_request) Blocked by required conditions
CI/CD Pipeline / Production Browser E2E (pull_request) Blocked by required conditions
CI/CD Pipeline / ACR Image Cleanup (pull_request) Blocked by required conditions
CI/CD Pipeline / Canary Release to Production (pull_request) Blocked by required conditions
CI/CD Pipeline / CI Gate (pull_request) Blocked by required conditions
AI Code Review / AI Code Review (pull_request) Has been cancelled
PR Automation / Auto Approve on CI Green (pull_request) Has been cancelled
PR Automation / Auto Merge on CI Green + Approved (pull_request) Has been cancelled
Preview Deploy / Deploy Preview Environment (pull_request) Has been cancelled
This commit is contained in:
@@ -1,80 +1,79 @@
|
||||
/**
|
||||
* navigation config 测试
|
||||
*/
|
||||
import { describe, it, expect } from "vitest"
|
||||
import { NAV_ITEMS, NAV_GROUPS } from "@/config/navigation"
|
||||
import { describe, it, expect } from "vitest";
|
||||
import { NAV_ITEMS, NAV_GROUPS } from "@/config/navigation";
|
||||
|
||||
describe("navigation config", () => {
|
||||
describe("NAV_ITEMS", () => {
|
||||
it("应该是一个非空数组", () => {
|
||||
expect(Array.isArray(NAV_ITEMS)).toBe(true)
|
||||
expect(NAV_ITEMS.length).toBeGreaterThan(0)
|
||||
})
|
||||
expect(Array.isArray(NAV_ITEMS)).toBe(true);
|
||||
expect(NAV_ITEMS.length).toBeGreaterThan(0);
|
||||
});
|
||||
|
||||
it("每个导航项都有必需字段", () => {
|
||||
NAV_ITEMS.forEach((item) => {
|
||||
expect(item).toHaveProperty("key")
|
||||
expect(item).toHaveProperty("label")
|
||||
expect(item).toHaveProperty("path")
|
||||
expect(item).toHaveProperty("icon")
|
||||
expect(typeof item.key).toBe("string")
|
||||
expect(typeof item.label).toBe("string")
|
||||
expect(typeof item.path).toBe("string")
|
||||
expect(item.path).toMatch(/^\/app/)
|
||||
})
|
||||
})
|
||||
expect(item).toHaveProperty("key");
|
||||
expect(item).toHaveProperty("label");
|
||||
expect(item).toHaveProperty("path");
|
||||
expect(item).toHaveProperty("icon");
|
||||
expect(typeof item.key).toBe("string");
|
||||
expect(typeof item.label).toBe("string");
|
||||
expect(typeof item.path).toBe("string");
|
||||
expect(item.path).toMatch(/^\/app/);
|
||||
});
|
||||
});
|
||||
|
||||
it("key 不重复", () => {
|
||||
const keys = NAV_ITEMS.map((item) => item.key)
|
||||
expect(new Set(keys).size).toBe(keys.length)
|
||||
})
|
||||
const keys = NAV_ITEMS.map((item) => item.key);
|
||||
expect(new Set(keys).size).toBe(keys.length);
|
||||
});
|
||||
|
||||
it("path 不重复", () => {
|
||||
const paths = NAV_ITEMS.map((item) => item.path)
|
||||
expect(new Set(paths).size).toBe(paths.length)
|
||||
})
|
||||
const paths = NAV_ITEMS.map((item) => item.path);
|
||||
expect(new Set(paths).size).toBe(paths.length);
|
||||
});
|
||||
|
||||
it("包含核心导航项", () => {
|
||||
const keys = NAV_ITEMS.map((item) => item.key)
|
||||
expect(keys).toContain("dashboard")
|
||||
expect(keys).toContain("assets")
|
||||
expect(keys).toContain("voices")
|
||||
expect(keys).toContain("titles")
|
||||
})
|
||||
})
|
||||
const keys = NAV_ITEMS.map((item) => item.key);
|
||||
expect(keys).toContain("dashboard");
|
||||
expect(keys).toContain("assets");
|
||||
expect(keys).toContain("voices");
|
||||
expect(keys).toContain("titles");
|
||||
});
|
||||
});
|
||||
|
||||
describe("NAV_GROUPS", () => {
|
||||
it("应该是一个非空数组", () => {
|
||||
expect(Array.isArray(NAV_GROUPS)).toBe(true)
|
||||
expect(NAV_GROUPS.length).toBeGreaterThan(0)
|
||||
})
|
||||
expect(Array.isArray(NAV_GROUPS)).toBe(true);
|
||||
expect(NAV_GROUPS.length).toBeGreaterThan(0);
|
||||
});
|
||||
|
||||
it("每个分组都有 title 和 items", () => {
|
||||
NAV_GROUPS.forEach((group) => {
|
||||
expect(group).toHaveProperty("title")
|
||||
expect(group).toHaveProperty("items")
|
||||
expect(typeof group.title).toBe("string")
|
||||
expect(Array.isArray(group.items)).toBe(true)
|
||||
expect(group.items.length).toBeGreaterThan(0)
|
||||
})
|
||||
})
|
||||
expect(group).toHaveProperty("title");
|
||||
expect(group).toHaveProperty("items");
|
||||
expect(typeof group.title).toBe("string");
|
||||
expect(Array.isArray(group.items)).toBe(true);
|
||||
expect(group.items.length).toBeGreaterThan(0);
|
||||
});
|
||||
});
|
||||
|
||||
it("分组中的每个导航项结构正确", () => {
|
||||
NAV_GROUPS.forEach((group) => {
|
||||
group.items.forEach((item) => {
|
||||
expect(item).toHaveProperty("key")
|
||||
expect(item).toHaveProperty("label")
|
||||
expect(item).toHaveProperty("path")
|
||||
expect(item).toHaveProperty("icon")
|
||||
expect(item.path).toMatch(/^\/app/)
|
||||
})
|
||||
})
|
||||
})
|
||||
expect(item).toHaveProperty("key");
|
||||
expect(item).toHaveProperty("label");
|
||||
expect(item).toHaveProperty("path");
|
||||
expect(item).toHaveProperty("icon");
|
||||
expect(item.path).toMatch(/^\/app/);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it("分组标题不重复", () => {
|
||||
const titles = NAV_GROUPS.map((g) => g.title)
|
||||
expect(new Set(titles).size).toBe(titles.length)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
const titles = NAV_GROUPS.map((g) => g.title);
|
||||
expect(new Set(titles).size).toBe(titles.length);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user