|
|
@@ -265,10 +265,29 @@ describe('多租户信用额度API集成测试', () => {
|
|
|
isEnabled: 1
|
|
|
});
|
|
|
|
|
|
+ // 创建测试订单
|
|
|
+ const merchant = await CreditBalanceTestDataFactory.createTestMerchant(dataSource, 1, testUser.id);
|
|
|
+ const supplier = await CreditBalanceTestDataFactory.createTestSupplier(dataSource, 1, testUser.id);
|
|
|
+ const address = await CreditBalanceTestDataFactory.createTestDeliveryAddress(dataSource, 1, testUser.id);
|
|
|
+
|
|
|
+ const testOrder = await CreditBalanceTestDataFactory.createTestOrder(
|
|
|
+ dataSource,
|
|
|
+ 1,
|
|
|
+ testUser.id,
|
|
|
+ merchant.id,
|
|
|
+ supplier.id,
|
|
|
+ address.id,
|
|
|
+ {
|
|
|
+ orderNo: 'TEST_ORDER_003',
|
|
|
+ amount: 500.00,
|
|
|
+ payAmount: 500.00,
|
|
|
+ payState: PayStatus.UNPAID
|
|
|
+ }
|
|
|
+ );
|
|
|
+
|
|
|
const response = await client.payment.$post({
|
|
|
json: {
|
|
|
- amount: 500.00,
|
|
|
- referenceId: 'ORD202412010001',
|
|
|
+ referenceId: testOrder.id.toString(), // 使用订单ID
|
|
|
operatorId: 1,
|
|
|
remark: '订单支付'
|
|
|
}
|
|
|
@@ -405,6 +424,468 @@ describe('多租户信用额度API集成测试', () => {
|
|
|
expect(updatedOrder!.payState).toBe(PayStatus.UNPAID); // 仍然是未支付状态
|
|
|
expect(updatedOrder!.payType).toBe(0); // 支付类型未改变
|
|
|
});
|
|
|
+
|
|
|
+ it('应该拒绝支付已支付成功的订单', async () => {
|
|
|
+ // 先创建信用额度记录
|
|
|
+ const dataSource = await IntegrationTestDatabase.getDataSource();
|
|
|
+ const creditBalanceRepo = dataSource.getRepository(CreditBalanceMt);
|
|
|
+ await creditBalanceRepo.save({
|
|
|
+ tenantId: 1,
|
|
|
+ userId: testUser.id,
|
|
|
+ totalLimit: 10000.00,
|
|
|
+ usedAmount: 0.00,
|
|
|
+ isEnabled: 1
|
|
|
+ });
|
|
|
+
|
|
|
+ // 创建已支付成功的测试订单
|
|
|
+ const merchant = await CreditBalanceTestDataFactory.createTestMerchant(dataSource, 1, testUser.id);
|
|
|
+ const supplier = await CreditBalanceTestDataFactory.createTestSupplier(dataSource, 1, testUser.id);
|
|
|
+ const address = await CreditBalanceTestDataFactory.createTestDeliveryAddress(dataSource, 1, testUser.id);
|
|
|
+
|
|
|
+ const testOrder = await CreditBalanceTestDataFactory.createTestOrder(
|
|
|
+ dataSource,
|
|
|
+ 1,
|
|
|
+ testUser.id,
|
|
|
+ merchant.id,
|
|
|
+ supplier.id,
|
|
|
+ address.id,
|
|
|
+ {
|
|
|
+ orderNo: 'TEST_ORDER_004',
|
|
|
+ amount: 500.00,
|
|
|
+ payAmount: 500.00,
|
|
|
+ payState: PayStatus.SUCCESS, // 已支付成功
|
|
|
+ payType: PayType.CREDIT
|
|
|
+ }
|
|
|
+ );
|
|
|
+
|
|
|
+ const response = await client.payment.$post({
|
|
|
+ json: {
|
|
|
+ referenceId: testOrder.id.toString(),
|
|
|
+ operatorId: 1,
|
|
|
+ remark: '订单支付'
|
|
|
+ }
|
|
|
+ }, {
|
|
|
+ headers: {
|
|
|
+ 'Authorization': `Bearer ${userToken}`
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // 应该返回错误,因为订单已支付成功
|
|
|
+ expect(response.status).toBe(400);
|
|
|
+ if (response.status === 400) {
|
|
|
+ const data = await response.json();
|
|
|
+ expect(data.message).toContain('订单已支付成功');
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ it('应该拒绝支付不存在的订单', async () => {
|
|
|
+ // 先创建信用额度记录
|
|
|
+ const dataSource = await IntegrationTestDatabase.getDataSource();
|
|
|
+ const creditBalanceRepo = dataSource.getRepository(CreditBalanceMt);
|
|
|
+ await creditBalanceRepo.save({
|
|
|
+ tenantId: 1,
|
|
|
+ userId: testUser.id,
|
|
|
+ totalLimit: 10000.00,
|
|
|
+ usedAmount: 0.00,
|
|
|
+ isEnabled: 1
|
|
|
+ });
|
|
|
+
|
|
|
+ const response = await client.payment.$post({
|
|
|
+ json: {
|
|
|
+ referenceId: '99999', // 不存在的订单ID
|
|
|
+ operatorId: 1,
|
|
|
+ remark: '订单支付'
|
|
|
+ }
|
|
|
+ }, {
|
|
|
+ headers: {
|
|
|
+ 'Authorization': `Bearer ${userToken}`
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // 应该返回404错误
|
|
|
+ expect(response.status).toBe(404);
|
|
|
+ });
|
|
|
+
|
|
|
+ it('应该拒绝支付无效的订单ID', async () => {
|
|
|
+ // 先创建信用额度记录
|
|
|
+ const dataSource = await IntegrationTestDatabase.getDataSource();
|
|
|
+ const creditBalanceRepo = dataSource.getRepository(CreditBalanceMt);
|
|
|
+ await creditBalanceRepo.save({
|
|
|
+ tenantId: 1,
|
|
|
+ userId: testUser.id,
|
|
|
+ totalLimit: 10000.00,
|
|
|
+ usedAmount: 0.00,
|
|
|
+ isEnabled: 1
|
|
|
+ });
|
|
|
+
|
|
|
+ const response = await client.payment.$post({
|
|
|
+ json: {
|
|
|
+ referenceId: 'invalid-order-id', // 无效的订单ID格式
|
|
|
+ operatorId: 1,
|
|
|
+ remark: '订单支付'
|
|
|
+ }
|
|
|
+ }, {
|
|
|
+ headers: {
|
|
|
+ 'Authorization': `Bearer ${userToken}`
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // 应该返回400错误
|
|
|
+ expect(response.status).toBe(400);
|
|
|
+ });
|
|
|
+
|
|
|
+ it('应该拒绝支付金额为0的订单', async () => {
|
|
|
+ // 先创建信用额度记录
|
|
|
+ const dataSource = await IntegrationTestDatabase.getDataSource();
|
|
|
+ const creditBalanceRepo = dataSource.getRepository(CreditBalanceMt);
|
|
|
+ await creditBalanceRepo.save({
|
|
|
+ tenantId: 1,
|
|
|
+ userId: testUser.id,
|
|
|
+ totalLimit: 10000.00,
|
|
|
+ usedAmount: 0.00,
|
|
|
+ isEnabled: 1
|
|
|
+ });
|
|
|
+
|
|
|
+ // 创建支付金额为0的测试订单
|
|
|
+ const merchant = await CreditBalanceTestDataFactory.createTestMerchant(dataSource, 1, testUser.id);
|
|
|
+ const supplier = await CreditBalanceTestDataFactory.createTestSupplier(dataSource, 1, testUser.id);
|
|
|
+ const address = await CreditBalanceTestDataFactory.createTestDeliveryAddress(dataSource, 1, testUser.id);
|
|
|
+
|
|
|
+ const testOrder = await CreditBalanceTestDataFactory.createTestOrder(
|
|
|
+ dataSource,
|
|
|
+ 1,
|
|
|
+ testUser.id,
|
|
|
+ merchant.id,
|
|
|
+ supplier.id,
|
|
|
+ address.id,
|
|
|
+ {
|
|
|
+ orderNo: 'TEST_ORDER_005',
|
|
|
+ amount: 0.00,
|
|
|
+ payAmount: 0.00, // 支付金额为0
|
|
|
+ payState: PayStatus.UNPAID
|
|
|
+ }
|
|
|
+ );
|
|
|
+
|
|
|
+ const response = await client.payment.$post({
|
|
|
+ json: {
|
|
|
+ referenceId: testOrder.id.toString(),
|
|
|
+ operatorId: 1,
|
|
|
+ remark: '订单支付'
|
|
|
+ }
|
|
|
+ }, {
|
|
|
+ headers: {
|
|
|
+ 'Authorization': `Bearer ${userToken}`
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // 应该返回400错误
|
|
|
+ expect(response.status).toBe(400);
|
|
|
+ if (response.status === 400) {
|
|
|
+ const data = await response.json();
|
|
|
+ expect(data.message).toContain('订单支付金额无效');
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ it('应该成功扣减额度当用户已有欠款时', async () => {
|
|
|
+ // 先创建信用额度记录,用户已有欠款
|
|
|
+ const dataSource = await IntegrationTestDatabase.getDataSource();
|
|
|
+ const creditBalanceRepo = dataSource.getRepository(CreditBalanceMt);
|
|
|
+ await creditBalanceRepo.save({
|
|
|
+ tenantId: 1,
|
|
|
+ userId: testUser.id,
|
|
|
+ totalLimit: 1000.00,
|
|
|
+ usedAmount: 198.01, // 用户已有欠款
|
|
|
+ isEnabled: 1
|
|
|
+ });
|
|
|
+
|
|
|
+ // 创建测试订单
|
|
|
+ const merchant = await CreditBalanceTestDataFactory.createTestMerchant(dataSource, 1, testUser.id);
|
|
|
+ const supplier = await CreditBalanceTestDataFactory.createTestSupplier(dataSource, 1, testUser.id);
|
|
|
+ const address = await CreditBalanceTestDataFactory.createTestDeliveryAddress(dataSource, 1, testUser.id);
|
|
|
+
|
|
|
+ const testOrder = await CreditBalanceTestDataFactory.createTestOrder(
|
|
|
+ dataSource,
|
|
|
+ 1,
|
|
|
+ testUser.id,
|
|
|
+ merchant.id,
|
|
|
+ supplier.id,
|
|
|
+ address.id,
|
|
|
+ {
|
|
|
+ orderNo: 'TEST_ORDER_006',
|
|
|
+ amount: 99.00,
|
|
|
+ payAmount: 99.00,
|
|
|
+ payState: PayStatus.UNPAID
|
|
|
+ }
|
|
|
+ );
|
|
|
+
|
|
|
+ const response = await client.payment.$post({
|
|
|
+ json: {
|
|
|
+ referenceId: testOrder.id.toString(),
|
|
|
+ operatorId: 1,
|
|
|
+ remark: '订单支付'
|
|
|
+ }
|
|
|
+ }, {
|
|
|
+ headers: {
|
|
|
+ 'Authorization': `Bearer ${userToken}`
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ expect(response.status).toBe(200);
|
|
|
+ if (response.status === 200) {
|
|
|
+ const data = await response.json();
|
|
|
+ // 已用额度应该是 198.01 + 99.00 = 297.01
|
|
|
+ expect(data.usedAmount).toBeCloseTo(297.01, 2);
|
|
|
+ // 可用额度应该是 1000.00 - 297.01 = 702.99
|
|
|
+ expect(data.availableAmount).toBeCloseTo(702.99, 2);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ it('应该正确处理decimal字段的字符串类型', async () => {
|
|
|
+ // 测试TypeORM decimal字段返回字符串的情况
|
|
|
+ // 先创建信用额度记录,使用字符串格式的金额
|
|
|
+ const dataSource = await IntegrationTestDatabase.getDataSource();
|
|
|
+ const creditBalanceRepo = dataSource.getRepository(CreditBalanceMt);
|
|
|
+
|
|
|
+ // 直接使用SQL插入,模拟TypeORM返回字符串的情况
|
|
|
+ await dataSource.query(`
|
|
|
+ INSERT INTO credit_balance_mt (tenant_id, user_id, total_limit, used_amount, is_enabled)
|
|
|
+ VALUES (1, $1, '500.00', '150.75', 1)
|
|
|
+ `, [testUser.id]);
|
|
|
+
|
|
|
+ // 创建测试订单,使用字符串格式的金额
|
|
|
+ const merchant = await CreditBalanceTestDataFactory.createTestMerchant(dataSource, 1, testUser.id);
|
|
|
+ const supplier = await CreditBalanceTestDataFactory.createTestSupplier(dataSource, 1, testUser.id);
|
|
|
+ const address = await CreditBalanceTestDataFactory.createTestDeliveryAddress(dataSource, 1, testUser.id);
|
|
|
+
|
|
|
+ const testOrder = await CreditBalanceTestDataFactory.createTestOrder(
|
|
|
+ dataSource,
|
|
|
+ 1,
|
|
|
+ testUser.id,
|
|
|
+ merchant.id,
|
|
|
+ supplier.id,
|
|
|
+ address.id,
|
|
|
+ {
|
|
|
+ orderNo: 'TEST_ORDER_007',
|
|
|
+ amount: 50.25,
|
|
|
+ payAmount: 50.25,
|
|
|
+ payState: PayStatus.UNPAID
|
|
|
+ }
|
|
|
+ );
|
|
|
+
|
|
|
+ const response = await client.payment.$post({
|
|
|
+ json: {
|
|
|
+ referenceId: testOrder.id.toString(),
|
|
|
+ operatorId: 1,
|
|
|
+ remark: '订单支付'
|
|
|
+ }
|
|
|
+ }, {
|
|
|
+ headers: {
|
|
|
+ 'Authorization': `Bearer ${userToken}`
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ expect(response.status).toBe(200);
|
|
|
+ if (response.status === 200) {
|
|
|
+ const data = await response.json();
|
|
|
+ // 已用额度应该是 150.75 + 50.25 = 201.00
|
|
|
+ expect(data.usedAmount).toBeCloseTo(201.00, 2);
|
|
|
+ // 可用额度应该是 500.00 - 201.00 = 299.00
|
|
|
+ expect(data.availableAmount).toBeCloseTo(299.00, 2);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ it('应该拒绝支付其他用户的订单(越权访问防护)', async () => {
|
|
|
+ // 先为testUser创建信用额度记录
|
|
|
+ const dataSource = await IntegrationTestDatabase.getDataSource();
|
|
|
+ const creditBalanceRepo = dataSource.getRepository(CreditBalanceMt);
|
|
|
+ await creditBalanceRepo.save({
|
|
|
+ tenantId: 1,
|
|
|
+ userId: testUser.id,
|
|
|
+ totalLimit: 10000.00,
|
|
|
+ usedAmount: 0.00,
|
|
|
+ isEnabled: 1
|
|
|
+ });
|
|
|
+
|
|
|
+ // 为otherUser创建信用额度记录
|
|
|
+ await creditBalanceRepo.save({
|
|
|
+ tenantId: 1,
|
|
|
+ userId: otherUser.id,
|
|
|
+ totalLimit: 5000.00,
|
|
|
+ usedAmount: 0.00,
|
|
|
+ isEnabled: 1
|
|
|
+ });
|
|
|
+
|
|
|
+ // 为otherUser创建测试订单(注意:订单的用户ID是otherUser.id)
|
|
|
+ const merchant = await CreditBalanceTestDataFactory.createTestMerchant(dataSource, 1, otherUser.id);
|
|
|
+ const supplier = await CreditBalanceTestDataFactory.createTestSupplier(dataSource, 1, otherUser.id);
|
|
|
+ const address = await CreditBalanceTestDataFactory.createTestDeliveryAddress(dataSource, 1, otherUser.id);
|
|
|
+
|
|
|
+ const otherUserOrder = await CreditBalanceTestDataFactory.createTestOrder(
|
|
|
+ dataSource,
|
|
|
+ 1,
|
|
|
+ otherUser.id, // 这是关键:订单属于otherUser
|
|
|
+ merchant.id,
|
|
|
+ supplier.id,
|
|
|
+ address.id,
|
|
|
+ {
|
|
|
+ orderNo: 'OTHER_USER_ORDER',
|
|
|
+ amount: 300.00,
|
|
|
+ payAmount: 300.00,
|
|
|
+ payState: PayStatus.UNPAID
|
|
|
+ }
|
|
|
+ );
|
|
|
+
|
|
|
+ // testUser尝试支付otherUser的订单
|
|
|
+ const response = await client.payment.$post({
|
|
|
+ json: {
|
|
|
+ referenceId: otherUserOrder.id.toString(),
|
|
|
+ operatorId: 1,
|
|
|
+ remark: '尝试支付其他用户的订单'
|
|
|
+ }
|
|
|
+ }, {
|
|
|
+ headers: {
|
|
|
+ 'Authorization': `Bearer ${userToken}` // testUser的token
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // 应该返回404,因为订单查询会失败(userId不匹配)
|
|
|
+ expect(response.status).toBe(404);
|
|
|
+ if (response.status === 404) {
|
|
|
+ const data = await response.json();
|
|
|
+ expect(data.message).toContain('订单不存在或无权访问');
|
|
|
+ }
|
|
|
+
|
|
|
+ // 验证订单状态没有改变
|
|
|
+ const orderRepo = dataSource.getRepository(OrderMt);
|
|
|
+ const orderAfterAttempt = await orderRepo.findOne({
|
|
|
+ where: { id: otherUserOrder.id }
|
|
|
+ });
|
|
|
+ expect(orderAfterAttempt).toBeDefined();
|
|
|
+ expect(orderAfterAttempt!.payState).toBe(PayStatus.UNPAID); // 应该还是未支付状态
|
|
|
+ });
|
|
|
+
|
|
|
+ it('应该拒绝跨租户支付订单(租户隔离防护)', async () => {
|
|
|
+ // 为otherTenantUser创建信用额度记录(租户2)
|
|
|
+ const dataSource = await IntegrationTestDatabase.getDataSource();
|
|
|
+ const creditBalanceRepo = dataSource.getRepository(CreditBalanceMt);
|
|
|
+ await creditBalanceRepo.save({
|
|
|
+ tenantId: 2,
|
|
|
+ userId: otherTenantUser.id,
|
|
|
+ totalLimit: 8000.00,
|
|
|
+ usedAmount: 0.00,
|
|
|
+ isEnabled: 1
|
|
|
+ });
|
|
|
+
|
|
|
+ // 为otherTenantUser创建测试订单(租户2)
|
|
|
+ const merchant = await CreditBalanceTestDataFactory.createTestMerchant(dataSource, 2, otherTenantUser.id);
|
|
|
+ const supplier = await CreditBalanceTestDataFactory.createTestSupplier(dataSource, 2, otherTenantUser.id);
|
|
|
+ const address = await CreditBalanceTestDataFactory.createTestDeliveryAddress(dataSource, 2, otherTenantUser.id);
|
|
|
+
|
|
|
+ const otherTenantOrder = await CreditBalanceTestDataFactory.createTestOrder(
|
|
|
+ dataSource,
|
|
|
+ 2, // 租户2
|
|
|
+ otherTenantUser.id,
|
|
|
+ merchant.id,
|
|
|
+ supplier.id,
|
|
|
+ address.id,
|
|
|
+ {
|
|
|
+ orderNo: 'OTHER_TENANT_ORDER',
|
|
|
+ amount: 400.00,
|
|
|
+ payAmount: 400.00,
|
|
|
+ payState: PayStatus.UNPAID
|
|
|
+ }
|
|
|
+ );
|
|
|
+
|
|
|
+ // testUser(租户1)尝试支付otherTenantUser(租户2)的订单
|
|
|
+ const response = await client.payment.$post({
|
|
|
+ json: {
|
|
|
+ referenceId: otherTenantOrder.id.toString(),
|
|
|
+ operatorId: 1,
|
|
|
+ remark: '尝试支付其他租户的订单'
|
|
|
+ }
|
|
|
+ }, {
|
|
|
+ headers: {
|
|
|
+ 'Authorization': `Bearer ${userToken}` // 租户1的用户
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ // 应该返回404,因为租户ID不匹配
|
|
|
+ expect(response.status).toBe(404);
|
|
|
+ if (response.status === 404) {
|
|
|
+ const data = await response.json();
|
|
|
+ expect(data.message).toContain('订单不存在或无权访问');
|
|
|
+ }
|
|
|
+
|
|
|
+ // 验证订单状态没有改变
|
|
|
+ const orderRepo = dataSource.getRepository(OrderMt);
|
|
|
+ const orderAfterAttempt = await orderRepo.findOne({
|
|
|
+ where: { id: otherTenantOrder.id }
|
|
|
+ });
|
|
|
+ expect(orderAfterAttempt).toBeDefined();
|
|
|
+ expect(orderAfterAttempt!.payState).toBe(PayStatus.UNPAID);
|
|
|
+ });
|
|
|
+
|
|
|
+ it('应该正确处理订单状态更新时的用户ID验证', async () => {
|
|
|
+ // 这个测试验证订单状态更新也包含用户ID检查
|
|
|
+ // 先创建信用额度记录
|
|
|
+ const dataSource = await IntegrationTestDatabase.getDataSource();
|
|
|
+ const creditBalanceRepo = dataSource.getRepository(CreditBalanceMt);
|
|
|
+ await creditBalanceRepo.save({
|
|
|
+ tenantId: 1,
|
|
|
+ userId: testUser.id,
|
|
|
+ totalLimit: 10000.00,
|
|
|
+ usedAmount: 0.00,
|
|
|
+ isEnabled: 1
|
|
|
+ });
|
|
|
+
|
|
|
+ // 创建测试订单
|
|
|
+ const merchant = await CreditBalanceTestDataFactory.createTestMerchant(dataSource, 1, testUser.id);
|
|
|
+ const supplier = await CreditBalanceTestDataFactory.createTestSupplier(dataSource, 1, testUser.id);
|
|
|
+ const address = await CreditBalanceTestDataFactory.createTestDeliveryAddress(dataSource, 1, testUser.id);
|
|
|
+
|
|
|
+ const testOrder = await CreditBalanceTestDataFactory.createTestOrder(
|
|
|
+ dataSource,
|
|
|
+ 1,
|
|
|
+ testUser.id,
|
|
|
+ merchant.id,
|
|
|
+ supplier.id,
|
|
|
+ address.id,
|
|
|
+ {
|
|
|
+ orderNo: 'USER_ID_VALIDATION_ORDER',
|
|
|
+ amount: 250.00,
|
|
|
+ payAmount: 250.00,
|
|
|
+ payState: PayStatus.UNPAID
|
|
|
+ }
|
|
|
+ );
|
|
|
+
|
|
|
+ // 正常支付应该成功
|
|
|
+ const response = await client.payment.$post({
|
|
|
+ json: {
|
|
|
+ referenceId: testOrder.id.toString(),
|
|
|
+ operatorId: 1,
|
|
|
+ remark: '正常支付测试用户ID验证'
|
|
|
+ }
|
|
|
+ }, {
|
|
|
+ headers: {
|
|
|
+ 'Authorization': `Bearer ${userToken}`
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ expect(response.status).toBe(200);
|
|
|
+ if (response.status === 200) {
|
|
|
+ const data = await response.json();
|
|
|
+ expect(data.usedAmount).toBeCloseTo(250, 2);
|
|
|
+
|
|
|
+ // 验证订单状态已更新
|
|
|
+ const orderRepo = dataSource.getRepository(OrderMt);
|
|
|
+ const updatedOrder = await orderRepo.findOne({
|
|
|
+ where: { id: testOrder.id }
|
|
|
+ });
|
|
|
+ expect(updatedOrder).toBeDefined();
|
|
|
+ expect(updatedOrder!.payState).toBe(PayStatus.SUCCESS);
|
|
|
+ expect(updatedOrder!.payType).toBe(PayType.CREDIT);
|
|
|
+ }
|
|
|
+ });
|
|
|
});
|
|
|
|
|
|
describe('结账恢复额度', () => {
|