From 2c61d829352752dc6289d70f1c43539066fa65c0 Mon Sep 17 00:00:00 2001 From: hsiegeln <37154749+hsiegeln@users.noreply.github.com> Date: Tue, 21 Apr 2026 23:13:58 +0200 Subject: [PATCH] feat(shopping): clearCart --- src/lib/server/shopping/repository.ts | 8 +++++-- tests/integration/shopping-repository.test.ts | 21 ++++++++++++++++++- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/lib/server/shopping/repository.ts b/src/lib/server/shopping/repository.ts index 2621e31..c70350d 100644 --- a/src/lib/server/shopping/repository.ts +++ b/src/lib/server/shopping/repository.ts @@ -187,6 +187,10 @@ export function clearCheckedItems(db: Database.Database): void { tx(); } -export function clearCart(_db: Database.Database): void { - throw new Error('not implemented'); +export function clearCart(db: Database.Database): void { + const tx = db.transaction(() => { + db.prepare('DELETE FROM shopping_cart_recipe').run(); + db.prepare('DELETE FROM shopping_cart_check').run(); + }); + tx(); } diff --git a/tests/integration/shopping-repository.test.ts b/tests/integration/shopping-repository.test.ts index dd0469e..91d41b3 100644 --- a/tests/integration/shopping-repository.test.ts +++ b/tests/integration/shopping-repository.test.ts @@ -7,7 +7,8 @@ import { listShoppingList, setCartServings, toggleCheck, - clearCheckedItems + clearCheckedItems, + clearCart } from '../../src/lib/server/shopping/repository'; import type { Recipe } from '../../src/lib/types'; @@ -285,3 +286,21 @@ describe('clearCheckedItems', () => { expect(listShoppingList(db).recipes).toHaveLength(1); }); }); + +describe('clearCart', () => { + it('deletes all cart recipes and all checks', () => { + const db = openInMemoryForTest(); + const id = insertRecipe(db, recipe({ + ingredients: [{ position: 1, quantity: 1, unit: 'Stk', name: 'Apfel', note: null, raw_text: '', section_heading: null }] + })); + addRecipeToCart(db, id, null); + toggleCheck(db, 'apfel', 'stk', true); + clearCart(db); + const snap = listShoppingList(db); + expect(snap.recipes).toEqual([]); + expect(snap.rows).toEqual([]); + expect(snap.uncheckedCount).toBe(0); + const anyCheck = db.prepare('SELECT 1 FROM shopping_cart_check').get(); + expect(anyCheck).toBeUndefined(); + }); +});