feat(medusa): refactor the way the order edit handle the items (#2255)
* feat(medusa): Reftor the way the order edit works
This commit is contained in:
committed by
GitHub
parent
7e56935e7a
commit
d138baf460
@@ -33,6 +33,7 @@ describe("POST /admin/order-edits", () => {
|
||||
})
|
||||
|
||||
it("calls order edit service create", () => {
|
||||
expect(orderEditServiceMock.decorateTotals).toHaveBeenCalledTimes(1)
|
||||
expect(orderEditServiceMock.create).toHaveBeenCalledTimes(1)
|
||||
expect(orderEditServiceMock.create).toHaveBeenCalledWith(
|
||||
{
|
||||
|
||||
@@ -33,7 +33,7 @@ describe("GET /admin/order-edits/:id", () => {
|
||||
select: defaultOrderEditFields,
|
||||
relations: defaultOrderEditRelations,
|
||||
})
|
||||
expect(orderEditServiceMock.decorateLineItemsAndTotals).toHaveBeenCalledTimes(1)
|
||||
expect(orderEditServiceMock.decorateTotals).toHaveBeenCalledTimes(1)
|
||||
})
|
||||
|
||||
it("returns order", () => {
|
||||
|
||||
+22
-13
@@ -9,14 +9,18 @@ describe("GET /admin/order-edits/:id", () => {
|
||||
let subject
|
||||
|
||||
beforeAll(async () => {
|
||||
subject = await request("POST", `/admin/order-edits/${orderEditId}/request`, {
|
||||
adminSession: {
|
||||
jwt: {
|
||||
userId: IdMap.getId("admin_user"),
|
||||
subject = await request(
|
||||
"POST",
|
||||
`/admin/order-edits/${orderEditId}/request`,
|
||||
{
|
||||
adminSession: {
|
||||
jwt: {
|
||||
userId: IdMap.getId("admin_user"),
|
||||
},
|
||||
},
|
||||
},
|
||||
flags: [OrderEditingFeatureFlag],
|
||||
})
|
||||
flags: [OrderEditingFeatureFlag],
|
||||
}
|
||||
)
|
||||
})
|
||||
|
||||
afterAll(() => {
|
||||
@@ -25,15 +29,20 @@ describe("GET /admin/order-edits/:id", () => {
|
||||
|
||||
it("calls orderEditService requestConfirmation", () => {
|
||||
expect(orderEditServiceMock.requestConfirmation).toHaveBeenCalledTimes(1)
|
||||
expect(orderEditServiceMock.requestConfirmation).toHaveBeenCalledWith(orderEditId, {loggedInUser: IdMap.getId("admin_user")})
|
||||
expect(orderEditServiceMock.requestConfirmation).toHaveBeenCalledWith(
|
||||
orderEditId,
|
||||
{ loggedInUser: IdMap.getId("admin_user") }
|
||||
)
|
||||
})
|
||||
|
||||
it("returns updated orderEdit", () => {
|
||||
expect(subject.body.order_edit).toEqual(expect.objectContaining({
|
||||
id: orderEditId,
|
||||
requested_at: expect.any(String),
|
||||
requested_by: IdMap.getId("admin_user")
|
||||
}))
|
||||
expect(subject.body.order_edit).toEqual(
|
||||
expect.objectContaining({
|
||||
id: orderEditId,
|
||||
requested_at: expect.any(String),
|
||||
requested_by: IdMap.getId("admin_user"),
|
||||
})
|
||||
)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@@ -2,6 +2,10 @@ import { Request, Response } from "express"
|
||||
import { OrderEditService } from "../../../../services"
|
||||
import { IsOptional, IsString } from "class-validator"
|
||||
import { EntityManager } from "typeorm"
|
||||
import {
|
||||
defaultOrderEditFields,
|
||||
defaultOrderEditRelations,
|
||||
} from "../../../../types/order-edit"
|
||||
|
||||
/**
|
||||
* @oas [post] /order-edits
|
||||
@@ -62,13 +66,19 @@ export default async (req: Request, res: Response) => {
|
||||
const data = req.validatedBody as AdminPostOrderEditsReq
|
||||
const loggedInUserId = (req.user?.id ?? req.user?.userId) as string
|
||||
|
||||
const orderEdit = await manager.transaction(async (transactionManager) => {
|
||||
const orderEditServiceTx =
|
||||
orderEditService.withTransaction(transactionManager)
|
||||
const orderEdit = await orderEditServiceTx.create(data, { loggedInUserId })
|
||||
const createdOrderEdit = await manager.transaction(
|
||||
async (transactionManager) => {
|
||||
return await orderEditService
|
||||
.withTransaction(transactionManager)
|
||||
.create(data, { loggedInUserId })
|
||||
}
|
||||
)
|
||||
|
||||
return await orderEditServiceTx.decorateLineItemsAndTotals(orderEdit)
|
||||
let orderEdit = await orderEditService.retrieve(createdOrderEdit.id, {
|
||||
select: defaultOrderEditFields,
|
||||
relations: defaultOrderEditRelations,
|
||||
})
|
||||
orderEdit = await orderEditService.decorateTotals(orderEdit)
|
||||
|
||||
return res.json({ order_edit: orderEdit })
|
||||
}
|
||||
|
||||
@@ -60,8 +60,7 @@ export default async (req: Request, res: Response) => {
|
||||
const retrieveConfig = req.retrieveConfig
|
||||
|
||||
let orderEdit = await orderEditService.retrieve(id, retrieveConfig)
|
||||
|
||||
orderEdit = await orderEditService.decorateLineItemsAndTotals(orderEdit)
|
||||
orderEdit = await orderEditService.decorateTotals(orderEdit)
|
||||
|
||||
return res.json({ order_edit: orderEdit })
|
||||
}
|
||||
|
||||
@@ -3,6 +3,10 @@ import { Request, Response } from "express"
|
||||
import { EntityManager } from "typeorm"
|
||||
|
||||
import { OrderEditService } from "../../../../services"
|
||||
import {
|
||||
defaultOrderEditFields,
|
||||
defaultOrderEditRelations,
|
||||
} from "../../../../types/order-edit"
|
||||
|
||||
/**
|
||||
* @oas [post] /order-edits/{id}
|
||||
@@ -71,26 +75,19 @@ export default async (req: Request, res: Response) => {
|
||||
|
||||
const manager: EntityManager = req.scope.resolve("manager")
|
||||
|
||||
const orderEdit = await manager.transaction(async (transactionManager) => {
|
||||
const orderEditServiceTx =
|
||||
orderEditService.withTransaction(transactionManager)
|
||||
const updatedOrderEdit = await manager.transaction(
|
||||
async (transactionManager) => {
|
||||
return await orderEditService
|
||||
.withTransaction(transactionManager)
|
||||
.update(id, validatedBody)
|
||||
}
|
||||
)
|
||||
|
||||
const _orderEdit = await orderEditServiceTx.update(id, validatedBody)
|
||||
|
||||
const { items } = await orderEditServiceTx.computeLineItems(_orderEdit.id)
|
||||
_orderEdit.items = items
|
||||
|
||||
const totals = await orderEditServiceTx.getTotals(_orderEdit.id)
|
||||
_orderEdit.discount_total = totals.discount_total
|
||||
_orderEdit.gift_card_total = totals.gift_card_total
|
||||
_orderEdit.gift_card_tax_total = totals.gift_card_tax_total
|
||||
_orderEdit.shipping_total = totals.shipping_total
|
||||
_orderEdit.subtotal = totals.subtotal
|
||||
_orderEdit.tax_total = totals.tax_total
|
||||
_orderEdit.total = totals.total
|
||||
|
||||
return _orderEdit
|
||||
let orderEdit = await orderEditService.retrieve(updatedOrderEdit.id, {
|
||||
select: defaultOrderEditFields,
|
||||
relations: defaultOrderEditRelations,
|
||||
})
|
||||
orderEdit = await orderEditService.decorateTotals(orderEdit)
|
||||
|
||||
res.status(200).json({ order_edit: orderEdit })
|
||||
}
|
||||
|
||||
@@ -2,11 +2,6 @@ import { IdMap } from "medusa-test-utils"
|
||||
import { request } from "../../../../../helpers/test-request"
|
||||
import { orderEditServiceMock } from "../../../../../services/__mocks__/order-edit"
|
||||
import OrderEditingFeatureFlag from "../../../../../loaders/feature-flags/order-editing"
|
||||
import {
|
||||
defaultOrderEditFields,
|
||||
defaultOrderEditRelations,
|
||||
} from "../../../../../types/order-edit"
|
||||
import { storeOrderEditNotAllowedFields } from "../index"
|
||||
|
||||
describe("GET /store/order-edits/:id", () => {
|
||||
describe("successfully gets an order edit", () => {
|
||||
@@ -18,10 +13,14 @@ describe("GET /store/order-edits/:id", () => {
|
||||
}
|
||||
|
||||
beforeAll(async () => {
|
||||
subject = await request("POST", `/store/order-edits/${orderEditId}/decline`, {
|
||||
payload,
|
||||
flags: [OrderEditingFeatureFlag],
|
||||
})
|
||||
subject = await request(
|
||||
"POST",
|
||||
`/store/order-edits/${orderEditId}/decline`,
|
||||
{
|
||||
payload,
|
||||
flags: [OrderEditingFeatureFlag],
|
||||
}
|
||||
)
|
||||
})
|
||||
|
||||
afterAll(() => {
|
||||
@@ -30,8 +29,11 @@ describe("GET /store/order-edits/:id", () => {
|
||||
|
||||
it("calls orderService decline", () => {
|
||||
expect(orderEditServiceMock.decline).toHaveBeenCalledTimes(1)
|
||||
expect(orderEditServiceMock.decline).toHaveBeenCalledWith(orderEditId, { declinedReason: "test", loggedInUser: undefined})
|
||||
expect(orderEditServiceMock.decorateLineItemsAndTotals).toHaveBeenCalledTimes(1)
|
||||
expect(orderEditServiceMock.decline).toHaveBeenCalledWith(orderEditId, {
|
||||
declinedReason: "test",
|
||||
loggedInUser: undefined,
|
||||
})
|
||||
expect(orderEditServiceMock.decorateTotals).toHaveBeenCalledTimes(1)
|
||||
})
|
||||
|
||||
it("returns orderEdit", () => {
|
||||
|
||||
@@ -3,10 +3,9 @@ import { request } from "../../../../../helpers/test-request"
|
||||
import { orderEditServiceMock } from "../../../../../services/__mocks__/order-edit"
|
||||
import OrderEditingFeatureFlag from "../../../../../loaders/feature-flags/order-editing"
|
||||
import {
|
||||
defaultOrderEditFields,
|
||||
defaultOrderEditRelations,
|
||||
defaultStoreOrderEditFields,
|
||||
defaultStoreOrderEditRelations,
|
||||
} from "../../../../../types/order-edit"
|
||||
import { storeOrderEditNotAllowedFields } from "../index"
|
||||
|
||||
describe("GET /store/order-edits/:id", () => {
|
||||
describe("successfully gets an order edit", () => {
|
||||
@@ -26,14 +25,10 @@ describe("GET /store/order-edits/:id", () => {
|
||||
it("calls orderService retrieve", () => {
|
||||
expect(orderEditServiceMock.retrieve).toHaveBeenCalledTimes(1)
|
||||
expect(orderEditServiceMock.retrieve).toHaveBeenCalledWith(orderEditId, {
|
||||
select: defaultOrderEditFields.filter(
|
||||
(field) => !storeOrderEditNotAllowedFields.includes(field)
|
||||
),
|
||||
relations: defaultOrderEditRelations.filter(
|
||||
(field) => !storeOrderEditNotAllowedFields.includes(field)
|
||||
),
|
||||
select: defaultStoreOrderEditFields,
|
||||
relations: defaultStoreOrderEditRelations,
|
||||
})
|
||||
expect(orderEditServiceMock.decorateLineItemsAndTotals).toHaveBeenCalledTimes(1)
|
||||
expect(orderEditServiceMock.decorateTotals).toHaveBeenCalledTimes(1)
|
||||
})
|
||||
|
||||
it("returns order", () => {
|
||||
|
||||
@@ -2,6 +2,10 @@ import { IsOptional, IsString } from "class-validator"
|
||||
import { Request, Response } from "express"
|
||||
import { EntityManager } from "typeorm"
|
||||
import { OrderEditService } from "../../../../services"
|
||||
import {
|
||||
defaultStoreOrderEditFields,
|
||||
defaultStoreOrderEditRelations,
|
||||
} from "../../../../types/order-edit"
|
||||
|
||||
/**
|
||||
* @oas [post] /order-edits/{id}/decline
|
||||
@@ -71,9 +75,12 @@ export default async (req: Request, res: Response) => {
|
||||
loggedInUser: userId,
|
||||
})
|
||||
})
|
||||
let orderEdit = await orderEditService.retrieve(id)
|
||||
|
||||
orderEdit = await orderEditService.decorateLineItemsAndTotals(orderEdit)
|
||||
let orderEdit = await orderEditService.retrieve(id, {
|
||||
select: defaultStoreOrderEditFields,
|
||||
relations: defaultStoreOrderEditRelations,
|
||||
})
|
||||
orderEdit = await orderEditService.decorateTotals(orderEdit)
|
||||
|
||||
res.status(200).json({ order_edit: orderEdit })
|
||||
}
|
||||
|
||||
@@ -54,8 +54,7 @@ export default async (req: Request, res: Response) => {
|
||||
const retrieveConfig = req.retrieveConfig
|
||||
|
||||
let orderEdit = await orderEditService.retrieve(id, retrieveConfig)
|
||||
|
||||
orderEdit = await orderEditService.decorateLineItemsAndTotals(orderEdit)
|
||||
orderEdit = await orderEditService.decorateTotals(orderEdit)
|
||||
|
||||
return res.json({ order_edit: orderEdit })
|
||||
}
|
||||
|
||||
@@ -7,8 +7,8 @@ import { EmptyQueryParams } from "../../../../types/common"
|
||||
import { isFeatureFlagEnabled } from "../../../middlewares/feature-flag-enabled"
|
||||
import OrderEditingFeatureFlag from "../../../../loaders/feature-flags/order-editing"
|
||||
import {
|
||||
defaultOrderEditFields,
|
||||
defaultOrderEditRelations,
|
||||
defaultStoreOrderEditFields,
|
||||
defaultStoreOrderEditRelations,
|
||||
} from "../../../../types/order-edit"
|
||||
import { OrderEdit } from "../../../../models"
|
||||
import { StorePostOrderEditsOrderEditDecline } from "./decline-order-edit"
|
||||
@@ -25,13 +25,9 @@ export default (app) => {
|
||||
route.get(
|
||||
"/:id",
|
||||
transformQuery(EmptyQueryParams, {
|
||||
defaultRelations: defaultOrderEditRelations.filter(
|
||||
(field) => !storeOrderEditNotAllowedFields.includes(field)
|
||||
),
|
||||
defaultFields: defaultOrderEditFields.filter(
|
||||
(field) => !storeOrderEditNotAllowedFields.includes(field)
|
||||
),
|
||||
allowedFields: defaultOrderEditFields,
|
||||
defaultRelations: defaultStoreOrderEditRelations,
|
||||
defaultFields: defaultStoreOrderEditFields,
|
||||
allowedFields: defaultStoreOrderEditFields,
|
||||
isList: false,
|
||||
}),
|
||||
middlewares.wrap(require("./get-order-edit").default)
|
||||
@@ -54,10 +50,3 @@ export type StoreOrderEditsRes = {
|
||||
}
|
||||
|
||||
export * from "./decline-order-edit"
|
||||
|
||||
export const storeOrderEditNotAllowedFields = [
|
||||
"internal_note",
|
||||
"created_by",
|
||||
"confirmed_by",
|
||||
"canceled_by",
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user