import 'package:flutter_test/flutter_test.dart'; import 'package:kooltab2/models/tab_item.dart'; import 'package:kooltab2/services/bar_tab_service.dart'; import 'package:kooltab2/services/product_service.dart'; import 'package:kooltab2/viewmodels/bar_screen_view_model.dart'; import 'package:kooltab2/viewmodels/inventory_view_model.dart'; import 'package:mocktail/mocktail.dart'; class MockBarTabService extends Mock implements BarTabService {} class MockProductService extends Mock implements ProductService {} void main() { late MockBarTabService barTabService; late MockProductService productService; late InventoryViewModel inventory; late BarScreenViewModel viewModel; setUp(() { barTabService = MockBarTabService(); productService = MockProductService(); inventory = InventoryViewModel(productService: productService); viewModel = BarScreenViewModel( barTabService: barTabService, inventory: inventory, ); }); test('propagates an insufficient-stock error from the transaction', () async { const item = TabItem( id: 'item-1', tabId: 'tab-1', productId: 'prod-1', productName: 'Chips', quantity: 20, unitPriceInCents: 150, ); when( () => barTabService.adjustTabItemQuantity(tabItemId: 'item-1', delta: 1), ).thenAnswer((_) async => throw const InsufficientStockException()); await expectLater( viewModel.changeItemQuantity(item, 1), throwsA(isA()), ); expect(viewModel.errorMessage, isNull); verify( () => barTabService.adjustTabItemQuantity(tabItemId: 'item-1', delta: 1), ).called(1); }); }