From 85bf19708464a0c14245ea74f263c552cf3b10af Mon Sep 17 00:00:00 2001 From: hsiegeln <37154749+hsiegeln@users.noreply.github.com> Date: Tue, 21 Apr 2026 22:59:12 +0200 Subject: [PATCH] feat(shopping): setCartServings mit Positiv-Validation --- src/lib/server/shopping/repository.ts | 13 ++++++++---- tests/integration/shopping-repository.test.ts | 21 ++++++++++++++++++- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/lib/server/shopping/repository.ts b/src/lib/server/shopping/repository.ts index bd0e338..58948ba 100644 --- a/src/lib/server/shopping/repository.ts +++ b/src/lib/server/shopping/repository.ts @@ -55,11 +55,16 @@ export function removeRecipeFromCart( } export function setCartServings( - _db: Database.Database, - _recipeId: number, - _servings: number + db: Database.Database, + recipeId: number, + servings: number ): void { - throw new Error('not implemented'); + if (!Number.isInteger(servings) || servings <= 0) { + throw new Error(`Invalid servings: ${servings}`); + } + db.prepare( + 'UPDATE shopping_cart_recipe SET servings = ? WHERE recipe_id = ?' + ).run(servings, recipeId); } export function listShoppingList(db: Database.Database): ShoppingListSnapshot { diff --git a/tests/integration/shopping-repository.test.ts b/tests/integration/shopping-repository.test.ts index 388e310..aa50ee4 100644 --- a/tests/integration/shopping-repository.test.ts +++ b/tests/integration/shopping-repository.test.ts @@ -4,7 +4,8 @@ import { insertRecipe } from '../../src/lib/server/recipes/repository'; import { addRecipeToCart, removeRecipeFromCart, - listShoppingList + listShoppingList, + setCartServings } from '../../src/lib/server/shopping/repository'; import type { Recipe } from '../../src/lib/types'; @@ -84,3 +85,21 @@ describe('removeRecipeFromCart', () => { expect(() => removeRecipeFromCart(db, id)).not.toThrow(); }); }); + +describe('setCartServings', () => { + it('updates servings for a cart recipe', () => { + const db = openInMemoryForTest(); + const id = insertRecipe(db, recipe()); + addRecipeToCart(db, id, null, 4); + setCartServings(db, id, 8); + expect(listShoppingList(db).recipes[0].servings).toBe(8); + }); + + it('rejects non-positive servings', () => { + const db = openInMemoryForTest(); + const id = insertRecipe(db, recipe()); + addRecipeToCart(db, id, null, 4); + expect(() => setCartServings(db, id, 0)).toThrow(); + expect(() => setCartServings(db, id, -3)).toThrow(); + }); +});