fix: add integration test

This commit is contained in:
Sebastian Rindom committed 2021-10-05 12:36:43 +02:00
1 parent 5a67d1e7fd
commit 38813ec66f
7 files changed
+172 -79

No files matched your search

@@ -1,5 +1,19 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP // Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`/admin/auth creates admin session correctly 1`] = `
Object {
"api_token": "test_token",
"created_at": Any<String>,
"deleted_at": null,
"email": "admin@medusa.js",
"first_name": null,
"id": "admin_user",
"last_name": null,
"metadata": null,
"updated_at": Any<String>,
}
`;
exports[`/admin/discounts creates admin session correctly 1`] = ` exports[`/admin/discounts creates admin session correctly 1`] = `
Object { Object {
"api_token": "test_token", "api_token": "test_token",
@@ -13,4 +27,3 @@ Object {
"updated_at": Any<String>, "updated_at": Any<String>,
} }
`; `;
@@ -1,5 +1,22 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP // Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`/admin/auth creates store session correctly 1`] = `
Object {
"billing_address_id": null,
"created_at": Any<String>,
"deleted_at": null,
"email": "test@testesen.dk",
"first_name": "test",
"has_account": true,
"id": Any<String>,
"last_name": "testesen",
"metadata": null,
"orders": Array [],
"phone": "12345678",
"updated_at": Any<String>,
}
`;
exports[`/admin/discounts creates store session correctly 1`] = ` exports[`/admin/discounts creates store session correctly 1`] = `
Object { Object {
"billing_address_id": null, "billing_address_id": null,
+39 -2
View File
@@ -135,8 +135,8 @@ describe("/store/carts", () => {
const api = useApi() const api = useApi()
try { try {
await api.post("/store/carts/test-cart", { const { data } = await api.post("/store/carts/test-cart", {
discounts: [{ code: "CREATED" }], discounts: [{ code: "LIMIT_REACHED" }],
}) })
} catch (error) { } catch (error) {
expect(error.response.status).toEqual(400) expect(error.response.status).toEqual(400)
@@ -648,4 +648,41 @@ describe("/store/carts", () => {
expect(response.status).toEqual(200) expect(response.status).toEqual(200)
}) })
}) })
describe("shipping address + region updates", () => {
beforeEach(async () => {
try {
await cartSeeder(dbConnection)
} catch (err) {
console.log(err)
throw err
}
})
afterEach(async () => {
await doAfterEach()
})
it("updates region only - single to multipe countries", async () => {
const api = useApi()
const { data, status } = await api
.post(`/store/carts/test-cart`, {
region_id: `test-region-multiple`,
})
.catch((err) => {
console.log(err)
throw err
})
expect(status).toEqual(200)
expect(data.cart.region_id).toEqual("test-region-multiple")
expect(data.cart.shipping_address).toMatchSnapshot({
id: expect.any(String),
country_code: null,
})
})
// it("updates cart.customer_id on cart retrieval if cart.customer_id differ from session customer", async () => {})
})
}) })
@@ -108,6 +108,28 @@ module.exports = async (connection, data = {}) => {
tenPercent.rule = tenPercentRule tenPercent.rule = tenPercentRule
await manager.save(tenPercent) await manager.save(tenPercent)
const exceed = await manager.create(Discount, {
id: "test-discount-reached",
code: "LIMIT_REACHED",
usage_limit: 1,
usage_count: 1,
is_dynamic: false,
is_disabled: false,
})
const drExceed = await manager.create(DiscountRule, {
id: "test-discount-rule-reached",
description: "Created",
type: "fixed",
value: 10000,
allocation: "total",
})
exceed.rule = drExceed
exceed.regions = [r]
await manager.save(exceed)
const d = await manager.create(Discount, { const d = await manager.create(Discount, {
id: "test-discount", id: "test-discount",
code: "CREATED", code: "CREATED",
+3 -3
View File
@@ -8,15 +8,15 @@
"build": "babel src -d dist --extensions \".ts,.js\"" "build": "babel src -d dist --extensions \".ts,.js\""
}, },
"dependencies": { "dependencies": {
"@medusajs/medusa": "1.1.40-dev-1631630701835", "@medusajs/medusa": "1.1.41-dev-1633423310981",
"medusa-interfaces": "1.1.21-dev-1631630701835", "medusa-interfaces": "1.1.23-dev-1633423310981",
"typeorm": "^0.2.31" "typeorm": "^0.2.31"
}, },
"devDependencies": { "devDependencies": {
"@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.13-dev-1631630701835", "babel-preset-medusa-package": "1.1.15-dev-1633423310981",
"jest": "^26.6.3" "jest": "^26.6.3"
} }
} }
+41 -35
View File
@@ -1223,10 +1223,10 @@
"@types/yargs" "^15.0.0" "@types/yargs" "^15.0.0"
chalk "^4.0.0" chalk "^4.0.0"
"@medusajs/medusa-cli@1.1.16-dev-1631630701835": "@medusajs/medusa-cli@1.1.18-dev-1633423310981":
version "1.1.16-dev-1631630701835" version "1.1.18-dev-1633423310981"
resolved "http://localhost:4873/@medusajs%2fmedusa-cli/-/medusa-cli-1.1.16-dev-1631630701835.tgz#7fcb95cb9a45e0367cc5becfff7f5d1533b46b5f" resolved "http://localhost:4873/@medusajs%2fmedusa-cli/-/medusa-cli-1.1.18-dev-1633423310981.tgz#70355ecb8382e62f44af1b0755bfe7a999e4c16c"
integrity sha512-UomtR8B1lBFDb3h1y060fOcWcZi812Jwt8Kgjxqtpn+aRj6Bu7+I3WJGHBVSx4VnUBINSYbtiQMpEwqVGTCKnw== integrity sha512-LGMPQrjP4ghpbzpdRInLeTGATBr3nEvuKP98/0zODoZtgHodbxgUjWFYiiy2zoBGp21GcQ3KZx60kKS9z1zSzw==
dependencies: dependencies:
"@babel/polyfill" "^7.8.7" "@babel/polyfill" "^7.8.7"
"@babel/runtime" "^7.9.6" "@babel/runtime" "^7.9.6"
@@ -1244,8 +1244,8 @@
is-valid-path "^0.1.1" is-valid-path "^0.1.1"
joi-objectid "^3.0.1" joi-objectid "^3.0.1"
meant "^1.0.1" meant "^1.0.1"
medusa-core-utils "1.1.20-dev-1631630701835" medusa-core-utils "1.1.22-dev-1633423310981"
medusa-telemetry "0.0.3-dev-1631630701835" medusa-telemetry "0.0.5-dev-1633423310981"
netrc-parser "^3.1.6" netrc-parser "^3.1.6"
open "^8.0.6" open "^8.0.6"
ora "^5.4.1" ora "^5.4.1"
@@ -1259,13 +1259,13 @@
winston "^3.3.3" winston "^3.3.3"
yargs "^15.3.1" yargs "^15.3.1"
"@medusajs/medusa@1.1.40-dev-1631630701835": "@medusajs/medusa@1.1.41-dev-1633423310981":
version "1.1.40-dev-1631630701835" version "1.1.41-dev-1633423310981"
resolved "http://localhost:4873/@medusajs%2fmedusa/-/medusa-1.1.40-dev-1631630701835.tgz#fa67ceda5887fd31196b3bcfd3115a9e02d68448" resolved "http://localhost:4873/@medusajs%2fmedusa/-/medusa-1.1.41-dev-1633423310981.tgz#aafdac188f1e543da6faca01f71d68dd197fcba1"
integrity sha512-svPsKonuBrwRgtYod7U7ho9bN84K7N/QorMJG9+wklEO4jp6zXG+U5DQcfVAKQ00cHHe50OcnfX1ZS0kVNovYw== integrity sha512-jQQd8qHm8ldrtMmEf8TMPSyK2nSvawxTRlwZEUG9WcsLkdDkuS6CpShmwf2+1X6SYn/bOSdAFszvvjDnHxbKOQ==
dependencies: dependencies:
"@hapi/joi" "^16.1.8" "@hapi/joi" "^16.1.8"
"@medusajs/medusa-cli" "1.1.16-dev-1631630701835" "@medusajs/medusa-cli" "1.1.18-dev-1633423310981"
"@types/lodash" "^4.14.168" "@types/lodash" "^4.14.168"
awilix "^4.2.3" awilix "^4.2.3"
body-parser "^1.19.0" body-parser "^1.19.0"
@@ -1283,11 +1283,12 @@
glob "^7.1.6" glob "^7.1.6"
ioredis "^4.17.3" ioredis "^4.17.3"
ioredis-mock "^5.6.0" ioredis-mock "^5.6.0"
iso8601-duration "^1.3.0"
joi "^17.3.0" joi "^17.3.0"
joi-objectid "^3.0.1" joi-objectid "^3.0.1"
jsonwebtoken "^8.5.1" jsonwebtoken "^8.5.1"
medusa-core-utils "1.1.20-dev-1631630701835" medusa-core-utils "1.1.22-dev-1633423310981"
medusa-test-utils "1.1.23-dev-1631630701835" medusa-test-utils "1.1.25-dev-1633423310981"
morgan "^1.9.1" morgan "^1.9.1"
multer "^1.4.2" multer "^1.4.2"
passport "^0.4.0" passport "^0.4.0"
@@ -1932,10 +1933,10 @@ babel-preset-jest@^26.6.2:
babel-plugin-jest-hoist "^26.6.2" babel-plugin-jest-hoist "^26.6.2"
babel-preset-current-node-syntax "^1.0.0" babel-preset-current-node-syntax "^1.0.0"
babel-preset-medusa-package@1.1.13-dev-1631630701835: babel-preset-medusa-package@1.1.15-dev-1633423310981:
version "1.1.13-dev-1631630701835" version "1.1.15-dev-1633423310981"
resolved "http://localhost:4873/babel-preset-medusa-package/-/babel-preset-medusa-package-1.1.13-dev-1631630701835.tgz#5b66b3738e4904e31b2db30a6ea8e68eb0f8f641" resolved "http://localhost:4873/babel-preset-medusa-package/-/babel-preset-medusa-package-1.1.15-dev-1633423310981.tgz#3937735456a517e9004233b3dbd968b79afed495"
integrity sha512-V7sXlktlvEON7FLhxe+Y3NVe8l8DQyB5oJTryG4Bhw8y1AaUFOiQ5Vat3XuoL3qRcUSVMGL4VHw0m0O78t0PuA== integrity sha512-oyijx+KjzgA7Ehszy2bEG2JbXT76qvzihsWYZOLAgz7B/7XAosknmQgPuvoeGWQ/+2xhKgp1w/+UoncD3fygfA==
dependencies: dependencies:
"@babel/plugin-proposal-class-properties" "^7.12.1" "@babel/plugin-proposal-class-properties" "^7.12.1"
"@babel/plugin-proposal-decorators" "^7.12.1" "@babel/plugin-proposal-decorators" "^7.12.1"
@@ -4274,6 +4275,11 @@ isexe@^2.0.0:
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
iso8601-duration@^1.3.0:
version "1.3.0"
resolved "http://localhost:4873/iso8601-duration/-/iso8601-duration-1.3.0.tgz#29d7b69e0574e4acdee50c5e5e09adab4137ba5a"
integrity sha512-K4CiUBzo3YeWk76FuET/dQPH03WE04R94feo5TSKQCXpoXQt9E4yx2CnY737QZnSAI3PI4WlKo/zfqizGx52QQ==
isobject@^2.0.0: isobject@^2.0.0:
version "2.1.0" version "2.1.0"
resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
@@ -5104,25 +5110,25 @@ media-typer@0.3.0:
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
medusa-core-utils@1.1.20-dev-1631630701835: medusa-core-utils@1.1.22-dev-1633423310981:
version "1.1.20-dev-1631630701835" version "1.1.22-dev-1633423310981"
resolved "http://localhost:4873/medusa-core-utils/-/medusa-core-utils-1.1.20-dev-1631630701835.tgz#1fa7ccd2551b7891127d4f07f708029c585f4ea8" resolved "http://localhost:4873/medusa-core-utils/-/medusa-core-utils-1.1.22-dev-1633423310981.tgz#51f252f7b7ad042a48e67b4a5a3236acfd18f404"
integrity sha512-KKBo6W1QI47Ig3KMV4UXQnQN5JilMfjR6Cx7hDNj4frJoNiWa/YKDYqUr6SmY2+iJtKetnLkrKaPsDyyhZrxcw== integrity sha512-6OVvWwqDwbd13myR66paOKHmB77PChwWCz6WCXUABnQTX4Oo1N4Nf2tTvw4gKvv3/f9G0GBRMaAfo32Z1Gk6EA==
dependencies: dependencies:
joi "^17.3.0" joi "^17.3.0"
joi-objectid "^3.0.1" joi-objectid "^3.0.1"
medusa-interfaces@1.1.21-dev-1631630701835: medusa-interfaces@1.1.23-dev-1633423310981:
version "1.1.21-dev-1631630701835" version "1.1.23-dev-1633423310981"
resolved "http://localhost:4873/medusa-interfaces/-/medusa-interfaces-1.1.21-dev-1631630701835.tgz#af29b2ef0c987bded1b2d295ac6cf39880af551e" resolved "http://localhost:4873/medusa-interfaces/-/medusa-interfaces-1.1.23-dev-1633423310981.tgz#2819e308c716ee53d1840b6a5d5430fbf8dca3c9"
integrity sha512-rTASRjOdcS3J9fP95p9vJzCpatMpUhTum5ddfAA0s42pZx2gsPlf1f+rUSNz5QfeC5RdIEzRfOmAGfvMpAbYGw== integrity sha512-Gp3fcV8SsL9ZkLe9L+ZVy6sGsv5n6Wj67wwOX0GanSqU1uLBsz3wedMfii5dGNqwDexWgYzgxOYK7QGBGYXLQg==
dependencies: dependencies:
medusa-core-utils "1.1.20-dev-1631630701835" medusa-core-utils "1.1.22-dev-1633423310981"
medusa-telemetry@0.0.3-dev-1631630701835: medusa-telemetry@0.0.5-dev-1633423310981:
version "0.0.3-dev-1631630701835" version "0.0.5-dev-1633423310981"
resolved "http://localhost:4873/medusa-telemetry/-/medusa-telemetry-0.0.3-dev-1631630701835.tgz#d56c01d261fa30ccedc6d9976971b9744b9d8c0f" resolved "http://localhost:4873/medusa-telemetry/-/medusa-telemetry-0.0.5-dev-1633423310981.tgz#7956c08480850d6b61052c3e8b62729c24ceb338"
integrity sha512-FS1L1DOIOSdRZgeIQWaM5nhFG5NtbnC/Pntfac51vQxLkzFuHy7ZEtg11CXKE+x6NWlqT1rqqgxq0EabFzEZzw== integrity sha512-JqruAUz4vDBE+e9jKOklLL1p9Od2fbWOR/fJjDG9drjppv4bHJlfBMUO8BjagZQi6J8Q03MmhWpFnQP7Mkop2A==
dependencies: dependencies:
axios "^0.21.1" axios "^0.21.1"
axios-retry "^3.1.9" axios-retry "^3.1.9"
@@ -5134,13 +5140,13 @@ medusa-telemetry@0.0.3-dev-1631630701835:
remove-trailing-slash "^0.1.1" remove-trailing-slash "^0.1.1"
uuid "^8.3.2" uuid "^8.3.2"
medusa-test-utils@1.1.23-dev-1631630701835: medusa-test-utils@1.1.25-dev-1633423310981:
version "1.1.23-dev-1631630701835" version "1.1.25-dev-1633423310981"
resolved "http://localhost:4873/medusa-test-utils/-/medusa-test-utils-1.1.23-dev-1631630701835.tgz#8995d636caf2dea9ebb184f1e15b0c364c4d1b93" resolved "http://localhost:4873/medusa-test-utils/-/medusa-test-utils-1.1.25-dev-1633423310981.tgz#8e50633de3f237d6c5ae1c7354b6fa30953504fc"
integrity sha512-A8xRL+sZS22qXZSHpVfdV8f/egZxXs4iExRO2xUkTP6I/OgMhFBSg6nEd/DXVdVfpsHZCDEv8PA3ewaeAkoYhQ== integrity sha512-cbapvTtzz5Q91JKYBiOGsJ9Uwr01DIvhf/kze3dEMAlbLLrB11kKhrFiouvjyLCG64JrGiqdCyzRWcAa9TutPg==
dependencies: dependencies:
"@babel/plugin-transform-classes" "^7.9.5" "@babel/plugin-transform-classes" "^7.9.5"
medusa-core-utils "1.1.20-dev-1631630701835" medusa-core-utils "1.1.22-dev-1633423310981"
randomatic "^3.1.1" randomatic "^3.1.1"
merge-descriptors@1.0.1: merge-descriptors@1.0.1:
+36 -38
View File
@@ -160,7 +160,7 @@ class CartService extends BaseService {
"total", "total",
] ]
const totalsToSelect = select.filter(v => totalFields.includes(v)) const totalsToSelect = select.filter((v) => totalFields.includes(v))
if (totalsToSelect.length > 0) { if (totalsToSelect.length > 0) {
const relationSet = new Set(relations) const relationSet = new Set(relations)
relationSet.add("items") relationSet.add("items")
@@ -173,7 +173,7 @@ class CartService extends BaseService {
relationSet.add("region") relationSet.add("region")
relations = [...relationSet] relations = [...relationSet]
select = select.filter(v => !totalFields.includes(v)) select = select.filter((v) => !totalFields.includes(v))
} }
return { return {
@@ -236,9 +236,8 @@ class CartService extends BaseService {
const cartRepo = this.manager_.getCustomRepository(this.cartRepository_) const cartRepo = this.manager_.getCustomRepository(this.cartRepository_)
const validatedId = this.validateId_(cartId) const validatedId = this.validateId_(cartId)
const { select, relations, totalsToSelect } = this.transformQueryForTotals_( const { select, relations, totalsToSelect } =
options this.transformQueryForTotals_(options)
)
const query = { const query = {
where: { id: validatedId }, where: { id: validatedId },
@@ -273,7 +272,7 @@ class CartService extends BaseService {
* @return {Promise} the result of the create operation * @return {Promise} the result of the create operation
*/ */
async create(data) { async create(data) {
return this.atomicPhase_(async manager => { return this.atomicPhase_(async (manager) => {
const cartRepo = manager.getCustomRepository(this.cartRepository_) const cartRepo = manager.getCustomRepository(this.cartRepository_)
const addressRepo = manager.getCustomRepository(this.addressRepository_) const addressRepo = manager.getCustomRepository(this.addressRepository_)
const { region_id } = data const { region_id } = data
@@ -342,7 +341,7 @@ class CartService extends BaseService {
* @retur {Promise} the result of the update operation * @retur {Promise} the result of the update operation
*/ */
async removeLineItem(cartId, lineItemId) { async removeLineItem(cartId, lineItemId) {
return this.atomicPhase_(async manager => { return this.atomicPhase_(async (manager) => {
const cart = await this.retrieve(cartId, { const cart = await this.retrieve(cartId, {
relations: [ relations: [
"items", "items",
@@ -352,7 +351,7 @@ class CartService extends BaseService {
], ],
}) })
const lineItem = cart.items.find(li => li.id === lineItemId) const lineItem = cart.items.find((li) => li.id === lineItemId)
if (!lineItem) { if (!lineItem) {
return cart return cart
} }
@@ -421,7 +420,7 @@ class CartService extends BaseService {
* @return {Promise} the result of the update operation * @return {Promise} the result of the update operation
*/ */
async addLineItem(cartId, lineItem) { async addLineItem(cartId, lineItem) {
return this.atomicPhase_(async manager => { return this.atomicPhase_(async (manager) => {
const cart = await this.retrieve(cartId, { const cart = await this.retrieve(cartId, {
relations: [ relations: [
"shipping_methods", "shipping_methods",
@@ -434,7 +433,7 @@ class CartService extends BaseService {
let currentItem let currentItem
if (lineItem.should_merge) { if (lineItem.should_merge) {
currentItem = cart.items.find(line => { currentItem = cart.items.find((line) => {
if (line.should_merge && line.variant_id === lineItem.variant_id) { if (line.should_merge && line.variant_id === lineItem.variant_id) {
return _.isEqual(line.metadata, lineItem.metadata) return _.isEqual(line.metadata, lineItem.metadata)
} }
@@ -500,13 +499,13 @@ class CartService extends BaseService {
* @return {Promise} the result of the update operation * @return {Promise} the result of the update operation
*/ */
async updateLineItem(cartId, lineItemId, lineItemUpdate) { async updateLineItem(cartId, lineItemId, lineItemUpdate) {
return this.atomicPhase_(async manager => { return this.atomicPhase_(async (manager) => {
const cart = await this.retrieve(cartId, { const cart = await this.retrieve(cartId, {
relations: ["items", "payment_sessions"], relations: ["items", "payment_sessions"],
}) })
// Ensure that the line item exists in the cart // Ensure that the line item exists in the cart
const lineItemExists = cart.items.find(i => i.id === lineItemId) const lineItemExists = cart.items.find((i) => i.id === lineItemId)
if (!lineItemExists) { if (!lineItemExists) {
throw new MedusaError( throw new MedusaError(
MedusaError.Types.INVALID_DATA, MedusaError.Types.INVALID_DATA,
@@ -553,7 +552,7 @@ class CartService extends BaseService {
// if any free shipping discounts, we ensure to update shipping method amount // if any free shipping discounts, we ensure to update shipping method amount
if (shouldAdd) { if (shouldAdd) {
await Promise.all( await Promise.all(
cart.shipping_methods.map(async sm => { cart.shipping_methods.map(async (sm) => {
const smRepo = this.manager_.getCustomRepository( const smRepo = this.manager_.getCustomRepository(
this.shippingMethodRepository_ this.shippingMethodRepository_
) )
@@ -568,7 +567,7 @@ class CartService extends BaseService {
) )
} else { } else {
await Promise.all( await Promise.all(
cart.shipping_methods.map(async sm => { cart.shipping_methods.map(async (sm) => {
const smRepo = this.manager_.getCustomRepository( const smRepo = this.manager_.getCustomRepository(
this.shippingMethodRepository_ this.shippingMethodRepository_
) )
@@ -584,7 +583,7 @@ class CartService extends BaseService {
} }
async update(cartId, update) { async update(cartId, update) {
return this.atomicPhase_(async manager => { return this.atomicPhase_(async (manager) => {
const cartRepo = manager.getCustomRepository(this.cartRepository_) const cartRepo = manager.getCustomRepository(this.cartRepository_)
const cart = await this.retrieve(cartId, { const cart = await this.retrieve(cartId, {
select: [ select: [
@@ -730,9 +729,7 @@ class CartService extends BaseService {
* @return {Promise} the resultign customer object * @return {Promise} the resultign customer object
*/ */
async createOrFetchUserFromEmail_(email) { async createOrFetchUserFromEmail_(email) {
const schema = Validator.string() const schema = Validator.string().email().required()
.email()
.required()
const { value, error } = schema.validate(email.toLowerCase()) const { value, error } = schema.validate(email.toLowerCase())
if (error) { if (error) {
throw new MedusaError( throw new MedusaError(
@@ -803,9 +800,10 @@ class CartService extends BaseService {
}) })
} }
addressOrId.country_code = addressOrId.country_code.toLowerCase() addressOrId.country_code = addressOrId.country_code?.toLowerCase()
if ( if (
addressOrId.country_code &&
!cart.region.countries.find( !cart.region.countries.find(
({ iso_2 }) => addressOrId.country_code === iso_2 ({ iso_2 }) => addressOrId.country_code === iso_2
) )
@@ -938,7 +936,7 @@ class CartService extends BaseService {
const toParse = [...cart.discounts, discount] const toParse = [...cart.discounts, discount]
let sawNotShipping = false let sawNotShipping = false
const newDiscounts = toParse.map(d => { const newDiscounts = toParse.map((d) => {
const drule = d.rule const drule = d.rule
switch (drule.type) { switch (drule.type) {
case "free_shipping": case "free_shipping":
@@ -968,7 +966,7 @@ class CartService extends BaseService {
* @return {Promise<Cart>} the resulting cart * @return {Promise<Cart>} the resulting cart
*/ */
async removeDiscount(cartId, discountCode) { async removeDiscount(cartId, discountCode) {
return this.atomicPhase_(async manager => { return this.atomicPhase_(async (manager) => {
const cart = await this.retrieve(cartId, { const cart = await this.retrieve(cartId, {
relations: ["discounts", "payment_sessions", "shipping_methods"], relations: ["discounts", "payment_sessions", "shipping_methods"],
}) })
@@ -977,7 +975,7 @@ class CartService extends BaseService {
await this.adjustFreeShipping_(cart, false) await this.adjustFreeShipping_(cart, false)
} }
cart.discounts = cart.discounts.filter(d => d.code !== discountCode) cart.discounts = cart.discounts.filter((d) => d.code !== discountCode)
const cartRepo = manager.getCustomRepository(this.cartRepository_) const cartRepo = manager.getCustomRepository(this.cartRepository_)
@@ -1008,7 +1006,7 @@ class CartService extends BaseService {
* Updates the currently selected payment session. * Updates the currently selected payment session.
*/ */
async updatePaymentSession(cartId, update) { async updatePaymentSession(cartId, update) {
return this.atomicPhase_(async manager => { return this.atomicPhase_(async (manager) => {
const cart = await this.retrieve(cartId, { const cart = await this.retrieve(cartId, {
relations: ["payment_sessions"], relations: ["payment_sessions"],
}) })
@@ -1042,7 +1040,7 @@ class CartService extends BaseService {
* @return {Promise<Cart>} the resulting cart * @return {Promise<Cart>} the resulting cart
*/ */
async authorizePayment(cartId, context = {}) { async authorizePayment(cartId, context = {}) {
return this.atomicPhase_(async manager => { return this.atomicPhase_(async (manager) => {
const cartRepository = manager.getCustomRepository(this.cartRepository_) const cartRepository = manager.getCustomRepository(this.cartRepository_)
const cart = await this.retrieve(cartId, { const cart = await this.retrieve(cartId, {
@@ -1089,7 +1087,7 @@ class CartService extends BaseService {
* @returns {Promise} result of update operation * @returns {Promise} result of update operation
*/ */
async setPaymentSession(cartId, providerId) { async setPaymentSession(cartId, providerId) {
return this.atomicPhase_(async manager => { return this.atomicPhase_(async (manager) => {
const psRepo = manager.getCustomRepository(this.paymentSessionRepository_) const psRepo = manager.getCustomRepository(this.paymentSessionRepository_)
const cart = await this.retrieve(cartId, { const cart = await this.retrieve(cartId, {
@@ -1118,13 +1116,13 @@ class CartService extends BaseService {
} }
await Promise.all( await Promise.all(
cart.payment_sessions.map(ps => { cart.payment_sessions.map((ps) => {
return psRepo.save({ ...ps, is_selected: null }) return psRepo.save({ ...ps, is_selected: null })
}) })
) )
const sess = cart.payment_sessions.find( const sess = cart.payment_sessions.find(
ps => ps.provider_id === providerId (ps) => ps.provider_id === providerId
) )
sess.is_selected = true sess.is_selected = true
@@ -1150,7 +1148,7 @@ class CartService extends BaseService {
* @returns {Promise} the result of the update operation. * @returns {Promise} the result of the update operation.
*/ */
async setPaymentSessions(cartOrCartId) { async setPaymentSessions(cartOrCartId) {
return this.atomicPhase_(async manager => { return this.atomicPhase_(async (manager) => {
const psRepo = manager.getCustomRepository(this.paymentSessionRepository_) const psRepo = manager.getCustomRepository(this.paymentSessionRepository_)
let cartId = let cartId =
@@ -1233,7 +1231,7 @@ class CartService extends BaseService {
* @returns {Promise<Cart>} the resulting cart. * @returns {Promise<Cart>} the resulting cart.
*/ */
async deletePaymentSession(cartId, providerId) { async deletePaymentSession(cartId, providerId) {
return this.atomicPhase_(async manager => { return this.atomicPhase_(async (manager) => {
const cart = await this.retrieve(cartId, { const cart = await this.retrieve(cartId, {
relations: ["payment_sessions"], relations: ["payment_sessions"],
}) })
@@ -1274,7 +1272,7 @@ class CartService extends BaseService {
* @returns {Promise<Cart>} the resulting cart. * @returns {Promise<Cart>} the resulting cart.
*/ */
async refreshPaymentSession(cartId, providerId) { async refreshPaymentSession(cartId, providerId) {
return this.atomicPhase_(async manager => { return this.atomicPhase_(async (manager) => {
const cart = await this.retrieve(cartId, { const cart = await this.retrieve(cartId, {
relations: ["payment_sessions"], relations: ["payment_sessions"],
}) })
@@ -1313,7 +1311,7 @@ class CartService extends BaseService {
* @return {Promise} the result of the update operation * @return {Promise} the result of the update operation
*/ */
async addShippingMethod(cartId, optionId, data) { async addShippingMethod(cartId, optionId, data) {
return this.atomicPhase_(async manager => { return this.atomicPhase_(async (manager) => {
const cart = await this.retrieve(cartId, { const cart = await this.retrieve(cartId, {
select: ["subtotal"], select: ["subtotal"],
relations: [ relations: [
@@ -1397,7 +1395,7 @@ class CartService extends BaseService {
if (cart.items.length) { if (cart.items.length) {
cart.items = await Promise.all( cart.items = await Promise.all(
cart.items cart.items
.map(async item => { .map(async (item) => {
const availablePrice = await this.productVariantService_ const availablePrice = await this.productVariantService_
.getRegionPrice(item.variant_id, regionId) .getRegionPrice(item.variant_id, regionId)
.catch(() => undefined) .catch(() => undefined)
@@ -1476,20 +1474,20 @@ class CartService extends BaseService {
} }
if (cart.discounts && cart.discounts.length) { if (cart.discounts && cart.discounts.length) {
const newDiscounts = cart.discounts.map(d => { const newDiscounts = cart.discounts.map((d) => {
if (d.regions.find(({ id }) => id === regionId)) { if (d.regions.find(({ id }) => id === regionId)) {
return d return d
} }
}) })
cart.discounts = newDiscounts.filter(d => !!d) cart.discounts = newDiscounts.filter((d) => !!d)
} }
cart.gift_cards = [] cart.gift_cards = []
if (cart.payment_sessions && cart.payment_sessions.length) { if (cart.payment_sessions && cart.payment_sessions.length) {
await Promise.all( await Promise.all(
cart.payment_sessions.map(ps => cart.payment_sessions.map((ps) =>
this.paymentProviderService_ this.paymentProviderService_
.withTransaction(this.manager_) .withTransaction(this.manager_)
.deleteSession(ps) .deleteSession(ps)
@@ -1507,7 +1505,7 @@ class CartService extends BaseService {
* not found. * not found.
*/ */
async delete(cartId) { async delete(cartId) {
return this.atomicPhase_(async manager => { return this.atomicPhase_(async (manager) => {
const cart = await this.retrieve(cartId, { const cart = await this.retrieve(cartId, {
relations: ["items", "discounts", "payment_sessions"], relations: ["items", "discounts", "payment_sessions"],
}) })
@@ -1541,7 +1539,7 @@ class CartService extends BaseService {
* @return {Promise} resolves to the updated result. * @return {Promise} resolves to the updated result.
*/ */
async setMetadata(cartId, key, value) { async setMetadata(cartId, key, value) {
return this.atomicPhase_(async manager => { return this.atomicPhase_(async (manager) => {
const cartRepo = manager.getCustomRepository(this.cartRepository_) const cartRepo = manager.getCustomRepository(this.cartRepository_)
const validatedId = this.validateId_(cartId) const validatedId = this.validateId_(cartId)
@@ -1575,7 +1573,7 @@ class CartService extends BaseService {
* @return {Promise} resolves to the updated result. * @return {Promise} resolves to the updated result.
*/ */
async deleteMetadata(cartId, key) { async deleteMetadata(cartId, key) {
return this.atomicPhase_(async manager => { return this.atomicPhase_(async (manager) => {
const cartRepo = manager.getCustomRepository(this.cartRepository_) const cartRepo = manager.getCustomRepository(this.cartRepository_)
const validatedId = this.validateId_(cartId) const validatedId = this.validateId_(cartId)