From 286cc4c7b260a29d16af75996b453ea6752f7552 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 13 Feb 2026 15:48:35 +0100 Subject: [PATCH] frontend-dynamic-feature-loader: update tests for new shared dependencies format Update the loader tests to use the new RuntimeSharedDependenciesGlobal format with versioned items array instead of the old flat object with module properties. Signed-off-by: Patrik Oldsberg --- .../src/loader.test.tsx | 120 ++++++++---------- 1 file changed, 56 insertions(+), 64 deletions(-) diff --git a/packages/frontend-dynamic-feature-loader/src/loader.test.tsx b/packages/frontend-dynamic-feature-loader/src/loader.test.tsx index b24aea0fdd..cb066e8b21 100644 --- a/packages/frontend-dynamic-feature-loader/src/loader.test.tsx +++ b/packages/frontend-dynamic-feature-loader/src/loader.test.tsx @@ -45,14 +45,13 @@ function mockDefaultConfig(): Config { }); } +// eslint-disable-next-line @backstage/no-relative-monorepo-imports +import { BACKSTAGE_RUNTIME_SHARED_DEPENDENCIES_GLOBAL } from '../../module-federation-common/src/types'; + const globalSpy = jest.fn(); -Object.defineProperty( - global, - '__backstage-module-federation-shared-dependencies__', - { - get: globalSpy, - }, -); +Object.defineProperty(global, BACKSTAGE_RUNTIME_SHARED_DEPENDENCIES_GLOBAL, { + get: globalSpy, +}); describe('dynamicFrontendFeaturesLoader', () => { const server = setupServer(); @@ -128,67 +127,62 @@ describe('dynamicFrontendFeaturesLoader', () => { resetFederationGlobalInfo(); }); - const mockedDefaultSharedDependencies = { - react: { + const mockedDefaultSharedItems = [ + { + name: 'react', version: '18.3.1', - requiredVersion: '*', - singleton: true, - eager: true, - module: () => ({ default: {} }), + lib: async () => ({ default: {} }), + shareConfig: { singleton: true, requiredVersion: '*', eager: true }, }, - 'react-dom': { + { + name: 'react-dom', version: '18.3.1', - requiredVersion: '*', - singleton: true, - eager: true, - module: () => ({ default: {} }), + lib: async () => ({ default: {} }), + shareConfig: { singleton: true, requiredVersion: '*', eager: true }, }, - 'react-router': { + { + name: 'react-router', version: '6.28.2', - requiredVersion: '*', - singleton: true, - eager: true, - module: () => ({ default: {} }), + lib: async () => ({ default: {} }), + shareConfig: { singleton: true, requiredVersion: '*', eager: true }, }, - 'react-router-dom': { + { + name: 'react-router-dom', version: '6.28.2', - requiredVersion: '*', - singleton: true, - eager: true, - module: () => ({ default: {} }), + lib: async () => ({ default: {} }), + shareConfig: { singleton: true, requiredVersion: '*', eager: true }, }, - '@material-ui/core/styles': { + { + name: '@material-ui/core/styles', version: '4.12.4', - requiredVersion: '*', - singleton: true, - eager: true, - module: () => ({ default: {} }), + lib: async () => ({ default: {} }), + shareConfig: { singleton: true, requiredVersion: '*', eager: true }, }, - '@material-ui/styles': { + { + name: '@material-ui/styles', version: '4.11.5', - requiredVersion: '*', - singleton: true, - eager: true, - module: () => ({ default: {} }), + lib: async () => ({ default: {} }), + shareConfig: { singleton: true, requiredVersion: '*', eager: true }, }, - '@mui/material/styles/': { + { + name: '@mui/material/styles/', version: '5.16.14', - requiredVersion: '*', - singleton: true, - eager: true, - module: () => ({ default: {} }), + lib: async () => ({ default: {} }), + shareConfig: { singleton: true, requiredVersion: '*', eager: true }, }, - '@emotion/react': { + { + name: '@emotion/react', version: '11.13.5', - requiredVersion: '*', - singleton: true, - eager: true, - module: () => ({ default: {} }), + lib: async () => ({ default: {} }), + shareConfig: { singleton: true, requiredVersion: '*', eager: true }, }, - }; + ]; beforeEach(() => { - globalSpy.mockReturnValue(mockedDefaultSharedDependencies); + globalSpy.mockReturnValue({ + items: mockedDefaultSharedItems, + version: 'v1', + }); }); it('should return immediately if dynamic plugins are not enabled in config', async () => { @@ -1152,22 +1146,20 @@ describe('dynamicFrontendFeaturesLoader', () => { expect(spyInit).toHaveBeenCalledTimes(1); expect(spyInit.mock.calls[0][0].options).toMatchObject({ shared: Object.fromEntries( - Object.entries(mockedDefaultSharedDependencies).map( - ([name, shared]) => [ - name, - [ - { - version: shared.version, - shareConfig: { - singleton: shared.singleton, - requiredVersion: shared.requiredVersion, - eager: shared.eager, - }, - strategy: 'version-first', + mockedDefaultSharedItems.map(item => [ + item.name, + [ + { + version: item.version, + shareConfig: { + singleton: item.shareConfig.singleton, + requiredVersion: item.shareConfig.requiredVersion, + eager: item.shareConfig.eager, }, - ], + strategy: 'version-first', + }, ], - ), + ]), ), }); });