Files
ftb-project-management/apps/server/prisma/seed-data.spec.ts
2026-07-02 09:30:50 +08:00

98 lines
3.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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: '超级管理员',
username: 'admin',
email: '',
departmentId: '',
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();
});
});