feat: line item adjustments (#1319)

* add: crud services + model + totals

* fix: enforce unique constraint on line item adjustment model and update service (#1241)

* add: unique constraint on model + fix service

* fix: unique constraint

* fix: add cascade on delete + fix discount relation

* fix: remove optional unique prop

* add: tests for ensuring line item adjustment db constraints (#1279)

* add: tests for ensuring db constraints

* fix: use given when then

* feat: adjust cart to include line item adjustments (#1242)

* fix: cart service + cart tests

* fix: remaining tests

* fix: swap tests

* fix: add relationship + fix oas

* refactor: applyDiscount

* fix: refactor applyDiscount and fix + add unit tests

* fix: plugins tests

* feat: line item adjustments draft orders (#1243)

* fix: draft order tests

* fix: constraint

* fix: wrong variable name

* fix: unique constraint

* progress: add tests

* fix: add cascade on delete + fix discount relation

* fix: remove optional unique prop

* fix: cart removeLineItem + tests

* fix: cart unit tests

* fix: update snapshot

* remove: verbose option

* rename arg

Co-authored-by: Sebastian Rindom <skrindom@gmail.com>

* add: create adjustments for swap additional_items

* add: create adjustments for return lines

* fix: unit test for creating adjustment for additional_items

* fix: create adjustments only for non return items + no deletion when item is a return item

* add: integration tests

* refactor: use refreshAdjustments method

* refactor test

Co-authored-by: Sebastian Rindom <skrindom@gmail.com>

Co-authored-by: Sebastian Rindom <skrindom@gmail.com>

Co-authored-by: Sebastian Rindom <skrindom@gmail.com>
This commit is contained in:
Zakaria El AsriandSebastian Rindom authored and GitHub committed 2022-04-12 15:49:31 +02:00
1 parent 607a382b4e
commit 1cfeb5dbd8
45 files changed
+3290 -581

No files matched your search

@@ -1,6 +1,6 @@
import { Connection } from "typeorm"
import faker from "faker"
import { LineItem, LineItemTaxLine } from "@medusajs/medusa"
import { LineItem, LineItemAdjustment, LineItemTaxLine } from "@medusajs/medusa"
type TaxLineFactoryData = {
rate: number
@@ -8,6 +8,11 @@ type TaxLineFactoryData = {
name: string
}
type LineItemAdjustmentFactoryData = Omit<LineItemAdjustment, "discount_id"> & {
discount_id: string
discount_code: string
}
export type LineItemFactoryData = {
id?: string
cart_id?: string
@@ -24,6 +29,7 @@ export type LineItemFactoryData = {
shipped_quantity?: boolean
returned_quantity?: boolean
tax_lines?: TaxLineFactoryData[]
adjustments: LineItemAdjustmentFactoryData[]
}
export const simpleLineItemFactory = async (
@@ -63,6 +69,7 @@ export const simpleLineItemFactory = async (
fulfilled_quantity: data.fulfilled_quantity || null,
shipped_quantity: data.shipped_quantity || null,
returned_quantity: data.returned_quantity || null,
adjustments: data.adjustments,
})
const line = await manager.save(toSave)
@@ -101,7 +101,17 @@ export const simpleOrderFactory = async (
await simpleShippingMethodFactory(connection, { ...sm, order_id: order.id })
}
const items = data.line_items
const items = data.line_items.map((item) => {
let adjustments = item?.adjustments || []
return {
...item,
adjustments: adjustments.map((adj) => ({
...adj,
discount_id: discounts.find((d) => d.code === adj?.discount_code),
})),
}
})
for (const item of items) {
await simpleLineItemFactory(connection, { ...item, order_id: id })
}