test-data-factory.ts 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import { DataSource } from 'typeorm';
  2. import { AreaEntityMt, AreaLevel } from '../../src/modules/areas/area.entity.mt';
  3. /**
  4. * 测试数据工厂类 - 专门用于地区模块测试
  5. */
  6. export class TestDataFactory {
  7. /**
  8. * 创建测试区域数据
  9. */
  10. static createAreaData(overrides: Partial<AreaEntityMt> = {}): Partial<AreaEntityMt> {
  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. tenantId: 1, // 默认租户ID
  20. ...overrides
  21. };
  22. }
  23. /**
  24. * 在数据库中创建测试区域
  25. */
  26. static async createTestArea(dataSource: DataSource, overrides: Partial<AreaEntityMt> = {}): Promise<AreaEntityMt> {
  27. const areaData = this.createAreaData(overrides);
  28. const areaRepository = dataSource.getRepository(AreaEntityMt);
  29. // 对于顶级区域(省/直辖市),parentId应该为null
  30. if (areaData.level === AreaLevel.PROVINCE) {
  31. areaData.parentId = null;
  32. }
  33. // 对于市级区域,确保有对应的省级区域
  34. else if (areaData.level === AreaLevel.CITY && !areaData.parentId) {
  35. const province = await this.createTestArea(dataSource, { level: AreaLevel.PROVINCE });
  36. areaData.parentId = province.id;
  37. }
  38. // 对于区县级区域,确保有对应的市级区域
  39. else if (areaData.level === AreaLevel.DISTRICT && !areaData.parentId) {
  40. const city = await this.createTestArea(dataSource, { level: AreaLevel.CITY });
  41. areaData.parentId = city.id;
  42. }
  43. const area = areaRepository.create(areaData);
  44. return await areaRepository.save(area);
  45. }
  46. /**
  47. * 创建测试用户数据(用于认证测试)
  48. */
  49. static createUserData(overrides: any = {}): any {
  50. const timestamp = Date.now();
  51. return {
  52. id: Math.floor(Math.random() * 10000) + 1,
  53. username: `testuser_${timestamp}`,
  54. password: 'TestPassword123!',
  55. email: `test_${timestamp}@example.com`,
  56. phone: `138${timestamp.toString().slice(-8)}`,
  57. nickname: `Test User ${timestamp}`,
  58. name: `Test Name ${timestamp}`,
  59. isDisabled: 0,
  60. isDeleted: 0,
  61. tenantId: 1, // 添加租户ID
  62. ...overrides
  63. };
  64. }
  65. /**
  66. * 在数据库中创建测试用户(用于认证测试)
  67. */
  68. static async createTestUser(dataSource: DataSource, overrides: any = {}): Promise<any> {
  69. const userData = this.createUserData(overrides);
  70. // 导入 UserEntity
  71. const { UserEntityMt } = await import('@d8d/user-module-mt');
  72. const userRepository = dataSource.getRepository(UserEntityMt);
  73. const user = userRepository.create(userData);
  74. return await userRepository.save(user);
  75. }
  76. }