Merge pull request #272 from medusajs/hotfix/release
hotfix: Add shipping methods to draft order after line items
This commit is contained in:
@@ -45,6 +45,7 @@ describe("/admin/draft-orders", () => {
|
||||
await manager.query(`DELETE FROM "product_variant"`);
|
||||
await manager.query(`DELETE FROM "product"`);
|
||||
await manager.query(`DELETE FROM "shipping_method"`);
|
||||
await manager.query(`DELETE FROM "shipping_option_requirement"`);
|
||||
await manager.query(`DELETE FROM "shipping_option"`);
|
||||
await manager.query(`UPDATE "discount" SET rule_id=NULL`);
|
||||
await manager.query(`DELETE FROM "discount"`);
|
||||
@@ -104,6 +105,79 @@ describe("/admin/draft-orders", () => {
|
||||
expect(response.status).toEqual(200);
|
||||
});
|
||||
|
||||
it("fails to create a draft order with option requirement", async () => {
|
||||
const api = useApi();
|
||||
|
||||
const payload = {
|
||||
email: "oli@test.dk",
|
||||
shipping_address: "oli-shipping",
|
||||
items: [
|
||||
{
|
||||
quantity: 1,
|
||||
metadata: {},
|
||||
unit_price: 1,
|
||||
},
|
||||
],
|
||||
region_id: "test-region",
|
||||
customer_id: "oli-test",
|
||||
shipping_methods: [
|
||||
{
|
||||
option_id: "test-option-req",
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
const response = await api
|
||||
.post("/admin/draft-orders", payload, {
|
||||
headers: {
|
||||
Authorization: "Bearer test_token",
|
||||
},
|
||||
})
|
||||
.catch((err) => {
|
||||
return err.response;
|
||||
});
|
||||
expect(response.status).toEqual(400);
|
||||
});
|
||||
|
||||
it("creates a draft order with option requirement", async () => {
|
||||
const api = useApi();
|
||||
|
||||
const payload = {
|
||||
email: "oli@test.dk",
|
||||
shipping_address: "oli-shipping",
|
||||
items: [
|
||||
{
|
||||
variant_id: "test-variant",
|
||||
quantity: 2,
|
||||
metadata: {},
|
||||
},
|
||||
{
|
||||
quantity: 1,
|
||||
metadata: {},
|
||||
unit_price: 10000,
|
||||
},
|
||||
],
|
||||
region_id: "test-region",
|
||||
customer_id: "oli-test",
|
||||
shipping_methods: [
|
||||
{
|
||||
option_id: "test-option-req",
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
const response = await api
|
||||
.post("/admin/draft-orders", payload, {
|
||||
headers: {
|
||||
Authorization: "Bearer test_token",
|
||||
},
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
expect(response.status).toEqual(200);
|
||||
});
|
||||
|
||||
it("creates a draft order with custom item", async () => {
|
||||
const api = useApi();
|
||||
|
||||
@@ -322,6 +396,7 @@ describe("/admin/draft-orders", () => {
|
||||
await manager.query(`DELETE FROM "product_variant"`);
|
||||
await manager.query(`DELETE FROM "product"`);
|
||||
await manager.query(`DELETE FROM "shipping_method"`);
|
||||
await manager.query(`DELETE FROM "shipping_option_requirement"`);
|
||||
await manager.query(`DELETE FROM "shipping_option"`);
|
||||
await manager.query(`UPDATE "discount" SET rule_id=NULL`);
|
||||
await manager.query(`DELETE FROM "discount"`);
|
||||
@@ -431,6 +506,7 @@ describe("/admin/draft-orders", () => {
|
||||
await manager.query(`DELETE FROM "product_variant"`);
|
||||
await manager.query(`DELETE FROM "product"`);
|
||||
await manager.query(`DELETE FROM "shipping_method"`);
|
||||
await manager.query(`DELETE FROM "shipping_option_requirement"`);
|
||||
await manager.query(`DELETE FROM "shipping_option"`);
|
||||
await manager.query(`UPDATE "discount" SET rule_id=NULL`);
|
||||
await manager.query(`DELETE FROM "discount"`);
|
||||
@@ -496,6 +572,7 @@ describe("/admin/draft-orders", () => {
|
||||
await manager.query(`DELETE FROM "product_variant"`);
|
||||
await manager.query(`DELETE FROM "product"`);
|
||||
await manager.query(`DELETE FROM "shipping_method"`);
|
||||
await manager.query(`DELETE FROM "shipping_option_requirement"`);
|
||||
await manager.query(`DELETE FROM "shipping_option"`);
|
||||
await manager.query(`UPDATE "discount" SET rule_id=NULL`);
|
||||
await manager.query(`DELETE FROM "discount"`);
|
||||
@@ -612,6 +689,7 @@ describe("/admin/draft-orders", () => {
|
||||
await manager.query(`DELETE FROM "product_variant"`);
|
||||
await manager.query(`DELETE FROM "product"`);
|
||||
await manager.query(`DELETE FROM "shipping_method"`);
|
||||
await manager.query(`DELETE FROM "shipping_option_requirement"`);
|
||||
await manager.query(`DELETE FROM "shipping_option"`);
|
||||
await manager.query(`UPDATE "discount" SET rule_id=NULL`);
|
||||
await manager.query(`DELETE FROM "discount"`);
|
||||
|
||||
@@ -44,6 +44,7 @@ describe("/store/carts (draft-orders)", () => {
|
||||
await manager.query(`DELETE FROM "product_variant"`);
|
||||
await manager.query(`DELETE FROM "product"`);
|
||||
await manager.query(`DELETE FROM "shipping_method"`);
|
||||
await manager.query(`DELETE FROM "shipping_option_requirement"`);
|
||||
await manager.query(`DELETE FROM "shipping_option"`);
|
||||
await manager.query(`UPDATE "discount" SET rule_id=NULL`);
|
||||
await manager.query(`DELETE FROM "discount"`);
|
||||
|
||||
@@ -3,6 +3,7 @@ const {
|
||||
Customer,
|
||||
MoneyAmount,
|
||||
ShippingOption,
|
||||
ShippingOptionRequirement,
|
||||
Product,
|
||||
ProductVariant,
|
||||
Region,
|
||||
@@ -166,6 +167,24 @@ module.exports = async (connection, data = {}) => {
|
||||
data: {},
|
||||
});
|
||||
|
||||
await manager.insert(ShippingOption, {
|
||||
id: "test-option-req",
|
||||
name: "test-option-req",
|
||||
provider_id: "test-ful",
|
||||
region_id: "test-region",
|
||||
profile_id: defaultProfile.id,
|
||||
price_type: "flat_rate",
|
||||
amount: 1000,
|
||||
data: {},
|
||||
});
|
||||
|
||||
await manager.insert(ShippingOptionRequirement, {
|
||||
id: "option-req",
|
||||
shipping_option_id: "test-option-req",
|
||||
type: "min_subtotal",
|
||||
amount: 10,
|
||||
});
|
||||
|
||||
const c = manager.create(Cart, {
|
||||
id: "test-cart",
|
||||
customer_id: "oli-test",
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
"@babel/cli": "^7.12.10",
|
||||
"@babel/core": "^7.12.10",
|
||||
"@babel/node": "^7.12.10",
|
||||
"babel-preset-medusa-package": "1.1.3-dev-1623081876060",
|
||||
"babel-preset-medusa-package": "1.1.3-dev-1623168481467",
|
||||
"jest": "^26.6.3"
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -18,7 +18,7 @@ function preset(context, options = {}) {
|
||||
r(`babel-plugin-transform-typescript-metadata`),
|
||||
r(`@babel/plugin-proposal-optional-chaining`),
|
||||
[r(`@babel/plugin-proposal-decorators`), { legacy: true }],
|
||||
[r(`@babel/plugin-proposal-class-properties`), { loose: true }],
|
||||
r(`@babel/plugin-proposal-class-properties`),
|
||||
r(`@babel/plugin-transform-classes`),
|
||||
r(`@babel/plugin-transform-instanceof`),
|
||||
r(`@babel/plugin-transform-runtime`),
|
||||
|
||||
@@ -88,6 +88,7 @@ describe("DraftOrderService", () => {
|
||||
...data,
|
||||
})
|
||||
),
|
||||
addShippingMethod: jest.fn(),
|
||||
withTransaction: function() {
|
||||
return this
|
||||
},
|
||||
@@ -156,22 +157,11 @@ describe("DraftOrderService", () => {
|
||||
type: "draft_order",
|
||||
})
|
||||
|
||||
expect(shippingOptionService.createShippingMethod).toHaveBeenCalledTimes(
|
||||
1
|
||||
)
|
||||
expect(shippingOptionService.createShippingMethod).toHaveBeenCalledWith(
|
||||
expect(cartService.addShippingMethod).toHaveBeenCalledTimes(1)
|
||||
expect(cartService.addShippingMethod).toHaveBeenCalledWith(
|
||||
"test-cart",
|
||||
"test-option",
|
||||
{},
|
||||
{
|
||||
cart: {
|
||||
id: "test-cart",
|
||||
region_id: "test-region",
|
||||
shipping_address_id: "test-shipping",
|
||||
billing_address_id: "test-billing",
|
||||
customer_id: "test-customer",
|
||||
type: "draft_order",
|
||||
},
|
||||
}
|
||||
{}
|
||||
)
|
||||
|
||||
expect(lineItemService.generate).toHaveBeenCalledTimes(1)
|
||||
@@ -185,7 +175,6 @@ describe("DraftOrderService", () => {
|
||||
expect(lineItemService.create).toHaveBeenCalledTimes(1)
|
||||
expect(lineItemService.create).toHaveBeenCalledWith({
|
||||
cart_id: "test-cart",
|
||||
has_shipping: true,
|
||||
title: "test-item",
|
||||
variant_id: "test-variant",
|
||||
})
|
||||
|
||||
@@ -272,22 +272,6 @@ class DraftOrderService extends BaseService {
|
||||
id: result.id,
|
||||
})
|
||||
|
||||
let shippingMethods = []
|
||||
|
||||
for (const method of shipping_methods) {
|
||||
const m = await this.shippingOptionService_
|
||||
.withTransaction(manager)
|
||||
.createShippingMethod(method.option_id, method.data, {
|
||||
cart: createdCart,
|
||||
})
|
||||
|
||||
shippingMethods.push(m)
|
||||
}
|
||||
|
||||
const profiles = shippingMethods.map(
|
||||
({ shipping_option }) => shipping_option.profile_id
|
||||
)
|
||||
|
||||
for (const item of items) {
|
||||
if (item.variant_id) {
|
||||
const line = await this.lineItemService_
|
||||
@@ -297,16 +281,8 @@ class DraftOrderService extends BaseService {
|
||||
unit_price: item.unit_price,
|
||||
})
|
||||
|
||||
const variant = await this.productVariantService_
|
||||
.withTransaction(manager)
|
||||
.retrieve(item.variant_id)
|
||||
const itemProfile = variant.product.profile_id
|
||||
|
||||
const hasShipping = profiles.includes(itemProfile)
|
||||
|
||||
await this.lineItemService_.withTransaction(manager).create({
|
||||
cart_id: createdCart.id,
|
||||
has_shipping: hasShipping,
|
||||
...line,
|
||||
})
|
||||
} else {
|
||||
@@ -329,6 +305,12 @@ class DraftOrderService extends BaseService {
|
||||
}
|
||||
}
|
||||
|
||||
for (const method of shipping_methods) {
|
||||
await this.cartService_
|
||||
.withTransaction(manager)
|
||||
.addShippingMethod(createdCart.id, method.option_id, method.data)
|
||||
}
|
||||
|
||||
return result
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user