94 lines
3.0 KiB
Dart
94 lines
3.0 KiB
Dart
|
|
// 功能描述:银行卡与提现接口契约、金额精度和会话隔离测试;版本:1.0.0。
|
|||
|
|
import 'dart:convert';
|
|||
|
|
|
|||
|
|
import 'package:flutter_test/flutter_test.dart';
|
|||
|
|
import 'package:http/http.dart' as http;
|
|||
|
|
import 'package:http/testing.dart';
|
|||
|
|
import 'package:user_app/data/repositories/client_repository.dart';
|
|||
|
|
import 'package:user_app/data/services/api_client.dart';
|
|||
|
|
import 'package:user_app/domain/models/wallet_account.dart';
|
|||
|
|
|
|||
|
|
void main() {
|
|||
|
|
test('提现金额按整数分解析,不接受超两位小数和指数', () {
|
|||
|
|
expect(parseWithdrawalAmount('300'), 30000);
|
|||
|
|
expect(parseWithdrawalAmount('10.08'), 1008);
|
|||
|
|
expect(parseWithdrawalAmount('1.001'), isNull);
|
|||
|
|
expect(parseWithdrawalAmount('1e3'), isNull);
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
test('银行卡列表只读取服务端脱敏字段', () async {
|
|||
|
|
var requestedPath = '';
|
|||
|
|
final repo = ClientRepository(
|
|||
|
|
ApiClient(
|
|||
|
|
() => 'token',
|
|||
|
|
client: MockClient((request) async {
|
|||
|
|
requestedPath = request.url.path;
|
|||
|
|
return http.Response.bytes(
|
|||
|
|
utf8.encode(
|
|||
|
|
jsonEncode({
|
|||
|
|
'code': 0,
|
|||
|
|
'details': [
|
|||
|
|
{
|
|||
|
|
'identity': 'b1',
|
|||
|
|
'card_no_masked': '**** **** **** 2868',
|
|||
|
|
'bank_name': '中国建设银行',
|
|||
|
|
'card_owner': '张先生',
|
|||
|
|
'bank_type': 'debit',
|
|||
|
|
'is_default': true,
|
|||
|
|
},
|
|||
|
|
],
|
|||
|
|
}),
|
|||
|
|
),
|
|||
|
|
200,
|
|||
|
|
headers: {'content-type': 'application/json; charset=utf-8'},
|
|||
|
|
);
|
|||
|
|
}),
|
|||
|
|
),
|
|||
|
|
);
|
|||
|
|
final bank = (await repo.walletBanks()).single;
|
|||
|
|
expect(requestedPath, '/heqi/client/v1/user/wallet/banks');
|
|||
|
|
expect(bank.maskedNumber, endsWith('2868'));
|
|||
|
|
expect(bank.typeName, '储蓄卡');
|
|||
|
|
expect(bank.isDefault, isTrue);
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
test('提现请求使用公开银行卡标识、整数分和幂等号', () async {
|
|||
|
|
final repo = ClientRepository(
|
|||
|
|
ApiClient(
|
|||
|
|
() => 'token',
|
|||
|
|
client: MockClient((request) async {
|
|||
|
|
expect(request.method, 'POST');
|
|||
|
|
expect(request.url.path, '/heqi/client/v1/user/wallet/withdrawals');
|
|||
|
|
expect(jsonDecode(request.body), {
|
|||
|
|
'bank_identity': 'b1',
|
|||
|
|
'amount': 30000,
|
|||
|
|
'request_no': 'request-1',
|
|||
|
|
'payment_password': '123456',
|
|||
|
|
});
|
|||
|
|
return http.Response(
|
|||
|
|
jsonEncode({
|
|||
|
|
'code': 0,
|
|||
|
|
'details': {
|
|||
|
|
'identity': 'w1',
|
|||
|
|
'cash_no': 'WD1',
|
|||
|
|
'amount': 30000,
|
|||
|
|
'fee': 0,
|
|||
|
|
'apply_status': 10,
|
|||
|
|
'created_at': '2026-09-11T12:00:00+08:00',
|
|||
|
|
},
|
|||
|
|
}),
|
|||
|
|
200,
|
|||
|
|
);
|
|||
|
|
}),
|
|||
|
|
),
|
|||
|
|
);
|
|||
|
|
final result = await repo.createWalletWithdrawal(
|
|||
|
|
bankIdentity: 'b1',
|
|||
|
|
amount: 30000,
|
|||
|
|
requestNo: 'request-1',
|
|||
|
|
paymentPassword: '123456',
|
|||
|
|
);
|
|||
|
|
expect(result.statusName, '待审核');
|
|||
|
|
});
|
|||
|
|
}
|