Before we would swallow the error and return a generic error to the user. This will provide more information to the caller if it is one of the known errors.
198 lines
6.5 KiB
TypeScript
198 lines
6.5 KiB
TypeScript
import { ModuleRegistrationName } from "@medusajs/modules-sdk"
|
|
import { IFulfillmentModuleService } from "@medusajs/types"
|
|
import { RuleOperator } from "@medusajs/utils"
|
|
import { medusaIntegrationTestRunner } from "medusa-test-utils"
|
|
import { createAdminUser } from "../../../../helpers/create-admin-user"
|
|
|
|
jest.setTimeout(50000)
|
|
|
|
const env = { MEDUSA_FF_MEDUSA_V2: true }
|
|
const adminHeaders = { headers: { "x-medusa-access-token": "test_token" } }
|
|
|
|
medusaIntegrationTestRunner({
|
|
env,
|
|
testSuite: ({ dbConnection, getContainer, api }) => {
|
|
describe("Admin: Shipping Option Rules API", () => {
|
|
let appContainer
|
|
let shippingOption
|
|
let fulfillmentModule: IFulfillmentModuleService
|
|
const shippingOptionRule = {
|
|
operator: RuleOperator.EQ,
|
|
attribute: "old_attr",
|
|
value: "old value",
|
|
}
|
|
|
|
beforeAll(async () => {
|
|
appContainer = getContainer()
|
|
fulfillmentModule = appContainer.resolve(
|
|
ModuleRegistrationName.FULFILLMENT
|
|
)
|
|
})
|
|
|
|
beforeEach(async () => {
|
|
await createAdminUser(dbConnection, adminHeaders, appContainer)
|
|
|
|
const shippingProfile = await fulfillmentModule.createShippingProfiles({
|
|
name: "Test",
|
|
type: "default",
|
|
})
|
|
|
|
const fulfillmentSet = await fulfillmentModule.create({
|
|
name: "Test",
|
|
type: "test-type",
|
|
service_zones: [
|
|
{
|
|
name: "Test",
|
|
geo_zones: [{ type: "country", country_code: "us" }],
|
|
},
|
|
],
|
|
})
|
|
|
|
shippingOption = await fulfillmentModule.createShippingOptions({
|
|
name: "Test shipping option",
|
|
service_zone_id: fulfillmentSet.service_zones[0].id,
|
|
shipping_profile_id: shippingProfile.id,
|
|
provider_id: "manual_test-provider",
|
|
price_type: "flat",
|
|
type: {
|
|
label: "Test type",
|
|
description: "Test description",
|
|
code: "test-code",
|
|
},
|
|
rules: [shippingOptionRule],
|
|
})
|
|
})
|
|
|
|
describe("POST /admin/fulfillment/shipping-options/:id/rules/batch/add", () => {
|
|
it("should throw error when required params are missing", async () => {
|
|
const { response } = await api
|
|
.post(
|
|
`/admin/fulfillment/shipping-options/${shippingOption.id}/rules/batch/add`,
|
|
{
|
|
rules: [{ operator: RuleOperator.EQ, value: "new_value" }],
|
|
},
|
|
adminHeaders
|
|
)
|
|
.catch((e) => e)
|
|
|
|
expect(response.status).toEqual(400)
|
|
expect(response.data).toEqual({
|
|
type: "invalid_data",
|
|
message:
|
|
"attribute must be a string, attribute should not be empty",
|
|
})
|
|
})
|
|
|
|
it.only("should throw error when shipping option does not exist", async () => {
|
|
const { response } = await api
|
|
.post(
|
|
`/admin/fulfillment/shipping-options/does-not-exist/rules/batch/add`,
|
|
{
|
|
rules: [
|
|
{ attribute: "new_attr", operator: "eq", value: "new value" },
|
|
],
|
|
},
|
|
adminHeaders
|
|
)
|
|
.catch((e) => e)
|
|
|
|
expect(response.status).toEqual(404)
|
|
expect(response.data).toEqual({
|
|
type: "not_found",
|
|
message:
|
|
"You tried to set relationship shipping_option_id: does-not-exist, but such entity does not exist",
|
|
})
|
|
})
|
|
|
|
it("should add rules to a shipping option successfully", async () => {
|
|
const response = await api.post(
|
|
`/admin/fulfillment/shipping-options/${shippingOption.id}/rules/batch/add`,
|
|
{
|
|
rules: [
|
|
{ operator: "eq", attribute: "new_attr", value: "new value" },
|
|
],
|
|
},
|
|
adminHeaders
|
|
)
|
|
|
|
expect(response.status).toEqual(200)
|
|
expect(response.data.shipping_option).toEqual(
|
|
expect.objectContaining({
|
|
id: shippingOption.id,
|
|
rules: expect.arrayContaining([
|
|
expect.objectContaining({
|
|
id: expect.any(String),
|
|
operator: "eq",
|
|
attribute: "old_attr",
|
|
value: "old value",
|
|
shipping_option_id: shippingOption.id,
|
|
}),
|
|
expect.objectContaining({
|
|
id: expect.any(String),
|
|
operator: "eq",
|
|
attribute: "new_attr",
|
|
value: "new value",
|
|
shipping_option_id: shippingOption.id,
|
|
}),
|
|
]),
|
|
})
|
|
)
|
|
})
|
|
})
|
|
|
|
describe("POST /admin/fulfillment/shipping-options/:id/rules/batch/remove", () => {
|
|
it("should throw error when required params are missing", async () => {
|
|
const { response } = await api
|
|
.post(
|
|
`/admin/fulfillment/shipping-options/${shippingOption.id}/rules/batch/remove`,
|
|
{},
|
|
adminHeaders
|
|
)
|
|
.catch((e) => e)
|
|
|
|
expect(response.status).toEqual(400)
|
|
expect(response.data).toEqual({
|
|
type: "invalid_data",
|
|
message:
|
|
"each value in rule_ids must be a string, rule_ids should not be empty",
|
|
})
|
|
})
|
|
|
|
it("should throw error when shipping option does not exist", async () => {
|
|
const { response } = await api
|
|
.post(
|
|
`/admin/fulfillment/shipping-options/does-not-exist/rules/batch/remove`,
|
|
{ rule_ids: ["test"] },
|
|
adminHeaders
|
|
)
|
|
.catch((e) => e)
|
|
|
|
expect(response.status).toEqual(404)
|
|
expect(response.data).toEqual({
|
|
type: "not_found",
|
|
message: "ShippingOption with id: does-not-exist was not found",
|
|
})
|
|
})
|
|
|
|
it("should add rules to a shipping option successfully", async () => {
|
|
const response = await api.post(
|
|
`/admin/fulfillment/shipping-options/${shippingOption.id}/rules/batch/remove`,
|
|
{
|
|
rule_ids: [shippingOption.rules[0].id],
|
|
},
|
|
adminHeaders
|
|
)
|
|
|
|
expect(response.status).toEqual(200)
|
|
expect(response.data.shipping_option).toEqual(
|
|
expect.objectContaining({
|
|
id: shippingOption.id,
|
|
rules: [],
|
|
})
|
|
)
|
|
})
|
|
})
|
|
})
|
|
},
|
|
})
|