test-data-factory.ts 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import { DataSource } from 'typeorm';
  2. import { AreaEntity, AreaLevel } from '../../src/modules/areas/area.entity';
  3. /**
  4. * 测试数据工厂类 - 专门用于地区模块测试
  5. */
  6. export class TestDataFactory {
  7. /**
  8. * 创建测试区域数据
  9. */
  10. static createAreaData(overrides: Partial<AreaEntity> = {}): Partial<AreaEntity> {
  11. const timestamp = Date.now();
  12. return {
  13. name: `测试区域_${timestamp}`,
  14. code: `area_${timestamp}`,
  15. level: AreaLevel.PROVINCE,
  16. parentId: null,
  17. isDisabled: 0,
  18. isDeleted: 0,
  19. ...overrides
  20. };
  21. }
  22. /**
  23. * 在数据库中创建测试区域
  24. */
  25. static async createTestArea(dataSource: DataSource, overrides: Partial<AreaEntity> = {}): Promise<AreaEntity> {
  26. const areaData = this.createAreaData(overrides);
  27. const areaRepository = dataSource.getRepository(AreaEntity);
  28. // 对于顶级区域(省/直辖市),parentId应该为null
  29. if (areaData.level === AreaLevel.PROVINCE) {
  30. areaData.parentId = null;
  31. }
  32. // 对于市级区域,确保有对应的省级区域
  33. else if (areaData.level === AreaLevel.CITY && !areaData.parentId) {
  34. const province = await this.createTestArea(dataSource, { level: AreaLevel.PROVINCE });
  35. areaData.parentId = province.id;
  36. }
  37. // 对于区县级区域,确保有对应的市级区域
  38. else if (areaData.level === AreaLevel.DISTRICT && !areaData.parentId) {
  39. const city = await this.createTestArea(dataSource, { level: AreaLevel.CITY });
  40. areaData.parentId = city.id;
  41. }
  42. const area = areaRepository.create(areaData);
  43. return await areaRepository.save(area);
  44. }
  45. }