Fix(medusa): Totals on draft orders (#2785)

* test subtotals on draft order operations

* fetch cart with subtotals when doing draft order operations

* write test for updating discounts seeing changes in totals

* formatting

* udpate test

* force taxes

* missing select

* add import

* rm force_taxes
This commit is contained in:
Philip Korsholm authored and GitHub committed 2022-12-16 10:21:53 +01:00
1 parent ea460b4e0b
commit 6283010fd6
9 files changed
+53 -22

No files matched your search

@@ -793,6 +793,10 @@ describe("/admin/draft-orders", () => {
expect(item.title).toEqual("Update title") expect(item.title).toEqual("Update title")
expect(item.unit_price).toEqual(1000) expect(item.unit_price).toEqual(1000)
expect(updatedDraftOrder.data.draft_order.cart.subtotal).not.toEqual(
undefined
)
expect(updatedDraftOrder.data.draft_order.cart.subtotal).not.toEqual(0)
}) })
it("removes the line item, if quantity is 0", async () => { it("removes the line item, if quantity is 0", async () => {
@@ -831,7 +835,7 @@ describe("/admin/draft-orders", () => {
await db.teardown() await db.teardown()
}) })
it("updates a line item on the draft order", async () => { it("updates the draft order", async () => {
const api = useApi() const api = useApi()
const response = await api.post( const response = await api.post(
@@ -861,17 +865,37 @@ describe("/admin/draft-orders", () => {
expect(response.status).toEqual(200) expect(response.status).toEqual(200)
const updatedDraftOrder = await api.get( const dorder = response.data.draft_order
`/admin/draft-orders/test-draft-order`,
adminReqConfig
)
const dorder = updatedDraftOrder.data.draft_order
expect(dorder.cart.email).toEqual("lebron@james.com") expect(dorder.cart.email).toEqual("lebron@james.com")
expect(dorder.cart.billing_address.first_name).toEqual("lebron") expect(dorder.cart.billing_address.first_name).toEqual("lebron")
expect(dorder.cart.shipping_address.last_name).toEqual("james") expect(dorder.cart.shipping_address.last_name).toEqual("james")
expect(dorder.cart.discounts[0].code).toEqual("TEST") expect(dorder.cart.discounts[0].code).toEqual("TEST")
expect(dorder.cart.total).toEqual(7200)
})
it("updates the draft order, removing discount", async () => {
const api = useApi()
const updatedDraftOrder = await api.post(
"/admin/draft-orders/test-draft-order",
{
discounts: [{ code: "TEST" }],
},
adminReqConfig
)
expect(updatedDraftOrder.data.draft_order.cart.total).toEqual(7200)
const orderWithNoDiscount = await api.post(
"/admin/draft-orders/test-draft-order",
{
discounts: [],
},
adminReqConfig
)
expect(orderWithNoDiscount.data.draft_order.cart.total).toEqual(8000)
}) })
}) })
}) })
View File
File mode changed.
@@ -11,6 +11,8 @@ import {
ValidateNested, ValidateNested,
} from "class-validator" } from "class-validator"
import { import {
defaultAdminDraftOrdersCartFields,
defaultAdminDraftOrdersCartRelations,
defaultAdminDraftOrdersFields, defaultAdminDraftOrdersFields,
defaultAdminDraftOrdersRelations, defaultAdminDraftOrdersRelations,
} from "." } from "."
@@ -18,7 +20,7 @@ import {
import { Type } from "class-transformer" import { Type } from "class-transformer"
import { EntityManager } from "typeorm" import { EntityManager } from "typeorm"
import { DraftOrder } from "../../../.." import { DraftOrder } from "../../../.."
import { DraftOrderService } from "../../../../services" import { CartService, DraftOrderService } from "../../../../services"
import { AddressPayload } from "../../../../types/common" import { AddressPayload } from "../../../../types/common"
import { DraftOrderCreateProps } from "../../../../types/draft-orders" import { DraftOrderCreateProps } from "../../../../types/draft-orders"
import { validator } from "../../../../utils/validator" import { validator } from "../../../../utils/validator"
@@ -230,6 +232,15 @@ export default async (req, res) => {
select: defaultAdminDraftOrdersFields, select: defaultAdminDraftOrdersFields,
}) })
const cartService: CartService = req.scope.resolve("cartService")
draftOrder.cart = await cartService
.withTransaction(manager)
.retrieveWithTotals(draftOrder.cart_id, {
relations: defaultAdminDraftOrdersCartRelations,
select: defaultAdminDraftOrdersCartFields,
})
res.status(200).json({ draft_order: draftOrder }) res.status(200).json({ draft_order: draftOrder })
} }
@@ -153,7 +153,7 @@ export default async (req, res) => {
draftOrder.cart = await cartService draftOrder.cart = await cartService
.withTransaction(manager) .withTransaction(manager)
.retrieve(draftOrder.cart_id, { .retrieveWithTotals(draftOrder.cart_id, {
relations: defaultAdminDraftOrdersCartRelations, relations: defaultAdminDraftOrdersCartRelations,
select: defaultAdminDraftOrdersCartFields, select: defaultAdminDraftOrdersCartFields,
}) })
@@ -89,7 +89,7 @@ export default async (req, res) => {
draftOrder.cart = await cartService draftOrder.cart = await cartService
.withTransaction(manager) .withTransaction(manager)
.retrieve(draftOrder.cart_id, { .retrieveWithTotals(draftOrder.cart_id, {
relations: defaultAdminDraftOrdersCartRelations, relations: defaultAdminDraftOrdersCartRelations,
select: defaultAdminDraftOrdersCartFields, select: defaultAdminDraftOrdersCartFields,
}) })
@@ -1,5 +1,6 @@
import { CartService, DraftOrderService } from "../../../../services" import { CartService, DraftOrderService } from "../../../../services"
import { import {
defaultAdminDraftOrdersCartFields,
defaultAdminDraftOrdersCartRelations, defaultAdminDraftOrdersCartRelations,
defaultAdminDraftOrdersFields, defaultAdminDraftOrdersFields,
defaultAdminDraftOrdersRelations, defaultAdminDraftOrdersRelations,
@@ -72,15 +73,10 @@ export default async (req, res) => {
relations: defaultAdminDraftOrdersRelations, relations: defaultAdminDraftOrdersRelations,
}) })
draftOrder.cart = await cartService.retrieveWithTotals( draftOrder.cart = await cartService.retrieveWithTotals(draftOrder.cart_id, {
draftOrder.cart_id, relations: defaultAdminDraftOrdersCartRelations,
{ select: defaultAdminDraftOrdersCartFields,
relations: defaultAdminDraftOrdersCartRelations, })
},
{
force_taxes: true,
}
)
res.json({ draft_order: draftOrder }) res.json({ draft_order: draftOrder })
} }
@@ -107,7 +107,7 @@ export default async (req, res) => {
await orderService.withTransaction(manager).capturePayment(result.id) await orderService.withTransaction(manager).capturePayment(result.id)
}) })
const order = await orderService.retrieve(result.id, { const order = await orderService.retrieveWithTotals(result.id, {
relations: defaultOrderRelations, relations: defaultOrderRelations,
select: defaultOrderFields, select: defaultOrderFields,
}) })
@@ -173,7 +173,7 @@ export default async (req, res) => {
await cartService.update(draftOrder.cart_id, cartDataToUpdate) await cartService.update(draftOrder.cart_id, cartDataToUpdate)
}) })
draftOrder.cart = await cartService.retrieve(draftOrder.cart_id, { draftOrder.cart = await cartService.retrieveWithTotals(draftOrder.cart_id, {
relations: defaultAdminDraftOrdersCartRelations, relations: defaultAdminDraftOrdersCartRelations,
select: defaultAdminDraftOrdersCartFields, select: defaultAdminDraftOrdersCartFields,
}) })
@@ -148,7 +148,7 @@ export default async (req, res) => {
draftOrder.cart = await cartService draftOrder.cart = await cartService
.withTransaction(manager) .withTransaction(manager)
.retrieve(draftOrder.cart_id, { .retrieveWithTotals(draftOrder.cart_id, {
relations: defaultAdminDraftOrdersCartRelations, relations: defaultAdminDraftOrdersCartRelations,
select: defaultAdminDraftOrdersCartFields, select: defaultAdminDraftOrdersCartFields,
}) })