feat(client): 授权管理独立一级屏——授权/购买续费/订单管理三 tab(桌面+移动)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,132 @@
|
||||
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);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user