import { Metadata } from '../get-bundle-info'; import { getMFESupportsRerendering } from '../get-mfe-supports-rerendering'; describe(`[web-components] ${getMFESupportsRerendering.name}`, () => { let metadata: Required>; beforeEach(() => { metadata = { bundledWith: {}, dependencies: {}, }; }); function itReturns(value: boolean) { test(`returns ${value}`, () => { expect(subject()).toBe(value); }); } function itRaises(error: any) { test(`raises ${error.name}`, () => { expect(() => subject()).toThrow(error); }); } function subject() { return getMFESupportsRerendering(metadata.bundledWith, metadata.dependencies); } itReturns(false); const bundledWith: { name: string; version: string; expected: boolean }[] = [ { name: 'startup', version: '22.11.0', expected: false }, { name: 'startup', version: '22.12.0', expected: true }, { name: 'web-components', version: '22.11.0', expected: false }, { name: 'web-components', version: '22.12.0', expected: true }, ]; describe.each(bundledWith)( `when bundledWith $name version $version`, ({ name, version, expected }) => { beforeEach(() => (metadata.bundledWith[`@servicetitan/${name}`] = version)); itReturns(expected); } ); const dependencies: { name: string; version: string; expected: boolean }[] = [ { name: 'web-components', version: '22.11.0', expected: false }, { name: 'web-components', version: '22.12.0', expected: true }, /* * The reason we expect this to be false is because we do not know the true version * of web-components when there is a semver range. We can only assume that it is the * lowest version in the range. */ { name: 'web-components', version: '^22.11.0', expected: false }, { name: 'web-components', version: '~22.12.0', expected: true }, ]; describe.each(dependencies)( `when dependencies contains $name version $version`, ({ name, version, expected }) => { beforeEach(() => (metadata.dependencies[`@servicetitan/${name}`] = version)); test(`returns ${expected}`, () => expect(subject()).toBe(expected)); } ); describe('when bundledWith startup version 22.12.0 and dependencies contains web-components 22.11.0', () => { beforeEach(() => { metadata = { bundledWith: { '@servicetitan/startup': '22.12.0' }, dependencies: { '@servicetitan/web-components': '22.11.0' }, }; }); itReturns(false); }); describe('when bundledWith startup version 22.12.0 and bundledWith web-components version is 22.11.0', () => { beforeEach(() => { metadata = { bundledWith: { '@servicetitan/startup': '22.12.0', '@servicetitan/web-components': '22.11.0', }, dependencies: {}, }; }); itReturns(false); }); const deps: ['bundledWith' | 'dependencies', string][] = [ ['bundledWith', '@servicetitan/web-components'], ['dependencies', '@servicetitan/web-components'], ['bundledWith', '@servicetitan/startup'], ]; describe.each(deps)(`when %s[%s] version is not a semver`, (key, depName) => { beforeEach(() => (metadata[key][depName] = 'foobar')); itRaises(TypeError); }); });