import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:groci/models/line_item.dart'; import 'package:groci/widgets/item_edit_sheet.dart'; void main() { testWidgets('edit sheet syncs quantity unit and total', (tester) async { LineItem? saved; await tester.pumpWidget( MaterialApp( home: Scaffold( body: Builder( builder: (context) { return TextButton( onPressed: () async { saved = await showItemEditSheet( context, item: LineItem( id: '1', name: 'Milk', price: 3.98, quantity: 2, unitPrice: 1.99, ), ); }, child: const Text('Open'), ); }, ), ), ), ); await tester.tap(find.text('Open')); await tester.pumpAndSettle(); expect(find.text('Edit item'), findsOneWidget); expect(find.text('Qty'), findsOneWidget); expect(find.text('Unit price'), findsOneWidget); expect(find.text('Total price'), findsOneWidget); expect(find.text('2 × € 1.99'), findsOneWidget); await tester.enterText(find.widgetWithText(TextField, 'Qty'), '3'); await tester.pump(); expect(find.text('3 × € 1.99'), findsOneWidget); await tester.tap(find.text('Save')); await tester.pumpAndSettle(); expect(saved, isNotNull); expect(saved!.name, 'Milk'); expect(saved!.quantity, 3); expect(saved!.unitPrice, 1.99); expect(saved!.price, closeTo(5.97, 0.001)); }); }