22e07613a1
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
133 lines
4.0 KiB
Dart
133 lines
4.0 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:jiu_client/core/auth/auth_state.dart';
|
|
import 'package:jiu_client/core/theme/themes.dart';
|
|
import 'package:jiu_client/models/license.dart';
|
|
import 'package:jiu_client/providers/license_provider.dart';
|
|
import 'package:jiu_client/providers/license_purchase_provider.dart';
|
|
import 'package:jiu_client/screens/license/license_screen.dart';
|
|
|
|
/// 订单管理 tab 冒烟测试:切到该 tab 能正常渲染 KPI/表格,点击行能打开详情
|
|
/// 抽屉且不抛异常(此 tab 无 golden 覆盖,靠本测试兜底基础可用性)。
|
|
|
|
class _FakeAuth extends AuthNotifier {
|
|
_FakeAuth() {
|
|
state = const AuthState(
|
|
user: AuthUser(
|
|
accessToken: 't',
|
|
refreshToken: 'r',
|
|
id: 1,
|
|
username: 'wang',
|
|
realName: '王经理',
|
|
shopNo: 'S001',
|
|
shopId: 1,
|
|
role: 'admin'),
|
|
);
|
|
}
|
|
}
|
|
|
|
class _FakeLicense extends LicenseNotifier {
|
|
@override
|
|
Future<LicenseInfo?> build() async => LicenseInfo(
|
|
id: 1,
|
|
type: 'annual',
|
|
isActive: true,
|
|
maxDevices: 2,
|
|
phase: 'normal',
|
|
expiresAt: DateTime.now().add(const Duration(days: 100)),
|
|
);
|
|
}
|
|
|
|
final _records = [
|
|
PurchaseRecord(
|
|
outTradeNo: 'pay-20260710101433-9c41f7ae',
|
|
productBizCode: 'annual_pro',
|
|
amountMinor: 599900,
|
|
currency: 'CNY',
|
|
amount: '',
|
|
status: 'pending',
|
|
payUrl: 'https://pay.example.com/checkout/1',
|
|
userName: '王老板',
|
|
createdAt: DateTime(2026, 7, 10, 10, 14),
|
|
),
|
|
PurchaseRecord(
|
|
outTradeNo: 'pay-20260610093015-4d7a20cf',
|
|
productBizCode: 'monthly_pro',
|
|
amountMinor: 59900,
|
|
currency: 'CNY',
|
|
amount: '',
|
|
status: 'paid',
|
|
payUrl: '',
|
|
userName: '王老板',
|
|
createdAt: DateTime(2026, 6, 10, 9, 30),
|
|
paidAt: DateTime(2026, 6, 10, 9, 31),
|
|
renewedTo: DateTime(2027, 6, 4),
|
|
),
|
|
PurchaseRecord(
|
|
outTradeNo: 'pay-20260702174902-b2e85c10',
|
|
productBizCode: 'annual_pro',
|
|
amountMinor: 599900,
|
|
currency: 'CNY',
|
|
amount: '',
|
|
status: 'failed',
|
|
payUrl: '',
|
|
userName: '王老板',
|
|
createdAt: DateTime(2026, 7, 2, 17, 49),
|
|
),
|
|
];
|
|
|
|
class _FakePurchaseList extends PurchaseListNotifier {
|
|
@override
|
|
Future<PurchaseListResult> build() async => PurchaseListResult(
|
|
items: _records,
|
|
total: _records.length,
|
|
summary: const PurchaseSummary(
|
|
paidTotalMinor: 419700,
|
|
paidCount: 5,
|
|
pendingCount: 1,
|
|
totalCount: 7,
|
|
),
|
|
);
|
|
}
|
|
|
|
Widget _screen() => ProviderScope(
|
|
overrides: [
|
|
authStateProvider.overrideWith((ref) => _FakeAuth()),
|
|
licenseProvider.overrideWith(() => _FakeLicense()),
|
|
purchaseListProvider.overrideWith(() => _FakePurchaseList()),
|
|
],
|
|
child: MaterialApp(
|
|
theme: buildTheme('a'),
|
|
home: const Scaffold(body: LicenseScreen()),
|
|
),
|
|
);
|
|
|
|
void main() {
|
|
testWidgets('订单管理 tab:KPI + 表格 + 详情抽屉均正常渲染', (tester) async {
|
|
await tester.pumpWidget(_screen());
|
|
await tester.pumpAndSettle();
|
|
|
|
await tester.tap(find.text('订单管理'));
|
|
await tester.pumpAndSettle();
|
|
|
|
// KPI
|
|
expect(find.text('订单总数'), findsOneWidget);
|
|
expect(find.text('待支付 · 点击筛选'), findsOneWidget);
|
|
|
|
// 表格行(套餐 + 状态徽章)
|
|
expect(find.text('高级版 · 年付'), findsWidgets);
|
|
expect(find.text('高级版 · 月付'), findsOneWidget);
|
|
expect(find.text('待支付'), findsWidgets);
|
|
expect(find.text('已支付'), findsWidgets);
|
|
expect(find.text('已关闭'), findsWidgets);
|
|
|
|
// 点开第一行详情(待支付单):抽屉出现「继续支付」「取消订单」
|
|
await tester.tap(find.text('pay-20260710101433-9c41f7ae'));
|
|
await tester.pumpAndSettle();
|
|
expect(find.text('订单详情'), findsOneWidget);
|
|
expect(find.text('继续支付'), findsOneWidget);
|
|
expect(find.text('取消订单'), findsOneWidget);
|
|
});
|
|
}
|