feat: Assign store default sales channel in cart creation (#7495)
This commit is contained in:
1 parent
ef6d748784
commit
c9de1d28a4
2 files changed
+59
-11
No files matched your search
@@ -16,6 +16,7 @@ import {
|
|||||||
IPromotionModuleService,
|
IPromotionModuleService,
|
||||||
IRegionModuleService,
|
IRegionModuleService,
|
||||||
ISalesChannelModuleService,
|
ISalesChannelModuleService,
|
||||||
|
IStoreModuleService,
|
||||||
ITaxModuleService,
|
ITaxModuleService,
|
||||||
ProductStatus,
|
ProductStatus,
|
||||||
} from "@medusajs/types"
|
} from "@medusajs/types"
|
||||||
@@ -56,8 +57,8 @@ medusaIntegrationTestRunner({
|
|||||||
let remoteLinkService
|
let remoteLinkService
|
||||||
let regionService: IRegionModuleService
|
let regionService: IRegionModuleService
|
||||||
let paymentService: IPaymentModuleService
|
let paymentService: IPaymentModuleService
|
||||||
|
let storeService: IStoreModuleService
|
||||||
|
|
||||||
let defaultRegion
|
|
||||||
let region
|
let region
|
||||||
let store
|
let store
|
||||||
|
|
||||||
@@ -75,6 +76,7 @@ medusaIntegrationTestRunner({
|
|||||||
taxModule = appContainer.resolve(ModuleRegistrationName.TAX)
|
taxModule = appContainer.resolve(ModuleRegistrationName.TAX)
|
||||||
regionService = appContainer.resolve(ModuleRegistrationName.REGION)
|
regionService = appContainer.resolve(ModuleRegistrationName.REGION)
|
||||||
paymentService = appContainer.resolve(ModuleRegistrationName.PAYMENT)
|
paymentService = appContainer.resolve(ModuleRegistrationName.PAYMENT)
|
||||||
|
storeService = appContainer.resolve(ModuleRegistrationName.STORE)
|
||||||
fulfillmentModule = appContainer.resolve(
|
fulfillmentModule = appContainer.resolve(
|
||||||
ModuleRegistrationName.FULFILLMENT
|
ModuleRegistrationName.FULFILLMENT
|
||||||
)
|
)
|
||||||
@@ -86,8 +88,12 @@ medusaIntegrationTestRunner({
|
|||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await createAdminUser(dbConnection, adminHeaders, appContainer)
|
await createAdminUser(dbConnection, adminHeaders, appContainer)
|
||||||
|
|
||||||
const { region } = await seedStorefrontDefaults(appContainer, "dkk")
|
const { store: defaultStore } = await seedStorefrontDefaults(
|
||||||
defaultRegion = region
|
appContainer,
|
||||||
|
"dkk"
|
||||||
|
)
|
||||||
|
|
||||||
|
store = defaultStore
|
||||||
})
|
})
|
||||||
|
|
||||||
describe("POST /store/carts", () => {
|
describe("POST /store/carts", () => {
|
||||||
@@ -298,6 +304,31 @@ medusaIntegrationTestRunner({
|
|||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it("should create cart with default store sales channel", async () => {
|
||||||
|
const sc = await scModule.create({
|
||||||
|
name: "Webshop",
|
||||||
|
})
|
||||||
|
|
||||||
|
await storeService.update(store.id, {
|
||||||
|
default_sales_channel_id: sc.id,
|
||||||
|
})
|
||||||
|
|
||||||
|
const response = await api.post(`/store/carts`, {
|
||||||
|
email: "tony@stark.com",
|
||||||
|
currency_code: "usd",
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(response.status).toEqual(200)
|
||||||
|
expect(response.data.cart).toEqual(
|
||||||
|
expect.objectContaining({
|
||||||
|
id: response.data.cart.id,
|
||||||
|
currency_code: "usd",
|
||||||
|
email: "tony@stark.com",
|
||||||
|
sales_channel_id: sc.id,
|
||||||
|
})
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
it("should create cart with region currency code", async () => {
|
it("should create cart with region currency code", async () => {
|
||||||
const region = await regionModule.create({
|
const region = await regionModule.create({
|
||||||
name: "US",
|
name: "US",
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
import { ModuleRegistrationName } from "@medusajs/modules-sdk"
|
import { ModuleRegistrationName } from "@medusajs/modules-sdk"
|
||||||
import { ISalesChannelModuleService, SalesChannelDTO } from "@medusajs/types"
|
import {
|
||||||
import { MedusaError } from "@medusajs/utils"
|
ISalesChannelModuleService,
|
||||||
|
IStoreModuleService,
|
||||||
|
SalesChannelDTO,
|
||||||
|
} from "@medusajs/types"
|
||||||
|
import { MedusaError, isDefined } from "@medusajs/utils"
|
||||||
import { StepResponse, createStep } from "@medusajs/workflows-sdk"
|
import { StepResponse, createStep } from "@medusajs/workflows-sdk"
|
||||||
|
|
||||||
interface StepInput {
|
interface StepInput {
|
||||||
@@ -14,16 +18,29 @@ export const findSalesChannelStep = createStep(
|
|||||||
const salesChannelService = container.resolve<ISalesChannelModuleService>(
|
const salesChannelService = container.resolve<ISalesChannelModuleService>(
|
||||||
ModuleRegistrationName.SALES_CHANNEL
|
ModuleRegistrationName.SALES_CHANNEL
|
||||||
)
|
)
|
||||||
|
const storeModule = container.resolve<IStoreModuleService>(
|
||||||
if (data.salesChannelId === null) {
|
ModuleRegistrationName.STORE
|
||||||
return new StepResponse(null)
|
)
|
||||||
}
|
|
||||||
|
|
||||||
let salesChannel: SalesChannelDTO | undefined
|
let salesChannel: SalesChannelDTO | undefined
|
||||||
|
|
||||||
if (data.salesChannelId) {
|
if (data.salesChannelId) {
|
||||||
salesChannel = await salesChannelService.retrieve(data.salesChannelId)
|
salesChannel = await salesChannelService.retrieve(data.salesChannelId)
|
||||||
} else {
|
} else if (!isDefined(data.salesChannelId)) {
|
||||||
// TODO: Find default sales channel from store
|
const [store] = await storeModule.list(
|
||||||
|
{},
|
||||||
|
{ select: ["default_sales_channel_id"] }
|
||||||
|
)
|
||||||
|
|
||||||
|
if (store?.default_sales_channel_id) {
|
||||||
|
salesChannel = await salesChannelService.retrieve(
|
||||||
|
store.default_sales_channel_id
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!salesChannel) {
|
||||||
|
return new StepResponse(null)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (salesChannel?.is_disabled) {
|
if (salesChannel?.is_disabled) {
|
||||||
|
|||||||
Reference in new issue
Block a user