95 lines
3.3 KiB
TypeScript
95 lines
3.3 KiB
TypeScript
import { buildAppDataSeed } from './seed-data';
|
||
|
||
function byKey(key: string) {
|
||
const entry = buildAppDataSeed().find((item) => item.key === key);
|
||
if (!entry) throw new Error(`Missing seed key: ${key}`);
|
||
return entry.value as any;
|
||
}
|
||
|
||
describe('clean app data seed', () => {
|
||
it('clears business, workspace, warning, and overtime records', () => {
|
||
const emptyArrayKeys = [
|
||
'version-plans',
|
||
'dev-tasks',
|
||
'test-cases',
|
||
'bugs',
|
||
'task-worklogs',
|
||
'work-activities',
|
||
'xiaobao-risk-insights',
|
||
'xiaobao-risk-snapshots',
|
||
'xiaobao-warning-views',
|
||
'task-categories',
|
||
];
|
||
|
||
for (const key of emptyArrayKeys) {
|
||
expect(byKey(key)).toEqual([]);
|
||
}
|
||
|
||
expect(byKey('requirements').requirements).toEqual([]);
|
||
expect(byKey('overtime').records).toEqual([]);
|
||
});
|
||
|
||
it('seeds deduped customer source targets split from the customer spreadsheet', () => {
|
||
const requirements = byKey('requirements');
|
||
const targets = requirements.sourceTargets;
|
||
const names = targets.map((target: { name: string }) => target.name);
|
||
|
||
expect(targets).toHaveLength(67);
|
||
expect(targets.every((target: { sourceType: string }) => target.sourceType === 'customer')).toBe(true);
|
||
expect(new Set(names.map((name: string) => name.trim().toLowerCase())).size).toBe(names.length);
|
||
expect(names.some((name: string) => name.includes(',') || name.includes(','))).toBe(false);
|
||
expect(names.slice(0, 5)).toEqual(['方砖厂', '全部客户', '晓秧锅', '老船长', '失眠烧烤']);
|
||
expect(names).toContain('秦门西安小馆');
|
||
expect(names.at(-1)).toBe('杨记兴');
|
||
});
|
||
|
||
it('creates the default FTB product with deduped projects from the spreadsheet', () => {
|
||
const products = byKey('products-overview');
|
||
|
||
expect(products).toHaveLength(1);
|
||
expect(products[0]).toEqual(
|
||
expect.objectContaining({
|
||
id: 'product-ftb-app',
|
||
name: '翻台宝应用',
|
||
}),
|
||
);
|
||
expect(products[0].projects).toHaveLength(56);
|
||
expect(products[0]._count.projects).toBe(56);
|
||
expect(products[0].versions).toEqual([]);
|
||
|
||
const names = products[0].projects.map((project: { name: string }) => project.name);
|
||
expect(new Set(names.map((name: string) => name.trim().toLowerCase())).size).toBe(names.length);
|
||
expect(names.slice(0, 5)).toEqual(['通知公告', '产品库', 'AI帮助', '读书', '工作计划']);
|
||
expect(names.at(-1)).toBe('增长管理');
|
||
});
|
||
|
||
it('keeps dictionaries and role configuration while only retaining the super admin member', () => {
|
||
const requirements = byKey('requirements');
|
||
const overtime = byKey('overtime');
|
||
const members = byKey('members');
|
||
|
||
expect(requirements.types.length).toBeGreaterThan(0);
|
||
expect(requirements.platforms.length).toBeGreaterThan(0);
|
||
expect(overtime.reasons.length).toBeGreaterThan(0);
|
||
|
||
expect(members.members).toEqual([
|
||
expect.objectContaining({
|
||
id: 'm-8',
|
||
name: '超级管理员',
|
||
roleId: 'role-admin',
|
||
isSystem: true,
|
||
password: 'Ftb@2024',
|
||
}),
|
||
]);
|
||
expect(members.roles.map((role: { id: string }) => role.id)).toEqual([
|
||
'role-admin',
|
||
'role-pm',
|
||
'role-lead',
|
||
'role-dev',
|
||
'role-test',
|
||
'role-design',
|
||
]);
|
||
expect(members.passwordRule).toBeTruthy();
|
||
});
|
||
});
|