feat(medusa): Respond with order when cart is already completed (#5766)

This commit is contained in:
Oli Juhl
2023-12-01 08:17:12 +00:00
committed by GitHub
parent c808317044
commit 428331a653
6 changed files with 106 additions and 61 deletions

View File

@@ -24,14 +24,6 @@ Object {
}
`;
exports[`/store/carts POST /store/carts/:id returns early, if cart is already completed 1`] = `
Object {
"code": "cart_incompatible_state",
"message": "Cart has already been completed",
"type": "not_allowed",
}
`;
exports[`/store/carts shipping address + region updates updates region only - single to multiple countries 1`] = `
Object {
"address_1": null,

View File

@@ -2234,24 +2234,27 @@ describe("/store/carts", () => {
expect(createdOrder.status).toEqual(200)
})
it("returns early, if cart is already completed", async () => {
const manager = dbConnection.manager
it("should return early, if cart is already completed", async () => {
const api = useApi()
await manager.query(
`UPDATE "cart"
SET completed_at=current_timestamp
WHERE id = 'test-cart-2'`
const completedCart = await api.post(
`/store/carts/test-cart-2/complete-cart`
)
try {
await api.post(`/store/carts/test-cart-2/complete-cart`)
} catch (error) {
expect(error.response.data).toMatchSnapshot({
type: "not_allowed",
message: "Cart has already been completed",
code: "cart_incompatible_state",
expect(completedCart.status).toEqual(200)
const alreadyCompletedCart = await api.post(
`/store/carts/test-cart-2/complete-cart`
)
expect(alreadyCompletedCart.data.data).toEqual(
expect.objectContaining({
cart_id: "test-cart-2",
id: expect.any(String),
})
expect(error.response.status).toEqual(409)
}
)
expect(alreadyCompletedCart.data.type).toEqual("order")
expect(alreadyCompletedCart.status).toEqual(200)
})
it("fails to complete cart with items inventory not/partially covered", async () => {
@@ -2354,6 +2357,32 @@ describe("/store/carts", () => {
expect(res.data.cart.completed_at).not.toBe(null)
})
it("should return the swap when cart is already completed", async () => {
const manager = dbConnection.manager
await manager.query(
"UPDATE swap SET cart_id='swap-cart' where id='test-swap'"
)
await manager.query("DELETE FROM payment where swap_id='test-swap'")
const api = useApi()
await api.post(`/store/carts/swap-cart/complete-cart`)
const alreadyCompletedCart = await api.post(
`/store/carts/swap-cart/complete-cart`
)
expect(alreadyCompletedCart.data.data).toEqual(
expect.objectContaining({
cart_id: "swap-cart",
id: expect.any(String),
})
)
expect(alreadyCompletedCart.data.type).toEqual("swap")
expect(alreadyCompletedCart.status).toEqual(200)
})
it("completes cart with a non-customer and for a customer with the same email created later the order doesn't show up", async () => {
const api = useApi()
const customerEmail = "test-email-for-non-existent-customer@test.com"

View File

@@ -456,7 +456,7 @@ describe("/store/carts", () => {
await db.teardown()
})
it("should fails on cart already completed", async () => {
it("should return an order on cart already completed", async () => {
const api = useApi()
const manager = dbConnection.manager
@@ -501,17 +501,16 @@ describe("/store/carts", () => {
})
)
const responseFail = await api
.post(`/store/carts/${cartId}/complete`)
.catch((err) => {
return err.response
})
const successRes = await api.post(`/store/carts/${cartId}/complete`)
expect(responseFail.status).toEqual(409)
expect(responseFail.data.code).toEqual("cart_incompatible_state")
expect(responseFail.data.message).toEqual(
"Cart has already been completed"
expect(successRes.status).toEqual(200)
expect(successRes.data.data).toEqual(
expect.objectContaining({
cart_id: cartId,
id: expect.any(String),
})
)
expect(successRes.data.type).toEqual("order")
})
})