merchant.factory.ts 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. import { IntegrationTestDatabase } from '@d8d/shared-test-util';
  2. import { MerchantMt } from '../../src/entities/merchant.mt.entity';
  3. /**
  4. * 商户测试数据工厂
  5. * 用于创建商户测试数据,减少重复代码
  6. */
  7. export class MerchantTestFactory {
  8. /**
  9. * 创建测试商户
  10. */
  11. static async createTestMerchant(
  12. createdBy: number,
  13. tenantId: number = 1,
  14. overrides: Partial<MerchantMt> = {}
  15. ): Promise<MerchantMt> {
  16. const dataSource = await IntegrationTestDatabase.getDataSource();
  17. const merchantRepository = dataSource.getRepository(MerchantMt);
  18. const timestamp = Date.now();
  19. const defaultMerchant = {
  20. name: `测试商户_${timestamp}`,
  21. username: `test_merchant_${timestamp}`,
  22. password: 'password123',
  23. phone: `13800138${timestamp.toString().slice(-4)}`,
  24. realname: '测试商户',
  25. state: 1,
  26. loginNum: 0,
  27. loginTime: 0,
  28. loginIp: '',
  29. lastLoginTime: 0,
  30. lastLoginIp: '',
  31. rsaPublicKey: '',
  32. aesKey: '',
  33. tenantId,
  34. createdBy
  35. };
  36. const merchantData = { ...defaultMerchant, ...overrides };
  37. const merchant = merchantRepository.create(merchantData);
  38. return await merchantRepository.save(merchant);
  39. }
  40. /**
  41. * 创建多个测试商户
  42. */
  43. static async createTestMerchants(
  44. createdBy: number,
  45. count: number,
  46. tenantId: number = 1,
  47. overrides: Partial<MerchantMt> = {}
  48. ): Promise<MerchantMt[]> {
  49. const merchants: MerchantMt[] = [];
  50. for (let i = 0; i < count; i++) {
  51. const merchant = await this.createTestMerchant(createdBy, tenantId, {
  52. ...overrides,
  53. name: `测试商户_${i + 1}`,
  54. username: `test_merchant_${i + 1}_${Date.now()}`
  55. });
  56. merchants.push(merchant);
  57. }
  58. return merchants;
  59. }
  60. /**
  61. * 创建不同租户的测试商户
  62. */
  63. static async createMultiTenantTestMerchants(
  64. createdBy: number,
  65. tenantIds: number[] = [1, 2]
  66. ): Promise<Record<number, MerchantMt[]>> {
  67. const result: Record<number, MerchantMt[]> = {};
  68. for (const tenantId of tenantIds) {
  69. const merchants = await this.createTestMerchants(createdBy, 2, tenantId, {
  70. name: `租户${tenantId}商户`
  71. });
  72. result[tenantId] = merchants;
  73. }
  74. return result;
  75. }
  76. /**
  77. * 创建测试商户数据集
  78. */
  79. static async createTestMerchantDataSet(
  80. userId: number,
  81. otherUserId: number,
  82. tenantId: number = 1
  83. ): Promise<{
  84. userMerchants: MerchantMt[];
  85. otherUserMerchants: MerchantMt[];
  86. }> {
  87. const userMerchants = await this.createTestMerchants(userId, 2, tenantId, {
  88. name: '用户商户'
  89. });
  90. const otherUserMerchants = await this.createTestMerchants(otherUserId, 1, tenantId, {
  91. name: '其他用户商户'
  92. });
  93. return {
  94. userMerchants,
  95. otherUserMerchants
  96. };
  97. }
  98. /**
  99. * 清理商户测试数据
  100. */
  101. static async cleanupMerchantTestData(): Promise<void> {
  102. const dataSource = await IntegrationTestDatabase.getDataSource();
  103. const merchantRepository = dataSource.getRepository(MerchantMt);
  104. await merchantRepository.clear();
  105. }
  106. }