45 lines
1.8 KiB
JavaScript
45 lines
1.8 KiB
JavaScript
import { ERROR_INSTANCE_REQUIRED_FOR_EXTENSION } from '~/editor/constants';
|
|
import { EditorLiteExtension } from '~/editor/extensions/editor_lite_extension_base';
|
|
|
|
describe('The basis for an Editor Lite extension', () => {
|
|
let ext;
|
|
const defaultOptions = { foo: 'bar' };
|
|
|
|
it.each`
|
|
description | instance | options
|
|
${'accepts configuration options and instance'} | ${{}} | ${defaultOptions}
|
|
${'leaves instance intact if no options are passed'} | ${{}} | ${undefined}
|
|
${'does not fail if both instance and the options are omitted'} | ${undefined} | ${undefined}
|
|
${'throws if only options are passed'} | ${undefined} | ${defaultOptions}
|
|
`('$description', ({ instance, options } = {}) => {
|
|
const originalInstance = { ...instance };
|
|
|
|
if (instance) {
|
|
if (options) {
|
|
Object.entries(options).forEach((prop) => {
|
|
expect(instance[prop]).toBeUndefined();
|
|
});
|
|
// Both instance and options are passed
|
|
ext = new EditorLiteExtension({ instance, ...options });
|
|
Object.entries(options).forEach(([prop, value]) => {
|
|
expect(ext[prop]).toBeUndefined();
|
|
expect(instance[prop]).toBe(value);
|
|
});
|
|
} else {
|
|
ext = new EditorLiteExtension({ instance });
|
|
expect(instance).toEqual(originalInstance);
|
|
}
|
|
} else if (options) {
|
|
// Options are passed without instance
|
|
expect(() => {
|
|
ext = new EditorLiteExtension({ ...options });
|
|
}).toThrow(ERROR_INSTANCE_REQUIRED_FOR_EXTENSION);
|
|
} else {
|
|
// Neither options nor instance are passed
|
|
expect(() => {
|
|
ext = new EditorLiteExtension();
|
|
}).not.toThrow();
|
|
}
|
|
});
|
|
});
|