feat: add more detailed history and group per day
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:kooltab2/models/bar_tab.dart';
|
||||
import 'package:kooltab2/models/closed_tab.dart';
|
||||
import 'package:kooltab2/models/payment_method.dart';
|
||||
import 'package:kooltab2/services/bar_tab_service.dart';
|
||||
import 'package:kooltab2/viewmodels/history_view_model.dart';
|
||||
import 'package:mocktail/mocktail.dart';
|
||||
|
||||
class MockBarTabService extends Mock implements BarTabService {}
|
||||
|
||||
void main() {
|
||||
late MockBarTabService service;
|
||||
late HistoryViewModel viewModel;
|
||||
|
||||
setUp(() {
|
||||
service = MockBarTabService();
|
||||
viewModel = HistoryViewModel(barTabService: service);
|
||||
|
||||
when(
|
||||
() => service.getClosedTabsPaginated(
|
||||
limit: 20,
|
||||
offset: 0,
|
||||
customerName: null,
|
||||
),
|
||||
).thenAnswer((_) async => []);
|
||||
when(
|
||||
() => service.getClosedTabCount(customerName: null),
|
||||
).thenAnswer((_) async => 0);
|
||||
when(() => service.getDistinctCustomerNames()).thenAnswer((_) async => []);
|
||||
when(
|
||||
() => service.getOpenTabs(includeRemoved: true),
|
||||
).thenAnswer((_) async => [_openTab]);
|
||||
});
|
||||
|
||||
test('loads open tabs for the top of history', () async {
|
||||
await viewModel.load();
|
||||
|
||||
expect(viewModel.openTabs, hasLength(1));
|
||||
expect(viewModel.openTabs.first.customerName, 'Alice');
|
||||
expect(viewModel.customerNames, ['Alice']);
|
||||
});
|
||||
|
||||
test('search filters open tabs as well as closed tabs', () async {
|
||||
await viewModel.load();
|
||||
|
||||
viewModel.search('bob');
|
||||
|
||||
expect(viewModel.openTabs, isEmpty);
|
||||
});
|
||||
|
||||
test('sorts closed and open tabs newest first', () async {
|
||||
final olderClosedTab = _closedTab('closed-old', DateTime(2026, 8, 1));
|
||||
final newerClosedTab = _closedTab('closed-new', DateTime(2026, 8, 3));
|
||||
final olderOpenTab = _barTab('open-old', DateTime(2026, 8, 1));
|
||||
final newerOpenTab = _barTab('open-new', DateTime(2026, 8, 3));
|
||||
|
||||
when(
|
||||
() => service.getClosedTabsPaginated(
|
||||
limit: 20,
|
||||
offset: 0,
|
||||
customerName: null,
|
||||
),
|
||||
).thenAnswer((_) async => [olderClosedTab, newerClosedTab]);
|
||||
when(
|
||||
() => service.getClosedTabCount(customerName: null),
|
||||
).thenAnswer((_) async => 2);
|
||||
when(
|
||||
() => service.getOpenTabs(includeRemoved: true),
|
||||
).thenAnswer((_) async => [olderOpenTab, newerOpenTab]);
|
||||
|
||||
await viewModel.load();
|
||||
|
||||
expect(viewModel.closedTabs.map((tab) => tab.id), [
|
||||
'closed-new',
|
||||
'closed-old',
|
||||
]);
|
||||
expect(viewModel.openTabs.map((tab) => tab.id), ['open-new', 'open-old']);
|
||||
});
|
||||
}
|
||||
|
||||
ClosedTab _closedTab(String id, DateTime closedAt) {
|
||||
return ClosedTab(
|
||||
id: id,
|
||||
originalTabId: id,
|
||||
customerName: id,
|
||||
closedAt: closedAt,
|
||||
paymentMethod: PaymentMethod.cash,
|
||||
items: const [],
|
||||
);
|
||||
}
|
||||
|
||||
BarTab _barTab(String id, DateTime openedAt) {
|
||||
return BarTab(
|
||||
id: id,
|
||||
customerName: id,
|
||||
status: 'open',
|
||||
openedAt: openedAt,
|
||||
items: const [],
|
||||
);
|
||||
}
|
||||
|
||||
final _openTab = BarTab(
|
||||
id: 'tab-1',
|
||||
customerName: 'Alice',
|
||||
status: 'open',
|
||||
openedAt: DateTime(2026, 8, 2, 12),
|
||||
items: const [],
|
||||
);
|
||||
Reference in New Issue
Block a user