import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:jiu_client/core/theme/themes.dart'; import 'package:jiu_client/widgets/order_detail_drawer.dart'; /// 2026-07 定价重设计:出库详情按角色两种形态—— /// 管理员(行带 cost/profit)= 成本价/售价/利润 三数值列 + 合计利润; /// operator(不带)= 售价/小计两列,无成本无利润。 void main() { Widget host(OrderDetailDrawer drawer) => MaterialApp( theme: buildTheme('a'), home: Scaffold(body: drawer), ); const line6 = OrderLine( name: '汾酒青花20年', code: 'ZXZ027232', series: '普通/53度', spec: '500ml*6/件', qty: '2', price: '¥400.00', amount: '¥800.00', cost: '¥355.00', profit: '¥90.00', ); const line4 = OrderLine( name: '汾酒青花20年', code: 'ZXZ027232', series: '普通/53度', spec: '500ml*6/件', qty: '2', price: '¥400.00', amount: '¥800.00', ); testWidgets('管理员形态:成本价/售价/利润列 + 合计利润', (tester) async { await tester.pumpWidget(host(OrderDetailDrawer( title: 'CK001', infoRows: const [], linesLabel: '出库明细', lines: const [line6], totalText: '¥800.00', profitText: '¥90.00', priceLabel: '售价', amountLabel: '小计', actionGroups: const [], ))); expect(find.text('成本价'), findsOneWidget); expect(find.text('售价'), findsOneWidget); expect(find.text('总售价'), findsOneWidget); expect(find.text('¥800.00'), findsNWidgets(2)); // 行总售价 + 合计金额 expect(find.text('利润'), findsOneWidget); expect(find.text('¥355.00'), findsOneWidget); expect(find.text('¥90.00'), findsNWidgets(2)); // 行利润 + 合计利润 expect(find.text('合计利润 '), findsOneWidget); }); testWidgets('operator 形态:售价/小计,无成本无利润', (tester) async { await tester.pumpWidget(host(OrderDetailDrawer( title: 'CK001', infoRows: const [], linesLabel: '出库明细', lines: const [line4], totalText: '¥800.00', priceLabel: '售价', amountLabel: '小计', actionGroups: const [], ))); expect(find.text('售价'), findsOneWidget); expect(find.text('小计'), findsOneWidget); expect(find.text('成本价'), findsNothing); expect(find.text('利润'), findsNothing); expect(find.text('合计利润 '), findsNothing); expect(find.text('¥800.00'), findsNWidgets(2)); // 行小计 + 合计金额 }); }