feat: add more detailed history and group per day
This commit is contained in:
@@ -196,6 +196,29 @@ void main() {
|
||||
expect(updatedTab.items.first.quantity, 3);
|
||||
});
|
||||
|
||||
test('records each addition as a separate purchase event', () async {
|
||||
final tab = await service.createTab(customerName: 'John');
|
||||
final product = createTestProduct();
|
||||
|
||||
await service.addProductToTab(tabId: tab.id, product: product);
|
||||
await service.addProductToTab(tabId: tab.id, product: product);
|
||||
|
||||
final barTab = (await service.getOpenTabs()).first;
|
||||
final historyTab = (await service.getOpenTabs(
|
||||
includeRemoved: true,
|
||||
)).first;
|
||||
|
||||
expect(barTab.items.first.quantity, 2);
|
||||
expect(barTab.items.first.purchases, hasLength(2));
|
||||
expect(historyTab.items.first.purchases, hasLength(2));
|
||||
expect(
|
||||
historyTab.items.first.purchases.every(
|
||||
(purchase) => !purchase.isRemoved,
|
||||
),
|
||||
isTrue,
|
||||
);
|
||||
});
|
||||
|
||||
test('adding product calculates correct line total', () async {
|
||||
final tab = await service.createTab(customerName: 'John');
|
||||
final product = createTestProduct(priceInCents: 450);
|
||||
@@ -251,7 +274,7 @@ void main() {
|
||||
expect(updatedTab!.items.first.quantity, 5);
|
||||
});
|
||||
|
||||
test('deletes item when the delta removes all quantity', () async {
|
||||
test('hides item when the delta removes all quantity', () async {
|
||||
final tab = await service.createTab(customerName: 'John');
|
||||
final product = createTestProduct();
|
||||
await service.addProductToTab(tabId: tab.id, product: product);
|
||||
@@ -282,6 +305,32 @@ void main() {
|
||||
expect(updatedProduct.stockQuantity, 100);
|
||||
});
|
||||
|
||||
test('keeps a removed purchase in the history audit trail', () async {
|
||||
final tab = await service.createTab(customerName: 'John');
|
||||
final product = createTestProduct();
|
||||
await service.addProductToTab(tabId: tab.id, product: product);
|
||||
await service.addProductToTab(tabId: tab.id, product: product);
|
||||
|
||||
final tabItemId = (await service.getTabById(tab.id))!.items.first.id;
|
||||
|
||||
await service.adjustTabItemQuantity(tabItemId: tabItemId, delta: -1);
|
||||
|
||||
final historyTab = (await service.getOpenTabs(
|
||||
includeRemoved: true,
|
||||
)).first;
|
||||
final item = historyTab.items.first;
|
||||
|
||||
expect(item.quantity, 1);
|
||||
expect(
|
||||
item.purchases.where((purchase) => purchase.isRemoved),
|
||||
hasLength(1),
|
||||
);
|
||||
expect(
|
||||
item.purchases.where((purchase) => !purchase.isRemoved),
|
||||
hasLength(1),
|
||||
);
|
||||
});
|
||||
|
||||
test(
|
||||
'applies concurrent deltas without losing stock consistency',
|
||||
() async {
|
||||
@@ -320,10 +369,38 @@ void main() {
|
||||
final closedTabs = await service.getClosedTabs();
|
||||
expect(closedTabs.length, 1);
|
||||
expect(closedTabs.first.customerName, 'John');
|
||||
expect(closedTabs.first.items.length, 1);
|
||||
expect(closedTabs.first.items.first.quantity, 2);
|
||||
expect(closedTabs.first.items.length, 2);
|
||||
expect(
|
||||
closedTabs.first.items.every((item) => item.quantity == 1),
|
||||
true,
|
||||
);
|
||||
expect(
|
||||
closedTabs.first.items.every((item) => item.purchasedAt != null),
|
||||
true,
|
||||
);
|
||||
});
|
||||
|
||||
test(
|
||||
'keeps removed purchases visible but excludes them from totals',
|
||||
() async {
|
||||
final tab = await service.createTab(customerName: 'John');
|
||||
final product = createTestProduct();
|
||||
await service.addProductToTab(tabId: tab.id, product: product);
|
||||
await service.addProductToTab(tabId: tab.id, product: product);
|
||||
|
||||
final tabItemId = (await service.getTabById(tab.id))!.items.first.id;
|
||||
await service.adjustTabItemQuantity(tabItemId: tabItemId, delta: -1);
|
||||
await service.closeTab(tab.id);
|
||||
|
||||
final closedTab = (await service.getClosedTabs()).first;
|
||||
|
||||
expect(closedTab.items, hasLength(2));
|
||||
expect(closedTab.items.where((item) => item.isRemoved), hasLength(1));
|
||||
expect(closedTab.itemCount, 1);
|
||||
expect(closedTab.totalInCents, 400);
|
||||
},
|
||||
);
|
||||
|
||||
test('clears tab items after closing', () async {
|
||||
final tab = await service.createTab(customerName: 'John');
|
||||
final product = createTestProduct();
|
||||
|
||||
Reference in New Issue
Block a user