feature: swaps (#137)
* feat: swap schema * chore(refactor): move returns to separate service * swap order creates return * fix: adds returns/fulfillments/shipments and cart creation to swaps * search products by variants * feat: swaps ready * fix: test passing * chore: include customer expand fields on order * add tests * fix: add brightpearl plugin support * fix: adds swap link template setting * fix: tests * fix(medusa-plugin-brightpearl): add swap status option * docs: add swap description * fix: adds GET swap in store api * chore: unmock axios * fix: passing klarna tests * fix: pr
This commit is contained in:
@@ -1,5 +0,0 @@
|
||||
const mockAxios = jest.genMockFromModule("axios")
|
||||
|
||||
mockAxios.create = jest.fn(() => mockAxios)
|
||||
|
||||
export default mockAxios
|
||||
@@ -10,17 +10,23 @@ export default async (req, res) => {
|
||||
|
||||
const klarnaOrder = await klarnaProviderService.retrieveCompletedOrder(
|
||||
klarna_order_id
|
||||
).then(({ data }) => data)
|
||||
)
|
||||
|
||||
const cartId = klarnaOrder.merchant_data
|
||||
try {
|
||||
const order = await orderService.retrieveByCartId(cartId)
|
||||
await klarnaProviderService.acknowledgeOrder(klarnaOrder.order_id, order._id)
|
||||
await klarnaProviderService.acknowledgeOrder(
|
||||
klarnaOrder.order_id,
|
||||
order._id
|
||||
)
|
||||
} catch (err) {
|
||||
if (err.type === MedusaError.Types.NOT_FOUND) {
|
||||
const cart = await cartService.retrieve(cartId)
|
||||
const order = await orderService.createFromCart(cart)
|
||||
await klarnaProviderService.acknowledgeOrder(klarnaOrder.order_id, order._id)
|
||||
await klarnaProviderService.acknowledgeOrder(
|
||||
klarnaOrder.order_id,
|
||||
order._id
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,14 +1,11 @@
|
||||
import MockAdapter from "axios-mock-adapter"
|
||||
|
||||
import KlarnaProviderService from "../klarna-provider"
|
||||
import mockAxios from "../../__mocks__/axios"
|
||||
import { carts } from "../../__mocks__/cart"
|
||||
import { TotalsServiceMock } from "../../__mocks__/totals"
|
||||
import { RegionServiceMock } from "../../__mocks__/region"
|
||||
|
||||
describe("KlarnaProviderService", () => {
|
||||
beforeEach(() => {
|
||||
mockAxios.mockClear()
|
||||
})
|
||||
|
||||
describe("createPayment", () => {
|
||||
const klarnaProviderService = new KlarnaProviderService(
|
||||
{
|
||||
@@ -27,22 +24,19 @@ describe("KlarnaProviderService", () => {
|
||||
}
|
||||
)
|
||||
|
||||
const mockServer = new MockAdapter(klarnaProviderService.klarna_)
|
||||
mockServer.onPost("/checkout/v3/orders").reply(() => {
|
||||
return [200, { order_id: "123456789", order_amount: 100 }]
|
||||
})
|
||||
|
||||
beforeEach(() => {
|
||||
jest.clearAllMocks()
|
||||
})
|
||||
|
||||
it("creates Klarna order", async () => {
|
||||
mockAxios.post = jest.fn().mockImplementation(() => {
|
||||
return Promise.resolve({
|
||||
data: {
|
||||
order_id: "123456789",
|
||||
order_amount: 100,
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
const result = await klarnaProviderService.createPayment(carts.frCart)
|
||||
expect(mockAxios.post).toHaveBeenCalledTimes(1)
|
||||
|
||||
// expect(mockAxios.post).toHaveBeenCalledTimes(1)
|
||||
expect(result).toEqual({
|
||||
order_id: "123456789",
|
||||
order_amount: 100,
|
||||
@@ -67,21 +61,14 @@ describe("KlarnaProviderService", () => {
|
||||
}
|
||||
)
|
||||
|
||||
it("returns Klarna order", async () => {
|
||||
mockAxios.get.mockImplementation((data) => {
|
||||
return Promise.resolve({
|
||||
data: {
|
||||
order_id: "123456789",
|
||||
},
|
||||
})
|
||||
})
|
||||
const mockServer = new MockAdapter(klarnaProviderService.klarna_)
|
||||
mockServer.onGet("/checkout/v3/orders/123456789").reply(() => {
|
||||
return [200, { order_id: "123456789" }]
|
||||
})
|
||||
|
||||
it("returns Klarna order", async () => {
|
||||
result = await klarnaProviderService.retrievePayment({
|
||||
payment_method: {
|
||||
data: {
|
||||
id: "123456789",
|
||||
},
|
||||
},
|
||||
order_id: "123456789",
|
||||
})
|
||||
|
||||
expect(result).toEqual({
|
||||
@@ -107,20 +94,13 @@ describe("KlarnaProviderService", () => {
|
||||
}
|
||||
)
|
||||
|
||||
it("returns completed Klarna order", async () => {
|
||||
mockAxios.get.mockImplementation((data) => {
|
||||
return Promise.resolve({
|
||||
order_id: "123456789",
|
||||
})
|
||||
})
|
||||
const mockServer = new MockAdapter(klarnaProviderService.klarna_)
|
||||
mockServer.onGet("/ordermanagement/v1/orders/123456789").reply(() => {
|
||||
return [200, { order_id: "123456789" }]
|
||||
})
|
||||
|
||||
result = await klarnaProviderService.retrieveCompletedOrder({
|
||||
payment_method: {
|
||||
data: {
|
||||
id: "123456789",
|
||||
},
|
||||
},
|
||||
})
|
||||
it("returns completed Klarna order", async () => {
|
||||
result = await klarnaProviderService.retrieveCompletedOrder("123456789")
|
||||
|
||||
expect(result).toEqual({
|
||||
order_id: "123456789",
|
||||
@@ -150,24 +130,21 @@ describe("KlarnaProviderService", () => {
|
||||
},
|
||||
}
|
||||
)
|
||||
const mockServer = new MockAdapter(klarnaProviderService.klarna_)
|
||||
mockServer.onPost("/checkout/v3/orders/123456789").reply(() => {
|
||||
return [
|
||||
200,
|
||||
{
|
||||
order_id: "123456789",
|
||||
order_amount: 1000,
|
||||
},
|
||||
]
|
||||
})
|
||||
|
||||
it("returns updated Klarna order", async () => {
|
||||
mockAxios.post.mockImplementation((data) => {
|
||||
return Promise.resolve({
|
||||
data: {
|
||||
order_id: "123456789",
|
||||
order_amount: 1000,
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
result = await klarnaProviderService.updatePayment(
|
||||
{
|
||||
payment_method: {
|
||||
data: {
|
||||
id: "123456789",
|
||||
},
|
||||
},
|
||||
order_id: "123456789",
|
||||
},
|
||||
carts.frCart
|
||||
)
|
||||
@@ -195,12 +172,14 @@ describe("KlarnaProviderService", () => {
|
||||
password: "123456789",
|
||||
}
|
||||
)
|
||||
|
||||
it("returns order id", async () => {
|
||||
mockAxios.post.mockImplementation((data) => {
|
||||
return Promise.resolve()
|
||||
const mockServer = new MockAdapter(klarnaProviderService.klarna_)
|
||||
mockServer
|
||||
.onPost("/ordermanagement/v1/orders/123456789/cancel")
|
||||
.reply(() => {
|
||||
return [200]
|
||||
})
|
||||
|
||||
it("returns order id", async () => {
|
||||
result = await klarnaProviderService.cancelPayment({
|
||||
order_id: "123456789",
|
||||
})
|
||||
@@ -226,12 +205,20 @@ describe("KlarnaProviderService", () => {
|
||||
password: "123456789",
|
||||
}
|
||||
)
|
||||
|
||||
it("returns order id", async () => {
|
||||
mockAxios.post.mockImplementation((data) => {
|
||||
return Promise.resolve({})
|
||||
const mockServer = new MockAdapter(klarnaProviderService.klarna_)
|
||||
mockServer
|
||||
.onPost("/ordermanagement/v1/orders/123456789/acknowledge")
|
||||
.reply(() => {
|
||||
return [200]
|
||||
})
|
||||
|
||||
mockServer
|
||||
.onPatch("/ordermanagement/v1/orders/123456789/merchant-references")
|
||||
.reply(() => {
|
||||
return [200]
|
||||
})
|
||||
|
||||
it("returns order id", async () => {
|
||||
result = await klarnaProviderService.acknowledgeOrder("123456789")
|
||||
|
||||
expect(result).toEqual("123456789")
|
||||
@@ -255,12 +242,14 @@ describe("KlarnaProviderService", () => {
|
||||
password: "123456789",
|
||||
}
|
||||
)
|
||||
|
||||
it("returns order id", async () => {
|
||||
mockAxios.post.mockImplementation((data) => {
|
||||
return Promise.resolve()
|
||||
const mockServer = new MockAdapter(klarnaProviderService.klarna_)
|
||||
mockServer
|
||||
.onPost("/ordermanagement/v1/orders/123456789/merchant-references")
|
||||
.reply(() => {
|
||||
return [200]
|
||||
})
|
||||
|
||||
it("returns order id", async () => {
|
||||
result = await klarnaProviderService.addOrderToKlarnaOrder(
|
||||
"123456789",
|
||||
"order123456789"
|
||||
@@ -287,20 +276,23 @@ describe("KlarnaProviderService", () => {
|
||||
password: "123456789",
|
||||
}
|
||||
)
|
||||
const mockServer = new MockAdapter(klarnaProviderService.klarna_)
|
||||
mockServer.onGet("/ordermanagement/v1/orders/123456789").reply(() => {
|
||||
return [
|
||||
200,
|
||||
{
|
||||
order: { order_amount: 1000 },
|
||||
},
|
||||
]
|
||||
})
|
||||
|
||||
mockServer
|
||||
.onPost("/ordermanagement/v1/orders/123456789/captures")
|
||||
.reply(() => {
|
||||
return [200]
|
||||
})
|
||||
|
||||
it("returns order id", async () => {
|
||||
mockAxios.get.mockImplementation((data) => {
|
||||
return Promise.resolve({
|
||||
data: {
|
||||
order: { order_amount: 1000 },
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
mockAxios.post.mockImplementation((data) => {
|
||||
return Promise.resolve()
|
||||
})
|
||||
|
||||
result = await klarnaProviderService.capturePayment({
|
||||
order_id: "123456789",
|
||||
})
|
||||
@@ -326,12 +318,14 @@ describe("KlarnaProviderService", () => {
|
||||
password: "123456789",
|
||||
}
|
||||
)
|
||||
|
||||
it("returns order id", async () => {
|
||||
mockAxios.post.mockImplementation((data) => {
|
||||
return Promise.resolve()
|
||||
const mockServer = new MockAdapter(klarnaProviderService.klarna_)
|
||||
mockServer
|
||||
.onPost("/ordermanagement/v1/orders/123456789/refunds")
|
||||
.reply(() => {
|
||||
return [200]
|
||||
})
|
||||
|
||||
it("returns order id", async () => {
|
||||
result = await klarnaProviderService.refundPayment(
|
||||
{
|
||||
order_id: "123456789",
|
||||
|
||||
@@ -279,9 +279,9 @@ class KlarnaProviderService extends PaymentService {
|
||||
*/
|
||||
async retrieveCompletedOrder(klarnaOrderId) {
|
||||
try {
|
||||
return this.klarna_.get(
|
||||
`${this.klarnaOrderManagementUrl_}/${klarnaOrderId}`
|
||||
)
|
||||
return this.klarna_
|
||||
.get(`${this.klarnaOrderManagementUrl_}/${klarnaOrderId}`)
|
||||
.then(({ data }) => data)
|
||||
} catch (error) {
|
||||
throw error
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user