diff --git a/.changeset/old-sites-clean.md b/.changeset/old-sites-clean.md new file mode 100644 index 00000000..09af110a --- /dev/null +++ b/.changeset/old-sites-clean.md @@ -0,0 +1,5 @@ +--- +"@labdigital/commercetools-mock": minor +--- + +Add removeQuantity action for inventory entries diff --git a/src/repositories/inventory-entry/actions.ts b/src/repositories/inventory-entry/actions.ts index b7f41cbd..4ef8e638 100644 --- a/src/repositories/inventory-entry/actions.ts +++ b/src/repositories/inventory-entry/actions.ts @@ -1,6 +1,7 @@ import type { InventoryEntry, InventoryEntryChangeQuantityAction, + InventoryEntryRemoveQuantityAction, InventoryEntrySetCustomFieldAction, InventoryEntrySetCustomTypeAction, InventoryEntrySetExpectedDeliveryAction, @@ -26,6 +27,17 @@ export class InventoryEntryUpdateHandler resource.availableQuantity = quantity; } + removeQuantity( + context: RepositoryContext, + resource: Writable, + { quantity }: InventoryEntryRemoveQuantityAction, + ) { + const newQuantity = Math.max(0, resource.quantityOnStock - quantity); + resource.quantityOnStock = newQuantity; + // don't know active reservations so just set to same value + resource.availableQuantity = newQuantity; + } + setCustomField( context: RepositoryContext, resource: InventoryEntry, diff --git a/src/services/inventory-entry.test.ts b/src/services/inventory-entry.test.ts index 58c88193..adf2bf38 100644 --- a/src/services/inventory-entry.test.ts +++ b/src/services/inventory-entry.test.ts @@ -93,6 +93,21 @@ describe("Inventory Entry Update Actions", () => { expect(response.body.quantityOnStock).toBe(300); }); + test("removeQuantity", async () => { + assert(inventoryEntry, "inventory entry not created"); + + const response = await supertest(ctMock.app) + .post(`/dummy/inventory/${inventoryEntry.id}`) + .send({ + version: 1, + actions: [{ action: "removeQuantity", quantity: 15 }], + }); + expect(response.status).toBe(200); + expect(response.body.version).toBe(2); + expect(response.body.availableQuantity).toBe(85); + expect(response.body.quantityOnStock).toBe(85); + }); + test("set custom type", async () => { assert(inventoryEntry, "inventory entry not created"); assert(customType, "custom type not created");