Files
xiaoxia-saas/apps/web/src/test/api/auth-normalize.test.ts
T
CI Bot c70403f4c3
CI Build & Deploy Pipeline / Build Staging API Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production API Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Build Production Web Image (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI Build & Deploy Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI Build & Deploy Pipeline / Deploy Production (pull_request) Has been skipped
CI Build & Deploy Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 47s
CI/CD Pipeline / Validate Code Quality And Tests (pull_request) Has been skipped
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m11s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 1m15s
Auto Approve CI PRs / Auto Approve on CI Green (pull_request) Successful in 1m18s
Auto Merge CI PRs / Auto Merge on CI Green + Approved (pull_request) Successful in 1m21s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 1m11s
AI Code Review / AI Code Review (pull_request) Successful in 4m22s
test: 前端单测覆盖率Phase2,行覆盖率22%→39.3%
- 新增5个Layout组件测试(AppLayout/Header/MainLayout/PageHead/Sidebar)
- 新增AssetSelector业务组件测试
- 新增~18个页面smoke test(查重系列/任务系列/资源库/音色/订阅/产品等)
- 新增useUndoRedo hook测试 + useAuth测试增强
- 新增config/navigation配置测试 + auth-normalize纯函数测试
- 71个测试文件,420个用例全通过,行覆盖率39.3%
2026-07-19 10:50:21 +08:00

120 lines
3.0 KiB
TypeScript

/**
* auth API 纯函数测试
* - normalizeUser
*/
import { describe, it, expect } from "vitest"
import { normalizeUser } from "@/api/auth"
describe("normalizeUser", () => {
it("应该正确映射标准用户数据", () => {
const input = {
id: "123",
user_id: "123",
email: "test@example.com",
username: "testuser",
display_name: "Test User",
is_email_verified: true,
email_verified: true,
created_at: "2024-01-01T00:00:00Z",
}
const result = normalizeUser(input)
expect(result.id).toBe("123")
expect(result.user_id).toBe("123")
expect(result.email).toBe("test@example.com")
expect(result.username).toBe("testuser")
expect(result.display_name).toBe("Test User")
expect(result.is_email_verified).toBe(true)
expect(result.email_verified).toBe(true)
expect(result.created_at).toBe("2024-01-01T00:00:00Z")
})
it("id 优先于 user_id", () => {
const input = {
id: "id-from-id",
user_id: "id-from-user-id",
email: "a@b.com",
username: "user",
}
const result = normalizeUser(input)
expect(result.id).toBe("id-from-id")
expect(result.user_id).toBe("id-from-id")
})
it("没有 id 时使用 user_id", () => {
const input = {
user_id: "fallback-user-id",
email: "a@b.com",
username: "user",
}
const result = normalizeUser(input as any)
expect(result.id).toBe("fallback-user-id")
expect(result.user_id).toBe("fallback-user-id")
})
it("id 和 user_id 都没有时返回空字符串", () => {
const input = {
email: "a@b.com",
username: "user",
}
const result = normalizeUser(input as any)
expect(result.id).toBe("")
expect(result.user_id).toBe("")
})
it("is_email_verified 优先于 email_verified", () => {
const input = {
id: "1",
email: "a@b.com",
username: "user",
is_email_verified: true,
email_verified: false,
}
const result = normalizeUser(input)
expect(result.is_email_verified).toBe(true)
expect(result.email_verified).toBe(true)
})
it("没有 is_email_verified 时使用 email_verified", () => {
const input = {
id: "1",
email: "a@b.com",
username: "user",
email_verified: true,
}
const result = normalizeUser(input as any)
expect(result.is_email_verified).toBe(true)
expect(result.email_verified).toBe(true)
})
it("两个都没有时默认为 false", () => {
const input = {
id: "1",
email: "a@b.com",
username: "user",
}
const result = normalizeUser(input as any)
expect(result.is_email_verified).toBe(false)
expect(result.email_verified).toBe(false)
})
it("缺失可选字段时返回 undefined", () => {
const input = {
id: "1",
email: "a@b.com",
username: "user",
}
const result = normalizeUser(input as any)
expect(result.display_name).toBeUndefined()
expect(result.created_at).toBeUndefined()
})
})