Merge pull request #272 from medusajs/hotfix/release

hotfix: Add shipping methods to draft order after line items
This commit is contained in:
Sebastian Rindom
2021-06-08 18:20:33 +02:00
committed by GitHub
8 changed files with 968 additions and 899 deletions

View File

@@ -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"`);

View File

@@ -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"`);

View File

@@ -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",

View File

@@ -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

View File

@@ -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`),

View File

@@ -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",
})

View File

@@ -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
})
}