chore(data): 新增清空数据导入脚本

This commit is contained in:
Script Generator
2026-07-01 16:39:53 +08:00
parent 915242970c
commit 28e0c6de19
3 changed files with 604 additions and 0 deletions

View 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();
});
});