Files
kooltab/test/dev_menu_view_model_test.dart

79 lines
2.3 KiB
Dart

import 'package:drift/native.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:kooltab2/database/app_database.dart';
import 'package:kooltab2/models/product.dart';
import 'package:kooltab2/services/bar_tab_service.dart';
import 'package:kooltab2/services/pin_lock_service.dart';
import 'package:kooltab2/services/product_service.dart';
import 'package:kooltab2/services/settings_service.dart';
import 'package:kooltab2/viewmodels/dev_menu_view_model.dart';
import 'package:mocktail/mocktail.dart';
class MockBarTabService extends Mock implements BarTabService {}
class MockPinLockService extends Mock implements PinLockService {}
class MockProductService extends Mock implements ProductService {}
class MockSettingsService extends Mock implements SettingsService {}
void main() {
late AppDatabase database;
late MockProductService productService;
late DevMenuViewModel viewModel;
setUp(() {
database = AppDatabase(NativeDatabase.memory());
productService = MockProductService();
when(() => productService.getProducts()).thenAnswer(
(_) async => const [
Product(
id: 'product-1',
name: 'Cola',
category: 'Drinks',
stockQuantity: 100,
lowStockThreshold: 10,
priceInCents: 250,
),
Product(
id: 'product-2',
name: 'Chips',
category: 'Snacks',
stockQuantity: 100,
lowStockThreshold: 10,
priceInCents: 150,
),
],
);
viewModel = DevMenuViewModel(
database: database,
productService: productService,
barTabService: MockBarTabService(),
settingsService: MockSettingsService(),
pinLockService: MockPinLockService(),
);
});
tearDown(() async {
await database.close();
});
test('generates individual timestamped mock history items', () async {
await viewModel.generateMockOrders(count: 12);
final tabs = await database.select(database.closedTabs).get();
final items = await database.select(database.closedTabItems).get();
expect(tabs, hasLength(12));
expect(items, isNotEmpty);
expect(items.every((item) => item.quantity == 1), isTrue);
expect(items.every((item) => item.purchasedAt != null), isTrue);
expect(
viewModel.lastAction,
startsWith('Generated 12 mock orders across '),
);
});
}