import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:jiu_client/core/models/page_result.dart'; import 'package:jiu_client/core/auth/auth_state.dart'; import 'package:jiu_client/models/finance.dart'; import 'package:jiu_client/providers/finance_provider.dart'; import 'package:jiu_client/repositories/finance_repository.dart'; import 'package:jiu_client/screens/finance/finance_screen.dart'; import '../support/golden_harness.dart'; /// design-distill 阶段4:财务整屏 golden × 三主题(桌面 + 移动)。 /// 验证类型徽章(应收/应付/收款/付款)+ 结清状态徽章 → StatusPill 随主题换色。 /// 更新基准:flutter test --update-goldens test/golden/finance_golden_test.dart const _records = [ FinanceRecord( id: 1, type: 'receivable', amount: 126800, balance: 126800, status: 'open', partnerName: '鼎丰超市', recordDate: '2026-06-20'), FinanceRecord( id: 2, type: 'payable', amount: 152600, balance: 0, status: 'closed', partnerName: '老窖酒水批发', recordDate: '2026-06-18'), FinanceRecord( id: 3, type: 'receipt', amount: 54200, balance: 0, status: 'closed', partnerName: '金樽酒楼', recordDate: '2026-06-15'), FinanceRecord( id: 4, type: 'payment', amount: 88400, balance: 88400, status: 'open', partnerName: '汾酒山西直营', recordDate: '2026-06-12'), ]; // 财务屏经 FutureBuilder 直读 repository,故覆盖 repo(implements + noSuchMethod // 只实现 listRecords,其余方法 golden 静态渲染不会触达)。 class _FakeFinanceRepo implements FinanceRepository { @override Future> listRecords({ String? type, String? month, int page = 1, int pageSize = 50, }) async => const PageResult(data: _records, total: 4, page: 1, pageSize: 20); @override dynamic noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation); } List _overrides() => [ financeRepositoryProvider.overrideWithValue(_FakeFinanceRepo()), isReadonlyProvider.overrideWithValue(false), ]; void main() { TestWidgetsFlutterBinding.ensureInitialized(); SharedPreferences.setMockInitialValues({}); goldenAcrossThemes( 'finance 整屏(桌面)', goldenPrefix: 'finance', child: () => const Scaffold(body: FinanceScreen()), overrides: _overrides, logical: const Size(1280, 900), ); goldenAcrossThemes( 'finance 整屏(移动)', goldenPrefix: 'finance_mobile', child: () => const Scaffold(body: FinanceScreen()), overrides: _overrides, logical: const Size(390, 1300), ); }