diff --git a/integration-tests/plugins/__tests__/link-modules/cart-region.spec.ts b/integration-tests/plugins/__tests__/link-modules/cart-region.spec.ts new file mode 100644 index 0000000000000..e192300859673 --- /dev/null +++ b/integration-tests/plugins/__tests__/link-modules/cart-region.spec.ts @@ -0,0 +1,99 @@ +import { ModuleRegistrationName } from "@medusajs/modules-sdk" +import { ICartModuleService, IRegionModuleService } from "@medusajs/types" +import path from "path" +import { startBootstrapApp } from "../../../environment-helpers/bootstrap-app" +import { getContainer } from "../../../environment-helpers/use-container" +import { initDb, useDb } from "../../../environment-helpers/use-db" +import adminSeeder from "../../../helpers/admin-seeder" + +jest.setTimeout(50000) + +const env = { MEDUSA_FF_MEDUSA_V2: true } + +describe("Link: Cart Region", () => { + let dbConnection + let appContainer + let shutdownServer + let cartModuleService: ICartModuleService + let regionModule: IRegionModuleService + let remoteQuery + + beforeAll(async () => { + const cwd = path.resolve(path.join(__dirname, "..", "..")) + dbConnection = await initDb({ cwd, env } as any) + shutdownServer = await startBootstrapApp({ cwd, env }) + appContainer = getContainer() + cartModuleService = appContainer.resolve(ModuleRegistrationName.CART) + regionModule = appContainer.resolve(ModuleRegistrationName.REGION) + remoteQuery = appContainer.resolve("remoteQuery") + }) + + afterAll(async () => { + const db = useDb() + await db.shutdown() + await shutdownServer() + }) + + beforeEach(async () => { + await adminSeeder(dbConnection) + + // @ts-ignore + await regionModule.createDefaultCountriesAndCurrencies() + }) + + afterEach(async () => { + const db = useDb() + await db.teardown() + }) + + it("should query carts and regions with remote query", async () => { + const region = await regionModule.create({ + name: "Region", + currency_code: "usd", + }) + + const cart = await cartModuleService.create({ + email: "tony@stark.com", + currency_code: "usd", + region_id: region.id, + }) + + const carts = await remoteQuery({ + cart: { + fields: ["id"], + region: { + fields: ["id"], + }, + }, + }) + + const regions = await remoteQuery({ + region: { + fields: ["id"], + carts: { + fields: ["id"], + }, + }, + }) + + expect(carts).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + id: cart.id, + region: expect.objectContaining({ id: region.id }), + }), + ]) + ) + + expect(regions).toEqual( + expect.arrayContaining([ + expect.objectContaining({ + id: region.id, + carts: expect.arrayContaining([ + expect.objectContaining({ id: cart.id }), + ]), + }), + ]) + ) + }) +}) diff --git a/packages/link-modules/src/definitions/cart-region.ts b/packages/link-modules/src/definitions/cart-region.ts index 2039212fc1315..7cf54ca1258ff 100644 --- a/packages/link-modules/src/definitions/cart-region.ts +++ b/packages/link-modules/src/definitions/cart-region.ts @@ -18,8 +18,8 @@ export const CartRegion: ModuleJoinerConfig = { serviceName: Modules.REGION, relationship: { serviceName: Modules.CART, - primaryKey: "id", - foreignKey: "cart_id", + primaryKey: "region_id", + foreignKey: "id", alias: "carts", isList: true, },