From 43613f3f5879396a0e7dc4c5e39a0868d920aac1 Mon Sep 17 00:00:00 2001 From: Riqwan Thamir Date: Tue, 21 May 2024 12:05:01 +0200 Subject: [PATCH] chore: pick the default store region (#7369) * chore: pick the default store region * chore: fix test * chore: remove from defaults workflow and move to seeds * chore: undo payment provider change * chore: rearrange conditionals --- .../helpers/seed-storefront-defaults.ts | 40 +++++++++++++++++++ .../cart/store/cart.workflows.spec.ts | 9 ++--- .../__tests__/cart/store/carts.spec.ts | 9 ++--- integration-tests/modules/medusa-config.js | 1 + .../cart/steps/find-one-or-any-region.ts | 32 +++++++++------ 5 files changed, 69 insertions(+), 22 deletions(-) create mode 100644 integration-tests/helpers/seed-storefront-defaults.ts diff --git a/integration-tests/helpers/seed-storefront-defaults.ts b/integration-tests/helpers/seed-storefront-defaults.ts new file mode 100644 index 0000000000..9186ed1a0c --- /dev/null +++ b/integration-tests/helpers/seed-storefront-defaults.ts @@ -0,0 +1,40 @@ +import { createDefaultsWorkflow } from "@medusajs/core-flows" +import { ModuleRegistrationName } from "@medusajs/modules-sdk" +import { + IRegionModuleService, + IStoreModuleService, + MedusaContainer, +} from "@medusajs/types" + +export const seedStorefrontDefaults = async ( + container: MedusaContainer, + defaultCurrency: string = "usd" +) => { + const regionModule: IRegionModuleService = container.resolve( + ModuleRegistrationName.REGION + ) + const storeModule: IStoreModuleService = container.resolve( + ModuleRegistrationName.STORE + ) + + // Creates the stores & default sales channel + await createDefaultsWorkflow(container).run() + + const region = await regionModule.create({ + name: "Default Region", + currency_code: defaultCurrency, + }) + + let [store] = await storeModule.list({}) + + store = await storeModule.update(store.id, { + default_region_id: region.id, + supported_currency_codes: [region.currency_code], + default_currency_code: region.currency_code, + }) + + return { + region, + store, + } +} diff --git a/integration-tests/modules/__tests__/cart/store/cart.workflows.spec.ts b/integration-tests/modules/__tests__/cart/store/cart.workflows.spec.ts index e2c46f7486..77f3e0e573 100644 --- a/integration-tests/modules/__tests__/cart/store/cart.workflows.spec.ts +++ b/integration-tests/modules/__tests__/cart/store/cart.workflows.spec.ts @@ -32,6 +32,7 @@ import { adminHeaders, createAdminUser, } from "../../../../helpers/create-admin-user" +import { seedStorefrontDefaults } from "../../../../helpers/seed-storefront-defaults" jest.setTimeout(200000) @@ -89,11 +90,9 @@ medusaIntegrationTestRunner({ beforeEach(async () => { await createAdminUser(dbConnection, adminHeaders, appContainer) - // Here, so we don't have to create a region for each test - defaultRegion = await regionModuleService.create({ - name: "Default Region", - currency_code: "dkk", - }) + const { region } = await seedStorefrontDefaults(appContainer, "dkk") + + defaultRegion = region }) describe("CreateCartWorkflow", () => { diff --git a/integration-tests/modules/__tests__/cart/store/carts.spec.ts b/integration-tests/modules/__tests__/cart/store/carts.spec.ts index 7cb3a3f4e7..70fa5e5ef6 100644 --- a/integration-tests/modules/__tests__/cart/store/carts.spec.ts +++ b/integration-tests/modules/__tests__/cart/store/carts.spec.ts @@ -27,6 +27,7 @@ import { } from "@medusajs/utils" import { medusaIntegrationTestRunner } from "medusa-test-utils" import { createAdminUser } from "../../../../helpers/create-admin-user" +import { seedStorefrontDefaults } from "../../../../helpers/seed-storefront-defaults" import { createAuthenticatedCustomer } from "../../../helpers/create-authenticated-customer" import { setupTaxStructure } from "../../fixtures" @@ -57,6 +58,7 @@ medusaIntegrationTestRunner({ let defaultRegion let region + let store beforeAll(async () => { appContainer = getContainer() @@ -83,11 +85,8 @@ medusaIntegrationTestRunner({ beforeEach(async () => { await createAdminUser(dbConnection, adminHeaders, appContainer) - // Here, so we don't have to create a region for each test - defaultRegion = await regionModule.create({ - name: "Default Region", - currency_code: "dkk", - }) + const { region } = await seedStorefrontDefaults(appContainer, "dkk") + defaultRegion = region }) describe("POST /store/carts", () => { diff --git a/integration-tests/modules/medusa-config.js b/integration-tests/modules/medusa-config.js index 44ddd23426..5ee43cba3a 100644 --- a/integration-tests/modules/medusa-config.js +++ b/integration-tests/modules/medusa-config.js @@ -86,6 +86,7 @@ module.exports = { [Modules.PRODUCT]: true, [Modules.PRICING]: true, [Modules.PROMOTION]: true, + [Modules.REGION]: true, [Modules.CUSTOMER]: true, [Modules.SALES_CHANNEL]: true, [Modules.CART]: true, diff --git a/packages/core/core-flows/src/definition/cart/steps/find-one-or-any-region.ts b/packages/core/core-flows/src/definition/cart/steps/find-one-or-any-region.ts index 4df25c3d46..3acce38620 100644 --- a/packages/core/core-flows/src/definition/cart/steps/find-one-or-any-region.ts +++ b/packages/core/core-flows/src/definition/cart/steps/find-one-or-any-region.ts @@ -1,5 +1,5 @@ import { ModuleRegistrationName } from "@medusajs/modules-sdk" -import { IRegionModuleService } from "@medusajs/types" +import { IRegionModuleService, IStoreModuleService } from "@medusajs/types" import { MedusaError } from "@medusajs/utils" import { StepResponse, createStep } from "@medusajs/workflows-sdk" @@ -11,21 +11,29 @@ export const findOneOrAnyRegionStep = createStep( ModuleRegistrationName.REGION ) - if (!data.regionId) { - // TODO: Pick up the default store region if none is provided - const regions = await service.list({}) + const storeModule = container.resolve( + ModuleRegistrationName.STORE + ) - if (!regions?.length) { - throw new MedusaError( - MedusaError.Types.INVALID_DATA, - "No regions found" - ) - } + if (data.regionId) { + const region = await service.retrieve(data.regionId) - return new StepResponse(regions[0]) + return new StepResponse(region) } - const region = await service.retrieve(data.regionId) + const [store] = await storeModule.list() + + if (!store) { + throw new MedusaError(MedusaError.Types.NOT_FOUND, "Store not found") + } + + const [region] = await service.list({ + id: store.default_region_id, + }) + + if (!region) { + throw new MedusaError(MedusaError.Types.INVALID_DATA, "No regions found") + } return new StepResponse(region) }