From 45df24f7076b98401512c872ee07784bec9dd765 Mon Sep 17 00:00:00 2001 From: Adrien de Peretti Date: Mon, 21 Oct 2024 13:42:17 +0200 Subject: [PATCH] fix(product): Category repository missing ontext (#9688) **What** - Fix product category repository missing context passed to down level methods - Ensure the base repository when getting the active manager returns a fresh one if possible instead of the global one in order to prevent shared entity map by mistake --- .../src/dal/mikro-orm/mikro-orm-repository.ts | 2 +- .../__tests__/product-category.ts | 62 +++++++++---------- .../src/repositories/product-category.ts | 8 ++- 3 files changed, 35 insertions(+), 37 deletions(-) diff --git a/packages/core/utils/src/dal/mikro-orm/mikro-orm-repository.ts b/packages/core/utils/src/dal/mikro-orm/mikro-orm-repository.ts index 5210b1f16cb4e..6b7e03da32199 100644 --- a/packages/core/utils/src/dal/mikro-orm/mikro-orm-repository.ts +++ b/packages/core/utils/src/dal/mikro-orm/mikro-orm-repository.ts @@ -54,7 +54,7 @@ export class MikroOrmBase { transactionManager, manager, }: Context = {}): TManager { - return (transactionManager ?? manager ?? this.manager_) as TManager + return (transactionManager ?? manager ?? this.getFreshManager()) as TManager } async transaction( diff --git a/packages/modules/product/integration-tests/__tests__/product-category.ts b/packages/modules/product/integration-tests/__tests__/product-category.ts index 77aafe8b14c61..5c66a95972270 100644 --- a/packages/modules/product/integration-tests/__tests__/product-category.ts +++ b/packages/modules/product/integration-tests/__tests__/product-category.ts @@ -235,38 +235,38 @@ moduleIntegrationTestRunner({ mpath: "electronics.computers.laptops.gaming-laptops.high-performance.4k-gaming", parent_category_id: "high-performance", - parent_category: { + parent_category: expect.objectContaining({ id: "high-performance", parent_category_id: "gaming-laptops", handle: "high-performance-gaming-laptops", mpath: "electronics.computers.laptops.gaming-laptops.high-performance", - parent_category: { + parent_category: expect.objectContaining({ id: "gaming-laptops", handle: "gaming-laptops", mpath: "electronics.computers.laptops.gaming-laptops", parent_category_id: "laptops", - parent_category: { + parent_category: expect.objectContaining({ id: "laptops", parent_category_id: "computers", handle: "laptops", mpath: "electronics.computers.laptops", - parent_category: { + parent_category: expect.objectContaining({ id: "computers", handle: "computers-&-accessories", mpath: "electronics.computers", parent_category_id: "electronics", - parent_category: { + parent_category: expect.objectContaining({ id: "electronics", parent_category_id: null, handle: "electronics", mpath: "electronics", parent_category: null, - }, - }, - }, - }, - }, + }), + }), + }), + }), + }), }, ]) }) @@ -421,38 +421,38 @@ moduleIntegrationTestRunner({ handle: "category-1-a", mpath: "category-0.category-1.category-1-a", parent_category_id: "category-1", - parent_category: { + parent_category: expect.objectContaining({ id: "category-1", handle: "category-1", mpath: "category-0.category-1", parent_category_id: "category-0", - parent_category: { + parent_category: expect.objectContaining({ id: "category-0", handle: "category-0", mpath: "category-0", parent_category_id: null, parent_category: null, - }, - }, + }), + }), }, { id: "category-1-b", handle: "category-1-b", mpath: "category-0.category-1.category-1-b", parent_category_id: "category-1", - parent_category: { + parent_category: expect.objectContaining({ id: "category-1", handle: "category-1", mpath: "category-0.category-1", parent_category_id: "category-0", - parent_category: { + parent_category: expect.objectContaining({ id: "category-0", handle: "category-0", mpath: "category-0", parent_category_id: null, parent_category: null, - }, - }, + }), + }), }, ]) }) @@ -469,29 +469,25 @@ moduleIntegrationTestRunner({ } ) - const serializedObject = JSON.parse( - JSON.stringify(productCategoryResults) - ) - - expect(serializedObject).toEqual([ + expect(productCategoryResults).toEqual([ { id: "category-1-a", handle: "category-1-a", mpath: "category-0.category-1.category-1-a", parent_category_id: "category-1", - parent_category: { + parent_category: expect.objectContaining({ id: "category-1", handle: "category-1", mpath: "category-0.category-1", parent_category_id: "category-0", - parent_category: { + parent_category: expect.objectContaining({ id: "category-0", handle: "category-0", mpath: "category-0", parent_category_id: null, parent_category: null, - }, - }, + }), + }), category_children: [], }, { @@ -499,26 +495,26 @@ moduleIntegrationTestRunner({ handle: "category-1-b", mpath: "category-0.category-1.category-1-b", parent_category_id: "category-1", - parent_category: { + parent_category: expect.objectContaining({ id: "category-1", handle: "category-1", mpath: "category-0.category-1", parent_category_id: "category-0", - parent_category: { + parent_category: expect.objectContaining({ id: "category-0", handle: "category-0", mpath: "category-0", parent_category_id: null, parent_category: null, - }, - }, + }), + }), category_children: [ - { + expect.objectContaining({ id: "category-1-b-1", handle: "category-1-b-1", mpath: "category-0.category-1.category-1-b.category-1-b-1", parent_category_id: "category-1-b", - }, + }), ], }, ]) diff --git a/packages/modules/product/src/repositories/product-category.ts b/packages/modules/product/src/repositories/product-category.ts index 249d4ccd2644d..b3374d1aebad0 100644 --- a/packages/modules/product/src/repositories/product-category.ts +++ b/packages/modules/product/src/repositories/product-category.ts @@ -6,9 +6,9 @@ import { } from "@medusajs/framework/types" import { DALUtils, isDefined, MedusaError } from "@medusajs/framework/utils" import { - LoadStrategy, FilterQuery as MikroFilterQuery, FindOptions as MikroOptions, + LoadStrategy, } from "@mikro-orm/core" import { SqlEntityManager } from "@mikro-orm/postgresql" import { ProductCategory } from "@models" @@ -93,7 +93,8 @@ export class ProductCategoryRepository extends DALUtils.MikroOrmBaseTreeReposito ancestors: transformOptions.includeAncestorsTree, }, productCategories, - findOptions_ + findOptions_, + context ) return this.sortCategoriesByRank(categoriesTree) @@ -250,7 +251,8 @@ export class ProductCategoryRepository extends DALUtils.MikroOrmBaseTreeReposito ancestors: transformOptions.includeAncestorsTree, }, productCategories, - findOptions_ + findOptions_, + context ) return [this.sortCategoriesByRank(categoriesTree), count]