* chore: rename js files to txt * chore: rename ts files to txt * chore: delete environment helpers * chore: convert global setup & teardown to txt * chore: rename helper js/ts files to txt * chore: rename seeder js/ts files to txt * chore: remove typeorm * chore: reintroduce used helpers
366 lines
8.7 KiB
Plaintext
366 lines
8.7 KiB
Plaintext
const path = require("path")
|
|
|
|
const setupServer = require("../../../environment-helpers/setup-server")
|
|
const { useApi } = require("../../../environment-helpers/use-api")
|
|
const { initDb, useDb } = require("../../../environment-helpers/use-db")
|
|
|
|
const adminSeeder = require("../../../helpers/admin-seeder")
|
|
|
|
const {
|
|
simpleOrderFactory,
|
|
simpleShippingOptionFactory,
|
|
simpleProductFactory,
|
|
} = require("../../../factories")
|
|
|
|
jest.setTimeout(30000)
|
|
|
|
describe("Swaps", () => {
|
|
let medusaProcess
|
|
let dbConnection
|
|
|
|
const doAfterEach = async () => {
|
|
const db = useDb()
|
|
return await db.teardown()
|
|
}
|
|
|
|
beforeAll(async () => {
|
|
const cwd = path.resolve(path.join(__dirname, "..", ".."))
|
|
dbConnection = await initDb({ cwd })
|
|
medusaProcess = await setupServer({ cwd })
|
|
})
|
|
|
|
afterAll(async () => {
|
|
const db = useDb()
|
|
await db.shutdown()
|
|
medusaProcess.kill()
|
|
})
|
|
|
|
afterEach(async () => {
|
|
return await doAfterEach()
|
|
})
|
|
|
|
test("creates a swap", async () => {
|
|
await adminSeeder(dbConnection)
|
|
|
|
const order = await createReturnableOrder(dbConnection)
|
|
const api = useApi()
|
|
|
|
const response = await api.post(
|
|
`/admin/orders/${order.id}/swaps`,
|
|
{
|
|
additional_items: [
|
|
{
|
|
variant_id: "variant-2",
|
|
quantity: 1,
|
|
},
|
|
],
|
|
return_items: [
|
|
{
|
|
item_id: "test-item",
|
|
quantity: 1,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
headers: {
|
|
"x-medusa-access-token": "test_token",
|
|
},
|
|
}
|
|
)
|
|
|
|
expect(response.status).toEqual(200)
|
|
|
|
const cartId = response.data.order.swaps[0].cart_id
|
|
|
|
/*
|
|
* The return line item should use its tax_lines; the new line doesn't have
|
|
* a tax line and uses the default region tax of 12.5
|
|
*
|
|
* Return line: 1000 * 1.2 = -1200
|
|
* New line: 1000 * 1.125 = 1125
|
|
* -
|
|
* Difference should be -75
|
|
*/
|
|
const cartRes = await api.get(`/store/carts/${cartId}`)
|
|
expect(cartRes.status).toEqual(200)
|
|
expect(cartRes.data.cart.subtotal).toEqual(0)
|
|
expect(cartRes.data.cart.total).toEqual(-75)
|
|
expect(cartRes.data.cart.tax_total).toEqual(-75)
|
|
})
|
|
|
|
test("creates a swap w. shipping", async () => {
|
|
await adminSeeder(dbConnection)
|
|
|
|
const order = await createReturnableOrder(dbConnection)
|
|
const returnOption = await simpleShippingOptionFactory(dbConnection, {
|
|
name: "Return method",
|
|
region_id: "test-region",
|
|
is_return: true,
|
|
price: 100,
|
|
})
|
|
|
|
const api = useApi()
|
|
|
|
const response = await api.post(
|
|
`/admin/orders/${order.id}/swaps`,
|
|
{
|
|
additional_items: [
|
|
{
|
|
variant_id: "variant-2",
|
|
quantity: 1,
|
|
},
|
|
],
|
|
return_shipping: {
|
|
option_id: returnOption.id,
|
|
},
|
|
return_items: [
|
|
{
|
|
item_id: "test-item",
|
|
quantity: 1,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
headers: {
|
|
"x-medusa-access-token": "test_token",
|
|
},
|
|
}
|
|
)
|
|
|
|
expect(response.status).toEqual(200)
|
|
|
|
const cartId = response.data.order.swaps[0].cart_id
|
|
|
|
/*
|
|
* The return line item should use its tax_lines; the new line doesn't have
|
|
* a tax line and uses the default region tax of 12.5
|
|
*
|
|
* Return line: 1000 * 1.2 = -1200
|
|
* New line: 1000 * 1.125 = 1125
|
|
* Shipping line: 100 * 1.125 = 112.5 ~ 113
|
|
* -
|
|
* Difference should be 38
|
|
*/
|
|
const cartRes = await api.get(`/store/carts/${cartId}`)
|
|
expect(cartRes.status).toEqual(200)
|
|
expect(cartRes.data.cart.subtotal).toEqual(100)
|
|
expect(cartRes.data.cart.tax_total).toEqual(-62)
|
|
expect(cartRes.data.cart.total).toEqual(38)
|
|
})
|
|
|
|
test("retrieves a swap w. shipping", async () => {
|
|
await adminSeeder(dbConnection)
|
|
|
|
const order = await createReturnableOrder(dbConnection)
|
|
const returnOption = await simpleShippingOptionFactory(dbConnection, {
|
|
name: "Return method",
|
|
region_id: "test-region",
|
|
is_return: true,
|
|
price: 100,
|
|
})
|
|
|
|
const api = useApi()
|
|
|
|
const response = await api.post(
|
|
`/admin/orders/${order.id}/swaps`,
|
|
{
|
|
additional_items: [
|
|
{
|
|
variant_id: "variant-2",
|
|
quantity: 1,
|
|
},
|
|
],
|
|
return_shipping: {
|
|
option_id: returnOption.id,
|
|
},
|
|
return_items: [
|
|
{
|
|
item_id: "test-item",
|
|
quantity: 1,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
headers: {
|
|
"x-medusa-access-token": "test_token",
|
|
},
|
|
}
|
|
)
|
|
|
|
expect(response.status).toEqual(200)
|
|
|
|
const swapRes = await api.get(
|
|
`/admin/swaps/${response.data.order.swaps[0].id}`,
|
|
{
|
|
headers: {
|
|
"x-medusa-access-token": "test_token",
|
|
},
|
|
}
|
|
)
|
|
expect(swapRes.status).toEqual(200)
|
|
expect(swapRes.data.swap.cart.subtotal).toEqual(100)
|
|
expect(swapRes.data.swap.cart.tax_total).toEqual(-62)
|
|
expect(swapRes.data.swap.cart.total).toEqual(38)
|
|
})
|
|
|
|
test("creates a swap from storefront", async () => {
|
|
const order = await createReturnableOrder(dbConnection)
|
|
const api = useApi()
|
|
|
|
const response = await api.post(`/store/swaps`, {
|
|
order_id: order.id,
|
|
additional_items: [
|
|
{
|
|
variant_id: "variant-2",
|
|
quantity: 1,
|
|
},
|
|
],
|
|
return_items: [
|
|
{
|
|
item_id: "test-item",
|
|
quantity: 1,
|
|
},
|
|
],
|
|
})
|
|
|
|
expect(response.status).toEqual(200)
|
|
|
|
const cartId = response.data.swap.cart_id
|
|
|
|
/*
|
|
* The return line item should use its tax_lines; the new line doesn't have
|
|
* a tax line and uses the default region tax of 12.5
|
|
*
|
|
* Return line: 1000 * 1.2 = -1200
|
|
* New line: 1000 * 1.125 = 1125
|
|
* -
|
|
* Difference should be -75
|
|
*/
|
|
const cartRes = await api.get(`/store/carts/${cartId}`)
|
|
expect(cartRes.status).toEqual(200)
|
|
expect(cartRes.data.cart.subtotal).toEqual(0)
|
|
expect(cartRes.data.cart.total).toEqual(-75)
|
|
expect(cartRes.data.cart.tax_total).toEqual(-75)
|
|
})
|
|
|
|
test("completes a swap", async () => {
|
|
await adminSeeder(dbConnection)
|
|
|
|
const order = await createReturnableOrder(dbConnection)
|
|
const shippingOut = await simpleShippingOptionFactory(dbConnection, {
|
|
region_id: "test-region",
|
|
price: 500,
|
|
})
|
|
const returnOption = await simpleShippingOptionFactory(dbConnection, {
|
|
name: "Return method",
|
|
region_id: "test-region",
|
|
is_return: true,
|
|
price: 100,
|
|
})
|
|
|
|
const api = useApi()
|
|
|
|
const response = await api.post(
|
|
`/admin/orders/${order.id}/swaps`,
|
|
{
|
|
additional_items: [
|
|
{
|
|
variant_id: "variant-2",
|
|
quantity: 1,
|
|
},
|
|
],
|
|
return_shipping: {
|
|
option_id: returnOption.id,
|
|
},
|
|
return_items: [
|
|
{
|
|
item_id: "test-item",
|
|
quantity: 1,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
headers: {
|
|
"x-medusa-access-token": "test_token",
|
|
},
|
|
}
|
|
)
|
|
|
|
expect(response.status).toEqual(200)
|
|
|
|
const cartId = response.data.order.swaps[0].cart_id
|
|
|
|
await api.post(`/store/carts/${cartId}`, {
|
|
shipping_address: {
|
|
address_1: "121 W Something St",
|
|
postal_code: "1234",
|
|
province: "something",
|
|
city: "ville la something",
|
|
phone: "12353245",
|
|
},
|
|
})
|
|
await api.post(`/store/carts/${cartId}/shipping-methods`, {
|
|
option_id: shippingOut.id,
|
|
})
|
|
await api.post(`/store/carts/${cartId}/payment-sessions`)
|
|
const completion = await api.post(`/store/carts/${cartId}/complete`)
|
|
|
|
expect(completion.status).toEqual(200)
|
|
expect(completion.data.type).toEqual("swap")
|
|
})
|
|
})
|
|
|
|
const createReturnableOrder = async (dbConnection, options = {}) => {
|
|
await simpleProductFactory(
|
|
dbConnection,
|
|
{
|
|
id: "test-product",
|
|
variants: [
|
|
{ id: "test-variant" },
|
|
{ id: "variant-2", prices: [{ currency: "usd", amount: 1000 }] },
|
|
],
|
|
},
|
|
100
|
|
)
|
|
|
|
let discounts = []
|
|
|
|
if (options.discount) {
|
|
discounts = [
|
|
{
|
|
code: "TESTCODE",
|
|
},
|
|
]
|
|
}
|
|
|
|
return await simpleOrderFactory(dbConnection, {
|
|
email: "test@testson.com",
|
|
tax_rate: null,
|
|
fulfillment_status: "fulfilled",
|
|
payment_status: "captured",
|
|
region: {
|
|
id: "test-region",
|
|
name: "Test region",
|
|
tax_rate: 12.5, // Should be ignored due to item tax line
|
|
},
|
|
discounts,
|
|
line_items: [
|
|
{
|
|
id: "test-item",
|
|
variant_id: "test-variant",
|
|
quantity: 2,
|
|
fulfilled_quantity: 2,
|
|
shipped_quantity: 2,
|
|
unit_price: 1000,
|
|
tax_lines: [
|
|
{
|
|
name: "default",
|
|
code: "default",
|
|
rate: 20,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
})
|
|
}
|