fix(medusa): Optimize Cart totals calculation (#2372)

**What**

The existing totals calculations are extremely heavy and perform an enormous amount of duplicate work. The changes here remove large parts of the overhead and improves response times for cart endpoints up to 30x.
This commit is contained in:
Sebastian Rindom
2022-10-07 08:44:06 +00:00
committed by GitHub
parent 527c587d8f
commit 3d255302b0
45 changed files with 10970 additions and 8082 deletions
@@ -32,7 +32,7 @@ describe("/admin/orders", () => {
beforeAll(async () => {
const cwd = path.resolve(path.join(__dirname, "..", "..", ".."))
dbConnection = await initDb({ cwd })
medusaProcess = await setupServer({ cwd })
medusaProcess = await setupServer({ cwd, verbose: false })
})
afterAll(async () => {
@@ -495,7 +495,6 @@ describe("[MEDUSA_FF_TAX_INCLUSIVE_PRICING] /store/carts", () => {
const expectedItemTotals = {
subtotal: 200,
gift_card_total: 0,
discount_total: 30,
total: 204,
original_total: 240,
@@ -28,7 +28,7 @@ describe("Automatic Cart Taxes", () => {
beforeAll(async () => {
const cwd = path.resolve(path.join(__dirname, "..", ".."))
dbConnection = await initDb({ cwd })
medusaProcess = await setupServer({ cwd })
medusaProcess = await setupServer({ cwd, verbose: false })
})
afterAll(async () => {
@@ -74,7 +74,6 @@ describe("Cart Totals Calculations", () => {
expect(res.data.cart.items[0].original_total).toEqual(110)
expect(res.data.cart.items[0].original_tax_total).toEqual(10)
expect(res.data.cart.items[0].discount_total).toEqual(0)
expect(res.data.cart.items[0].gift_card_total).toEqual(0)
})
it("sets correct line item totals for a cart with item of price 100; tax rate 10; discount 10", async () => {
@@ -123,7 +122,6 @@ describe("Cart Totals Calculations", () => {
expect(res.data.cart.items[0].original_total).toEqual(110)
expect(res.data.cart.items[0].original_tax_total).toEqual(10)
expect(res.data.cart.items[0].discount_total).toEqual(10)
expect(res.data.cart.items[0].gift_card_total).toEqual(0)
})
it("doesn't include taxes in !automatic_taxes regions", async () => {
@@ -174,7 +172,6 @@ describe("Cart Totals Calculations", () => {
expect(res.data.cart.items[0].original_total).toEqual(100)
expect(res.data.cart.items[0].original_tax_total).toEqual(0)
expect(res.data.cart.items[0].discount_total).toEqual(10)
expect(res.data.cart.items[0].gift_card_total).toEqual(0)
})
it("includes taxes in !automatic_taxes regions when forced", async () => {
@@ -227,6 +224,5 @@ describe("Cart Totals Calculations", () => {
expect(res.data.cart.items[0].original_total).toEqual(110)
expect(res.data.cart.items[0].original_tax_total).toEqual(10)
expect(res.data.cart.items[0].discount_total).toEqual(10)
expect(res.data.cart.items[0].gift_card_total).toEqual(0)
})
})
@@ -25,7 +25,7 @@ describe("Manual Cart Taxes", () => {
beforeAll(async () => {
const cwd = path.resolve(path.join(__dirname, "..", ".."))
dbConnection = await initDb({ cwd })
medusaProcess = await setupServer({ cwd })
medusaProcess = await setupServer({ cwd, verbose: false })
})
afterAll(async () => {
@@ -76,7 +76,7 @@ describe("Manual Cart Taxes", () => {
const response = await api.get("/store/carts/test-cart")
expect(response.status).toEqual(200)
expect(response.data.cart.tax_total).toEqual(null)
expect(response.data.cart.tax_total).toEqual(0)
expect(response.data.cart.total).toEqual(100)
})