2
0

test-utils.ts 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. import { IntegrationTestDatabase } from '@d8d/shared-test-util';
  2. import { UserEntityMt } from '@d8d/user-module-mt';
  3. import { MerchantMt } from '../../src/entities/merchant.mt.entity';
  4. /**
  5. * 商户模块测试工具类
  6. * 避免依赖共享测试数据工厂的复杂依赖关系
  7. */
  8. export class MerchantTestUtils {
  9. /**
  10. * 创建测试用户
  11. */
  12. static async createTestUser(overrides: Partial<any> = {}): Promise<UserEntityMt> {
  13. const dataSource = await IntegrationTestDatabase.getDataSource();
  14. const userRepository = dataSource.getRepository(UserEntityMt);
  15. const defaultUser = {
  16. username: `test_user_${Date.now()}`,
  17. password: 'test_password',
  18. nickname: '测试用户',
  19. registrationSource: 'web',
  20. tenantId: 1
  21. };
  22. const userData = { ...defaultUser, ...overrides };
  23. const user = userRepository.create(userData);
  24. return await userRepository.save(user);
  25. }
  26. /**
  27. * 创建测试商户
  28. */
  29. static async createTestMerchant(
  30. createdBy: number,
  31. tenantId: number = 1,
  32. overrides: Partial<MerchantMt> = {}
  33. ): Promise<MerchantMt> {
  34. const dataSource = await IntegrationTestDatabase.getDataSource();
  35. const merchantRepository = dataSource.getRepository(MerchantMt);
  36. const timestamp = Date.now();
  37. const defaultMerchant = {
  38. name: `测试商户_${timestamp}`,
  39. username: `test_m_${timestamp.toString().slice(-8)}`,
  40. password: 'password123',
  41. phone: '13800138000',
  42. realname: '测试商户',
  43. state: 1,
  44. loginNum: 0,
  45. loginTime: 0,
  46. loginIp: '',
  47. lastLoginTime: 0,
  48. lastLoginIp: '',
  49. rsaPublicKey: '',
  50. aesKey: '',
  51. tenantId,
  52. createdBy
  53. };
  54. const merchantData = { ...defaultMerchant, ...overrides };
  55. const merchant = merchantRepository.create(merchantData);
  56. return await merchantRepository.save(merchant);
  57. }
  58. /**
  59. * 创建多个测试商户
  60. */
  61. static async createTestMerchants(
  62. createdBy: number,
  63. count: number,
  64. tenantId: number = 1,
  65. overrides: Partial<MerchantMt> = {}
  66. ): Promise<MerchantMt[]> {
  67. const merchants: MerchantMt[] = [];
  68. for (let i = 0; i < count; i++) {
  69. const merchant = await this.createTestMerchant(createdBy, tenantId, {
  70. ...overrides,
  71. name: `测试商户_${i + 1}`,
  72. username: `test_m${i + 1}_${Date.now().toString().slice(-6)}`
  73. });
  74. merchants.push(merchant);
  75. }
  76. return merchants;
  77. }
  78. /**
  79. * 创建测试商户数据集
  80. */
  81. static async createTestMerchantDataSet(
  82. userId: number,
  83. otherUserId: number,
  84. tenantId: number = 1
  85. ): Promise<{
  86. userMerchants: MerchantMt[];
  87. otherUserMerchants: MerchantMt[];
  88. }> {
  89. const userMerchants = await this.createTestMerchants(userId, 2, tenantId, {
  90. name: '用户商户'
  91. });
  92. const otherUserMerchants = await this.createTestMerchants(otherUserId, 1, tenantId, {
  93. name: '其他用户商户'
  94. });
  95. return {
  96. userMerchants,
  97. otherUserMerchants
  98. };
  99. }
  100. /**
  101. * 清理测试数据
  102. */
  103. static async cleanupTestData(): Promise<void> {
  104. const dataSource = await IntegrationTestDatabase.getDataSource();
  105. const merchantRepository = dataSource.getRepository(MerchantMt);
  106. const userRepository = dataSource.getRepository(UserEntityMt);
  107. await merchantRepository.clear();
  108. await userRepository.clear();
  109. }
  110. }