// 收益提现模块模型解析单测 import 'package:flutter_test/flutter_test.dart'; import 'package:video_app/screens/assets/assets_screen.dart'; import 'package:video_app/services/asset_service.dart'; void main() { group('AssetWallet', () { test('fromJson 解析(服务端字段)', () { final w = AssetWallet.fromJson(const { 'assets': 1234.5, 'assets_value_yuan': 123.45, 'total_earned': 2000.0, 'total_withdrawn': 765.5, 'min_withdraw_assets': 100, 'has_pending_withdraw': true, }); expect(w.assets, 1234.5); expect(w.assetsValueYuan, 123.45); expect(w.minWithdrawAssets, 100); expect(w.hasPendingWithdraw, isTrue); }); test('缺省兜底', () { final w = AssetWallet.fromJson(const {}); expect(w.assets, 0); expect(w.minWithdrawAssets, 100); expect(w.hasPendingWithdraw, isFalse); }); }); group('AssetRecord', () { test('fromJson + 类型标签', () { final r = AssetRecord.fromJson(const { 'id': 1, 'change_amount': 50.0, 'balance_after': 150.0, 'biz_type': 2, 'remark': '完整观看收益', 'created_at': '2026-10-15 10:00:00', }); expect(r.bizTypeLabel, '观看收益'); expect(r.isExpense, isFalse); final w = AssetRecord.fromJson(const { 'id': 2, 'change_amount': -100.0, 'balance_after': 50.0, 'biz_type': 4, }); expect(w.bizTypeLabel, '提现'); expect(w.isExpense, isTrue); // 未知类型 expect( AssetRecord.fromJson(const {'id': 3, 'biz_type': 99}).bizTypeLabel, '其他', ); }); }); group('提现', () { test('WithdrawResult 解析', () { final r = WithdrawResult.fromJson(const { 'withdraw_no': 'W20261015001', 'assets': 100.0, 'amount_yuan': 10.0, 'status': 0, 'status_text': '待审核', }); expect(r.withdrawNo, 'W20261015001'); expect(r.amountYuan, 10.0); expect(r.statusText, '待审核'); }); test('WithdrawRecord 解析 + 渠道标签', () { final r = WithdrawRecord.fromJson(const { 'withdraw_no': 'W1', 'assets': 500.0, 'amount_yuan': 50.0, 'channel': 3, 'status': 1, 'status_text': '已打款', 'created_at': '2026-10-15 11:00:00', }); expect(r.channelLabel, 'USDT'); expect(r.status, 1); expect( WithdrawRecord.fromJson(const {'channel': 99}).channelLabel, '未知', ); }); }); group('fmtAssets', () { test('整数不带小数点', () { expect(fmtAssets(100.0), '100'); expect(fmtAssets(1234.5), '1234.50'); expect(fmtAssets(0), '0'); }); }); }