feat(inventory): support line-based assignments and movements

This commit is contained in:
2026-06-19 01:05:33 +02:00
parent 8e6a00c2a9
commit 6d34a2f74f
17 changed files with 713 additions and 189 deletions
@@ -46,8 +46,8 @@ describe("item use-cases", () => {
expect(result).toEqual({ success: true })
const item = await prisma.item.findUnique({
where: { name: "Laptop" },
include: { movements: true },
where: { sku: "LAPTOP" },
include: { stockMovementLines: { include: { movement: true } } },
})
expect(item).toMatchObject({
@@ -56,11 +56,13 @@ describe("item use-cases", () => {
stock: 3,
deletedAt: null,
})
expect(item?.movements).toHaveLength(1)
expect(item?.movements[0]).toMatchObject({
type: "IN",
quantity: 3,
userId: actor.id,
expect(item?.stockMovementLines).toHaveLength(1)
expect(item?.stockMovementLines[0]).toMatchObject({
stockDelta: 3,
})
expect(item?.stockMovementLines[0]?.movement).toMatchObject({
type: "RECEIPT",
performedById: actor.id,
})
})
@@ -102,7 +104,7 @@ describe("item use-cases", () => {
})
const stockedItem = await prisma.item.findUniqueOrThrow({
where: { name: "Keyboard" },
where: { sku: "KEYBOARD" },
})
await expect(deleteItemUseCase(stockedItem.id)).resolves.toEqual({
@@ -118,7 +120,7 @@ describe("item use-cases", () => {
})
const emptyItem = await prisma.item.findUniqueOrThrow({
where: { name: "Mouse" },
where: { sku: "MOUSE" },
})
await expect(deleteItemUseCase(emptyItem.id)).resolves.toEqual({