lion/packages/ui/components/overlays/test/utils-tests/is-equal-config.test.js
2022-10-31 16:55:07 +01:00

81 lines
2.3 KiB
JavaScript

import { expect } from '@open-wc/testing';
import { isEqualConfig } from '../../src/utils/is-equal-config.js';
function TestConfig() {
return {
placementMode: /** @type {'local'|'global'} */ ('local'),
hidesOnOutsideClick: true,
popperConfig: {
modifiers: [
{
name: 'offset',
enabled: false,
},
],
},
};
}
/** Used for detecting if it's safe to disregard OverlayConfig changes with equal value. */
describe('isEqualConfig()', () => {
it('returns true for same reference', () => {
const config = TestConfig();
expect(isEqualConfig(config, config)).eql(true);
});
it('compares null props', () => {
const config = TestConfig();
const nullPropConfig = {
...config,
elementToFocusAfterHide: {
nullProp: null,
},
};
// @ts-ignore
expect(isEqualConfig(nullPropConfig, nullPropConfig)).eql(true);
});
it('compares shallow props', () => {
const config = TestConfig();
expect(isEqualConfig(config, { ...config })).eql(true);
const differentConfig = { ...config, hidesOnOutsideClick: !config.hidesOnOutsideClick };
expect(isEqualConfig(config, differentConfig)).eql(false);
});
it('compares prop count', () => {
const config = TestConfig();
expect(isEqualConfig(config, { ...config, isBlocking: true })).eql(false);
expect(isEqualConfig({ ...config, isBlocking: true }, config)).eql(false);
});
it('regards missing props different from ones with undefined value', () => {
const config = TestConfig();
expect(isEqualConfig(config, { ...config, referenceNode: undefined })).eql(false);
});
it('compares nested props', () => {
const config = TestConfig();
const sameConfig = {
...config,
popperConfig: {
...config.popperConfig,
modifiers: [...config.popperConfig.modifiers],
},
};
expect(isEqualConfig(config, sameConfig)).eql(true);
const differentConfig = {
...config,
popperConfig: {
...config.popperConfig,
modifiers: [
...config.popperConfig.modifiers,
{
name: 'offset',
enabled: !config.popperConfig.modifiers.find(mod => mod.name === 'offset')?.enabled,
},
],
},
};
expect(isEqualConfig(config, differentConfig)).eql(false);
});
});