chore(data): 新增清空数据导入脚本
This commit is contained in:
94
apps/server/prisma/seed-data.spec.ts
Normal file
94
apps/server/prisma/seed-data.spec.ts
Normal file
@@ -0,0 +1,94 @@
|
||||
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();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user