test-data-factory.ts 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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. /**
  46. * 创建测试用户数据(用于认证测试)
  47. */
  48. static createUserData(overrides: any = {}): any {
  49. const timestamp = Date.now();
  50. return {
  51. id: Math.floor(Math.random() * 10000) + 1,
  52. username: `testuser_${timestamp}`,
  53. password: 'TestPassword123!',
  54. email: `test_${timestamp}@example.com`,
  55. phone: `138${timestamp.toString().slice(-8)}`,
  56. nickname: `Test User ${timestamp}`,
  57. name: `Test Name ${timestamp}`,
  58. isDisabled: 0,
  59. isDeleted: 0,
  60. ...overrides
  61. };
  62. }
  63. /**
  64. * 在数据库中创建测试用户(用于认证测试)
  65. */
  66. static async createTestUser(dataSource: DataSource, overrides: any = {}): Promise<any> {
  67. const userData = this.createUserData(overrides);
  68. // 导入 UserEntity
  69. const { UserEntity } = await import('@d8d/user-module');
  70. const userRepository = dataSource.getRepository(UserEntity);
  71. const user = userRepository.create(userData);
  72. return await userRepository.save(user);
  73. }
  74. }