import 'package:flutter_test/flutter_test.dart'; import 'package:kooltab2/models/product.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( 'does not increase a tab item when its product is out of stock', () async { const product = Product( id: 'prod-1', name: 'Chips', category: 'Snacks', stockQuantity: 0, lowStockThreshold: 5, priceInCents: 150, ); const item = TabItem( id: 'item-1', tabId: 'tab-1', productId: 'prod-1', productName: 'Chips', quantity: 20, unitPriceInCents: 150, ); when( () => productService.getProducts(), ).thenAnswer((_) async => [product]); await inventory.load(); await expectLater( viewModel.changeItemQuantity(item, 21), throwsA(isA()), ); expect(viewModel.errorMessage, isNull); verifyNoMoreInteractions(barTabService); }, ); }