Merge pull request #272 from medusajs/hotfix/release
hotfix: Add shipping methods to draft order after line items
This commit is contained in:
8 files changed
+968
-899
No files matched your search
@@ -45,6 +45,7 @@ describe("/admin/draft-orders", () => {
|
|||||||
await manager.query(`DELETE FROM "product_variant"`);
|
await manager.query(`DELETE FROM "product_variant"`);
|
||||||
await manager.query(`DELETE FROM "product"`);
|
await manager.query(`DELETE FROM "product"`);
|
||||||
await manager.query(`DELETE FROM "shipping_method"`);
|
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(`DELETE FROM "shipping_option"`);
|
||||||
await manager.query(`UPDATE "discount" SET rule_id=NULL`);
|
await manager.query(`UPDATE "discount" SET rule_id=NULL`);
|
||||||
await manager.query(`DELETE FROM "discount"`);
|
await manager.query(`DELETE FROM "discount"`);
|
||||||
@@ -104,6 +105,79 @@ describe("/admin/draft-orders", () => {
|
|||||||
expect(response.status).toEqual(200);
|
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 () => {
|
it("creates a draft order with custom item", async () => {
|
||||||
const api = useApi();
|
const api = useApi();
|
||||||
|
|
||||||
@@ -322,6 +396,7 @@ describe("/admin/draft-orders", () => {
|
|||||||
await manager.query(`DELETE FROM "product_variant"`);
|
await manager.query(`DELETE FROM "product_variant"`);
|
||||||
await manager.query(`DELETE FROM "product"`);
|
await manager.query(`DELETE FROM "product"`);
|
||||||
await manager.query(`DELETE FROM "shipping_method"`);
|
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(`DELETE FROM "shipping_option"`);
|
||||||
await manager.query(`UPDATE "discount" SET rule_id=NULL`);
|
await manager.query(`UPDATE "discount" SET rule_id=NULL`);
|
||||||
await manager.query(`DELETE FROM "discount"`);
|
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_variant"`);
|
||||||
await manager.query(`DELETE FROM "product"`);
|
await manager.query(`DELETE FROM "product"`);
|
||||||
await manager.query(`DELETE FROM "shipping_method"`);
|
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(`DELETE FROM "shipping_option"`);
|
||||||
await manager.query(`UPDATE "discount" SET rule_id=NULL`);
|
await manager.query(`UPDATE "discount" SET rule_id=NULL`);
|
||||||
await manager.query(`DELETE FROM "discount"`);
|
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_variant"`);
|
||||||
await manager.query(`DELETE FROM "product"`);
|
await manager.query(`DELETE FROM "product"`);
|
||||||
await manager.query(`DELETE FROM "shipping_method"`);
|
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(`DELETE FROM "shipping_option"`);
|
||||||
await manager.query(`UPDATE "discount" SET rule_id=NULL`);
|
await manager.query(`UPDATE "discount" SET rule_id=NULL`);
|
||||||
await manager.query(`DELETE FROM "discount"`);
|
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_variant"`);
|
||||||
await manager.query(`DELETE FROM "product"`);
|
await manager.query(`DELETE FROM "product"`);
|
||||||
await manager.query(`DELETE FROM "shipping_method"`);
|
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(`DELETE FROM "shipping_option"`);
|
||||||
await manager.query(`UPDATE "discount" SET rule_id=NULL`);
|
await manager.query(`UPDATE "discount" SET rule_id=NULL`);
|
||||||
await manager.query(`DELETE FROM "discount"`);
|
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_variant"`);
|
||||||
await manager.query(`DELETE FROM "product"`);
|
await manager.query(`DELETE FROM "product"`);
|
||||||
await manager.query(`DELETE FROM "shipping_method"`);
|
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(`DELETE FROM "shipping_option"`);
|
||||||
await manager.query(`UPDATE "discount" SET rule_id=NULL`);
|
await manager.query(`UPDATE "discount" SET rule_id=NULL`);
|
||||||
await manager.query(`DELETE FROM "discount"`);
|
await manager.query(`DELETE FROM "discount"`);
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ const {
|
|||||||
Customer,
|
Customer,
|
||||||
MoneyAmount,
|
MoneyAmount,
|
||||||
ShippingOption,
|
ShippingOption,
|
||||||
|
ShippingOptionRequirement,
|
||||||
Product,
|
Product,
|
||||||
ProductVariant,
|
ProductVariant,
|
||||||
Region,
|
Region,
|
||||||
@@ -166,6 +167,24 @@ module.exports = async (connection, data = {}) => {
|
|||||||
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, {
|
const c = manager.create(Cart, {
|
||||||
id: "test-cart",
|
id: "test-cart",
|
||||||
customer_id: "oli-test",
|
customer_id: "oli-test",
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
"@babel/cli": "^7.12.10",
|
"@babel/cli": "^7.12.10",
|
||||||
"@babel/core": "^7.12.10",
|
"@babel/core": "^7.12.10",
|
||||||
"@babel/node": "^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"
|
"jest": "^26.6.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+857
-857
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-transform-typescript-metadata`),
|
||||||
r(`@babel/plugin-proposal-optional-chaining`),
|
r(`@babel/plugin-proposal-optional-chaining`),
|
||||||
[r(`@babel/plugin-proposal-decorators`), { legacy: true }],
|
[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-classes`),
|
||||||
r(`@babel/plugin-transform-instanceof`),
|
r(`@babel/plugin-transform-instanceof`),
|
||||||
r(`@babel/plugin-transform-runtime`),
|
r(`@babel/plugin-transform-runtime`),
|
||||||
|
|||||||
@@ -88,6 +88,7 @@ describe("DraftOrderService", () => {
|
|||||||
...data,
|
...data,
|
||||||
})
|
})
|
||||||
),
|
),
|
||||||
|
addShippingMethod: jest.fn(),
|
||||||
withTransaction: function() {
|
withTransaction: function() {
|
||||||
return this
|
return this
|
||||||
},
|
},
|
||||||
@@ -156,22 +157,11 @@ describe("DraftOrderService", () => {
|
|||||||
type: "draft_order",
|
type: "draft_order",
|
||||||
})
|
})
|
||||||
|
|
||||||
expect(shippingOptionService.createShippingMethod).toHaveBeenCalledTimes(
|
expect(cartService.addShippingMethod).toHaveBeenCalledTimes(1)
|
||||||
1
|
expect(cartService.addShippingMethod).toHaveBeenCalledWith(
|
||||||
)
|
"test-cart",
|
||||||
expect(shippingOptionService.createShippingMethod).toHaveBeenCalledWith(
|
|
||||||
"test-option",
|
"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)
|
expect(lineItemService.generate).toHaveBeenCalledTimes(1)
|
||||||
@@ -185,7 +175,6 @@ describe("DraftOrderService", () => {
|
|||||||
expect(lineItemService.create).toHaveBeenCalledTimes(1)
|
expect(lineItemService.create).toHaveBeenCalledTimes(1)
|
||||||
expect(lineItemService.create).toHaveBeenCalledWith({
|
expect(lineItemService.create).toHaveBeenCalledWith({
|
||||||
cart_id: "test-cart",
|
cart_id: "test-cart",
|
||||||
has_shipping: true,
|
|
||||||
title: "test-item",
|
title: "test-item",
|
||||||
variant_id: "test-variant",
|
variant_id: "test-variant",
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -272,22 +272,6 @@ class DraftOrderService extends BaseService {
|
|||||||
id: result.id,
|
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) {
|
for (const item of items) {
|
||||||
if (item.variant_id) {
|
if (item.variant_id) {
|
||||||
const line = await this.lineItemService_
|
const line = await this.lineItemService_
|
||||||
@@ -297,16 +281,8 @@ class DraftOrderService extends BaseService {
|
|||||||
unit_price: item.unit_price,
|
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({
|
await this.lineItemService_.withTransaction(manager).create({
|
||||||
cart_id: createdCart.id,
|
cart_id: createdCart.id,
|
||||||
has_shipping: hasShipping,
|
|
||||||
...line,
|
...line,
|
||||||
})
|
})
|
||||||
} else {
|
} 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
|
return result
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user