Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/frontend/editor/source_editor_extension_spec.js')
-rw-r--r--spec/frontend/editor/source_editor_extension_spec.js65
1 files changed, 65 insertions, 0 deletions
diff --git a/spec/frontend/editor/source_editor_extension_spec.js b/spec/frontend/editor/source_editor_extension_spec.js
new file mode 100644
index 00000000000..6f2eb07a043
--- /dev/null
+++ b/spec/frontend/editor/source_editor_extension_spec.js
@@ -0,0 +1,65 @@
+import EditorExtension from '~/editor/source_editor_extension';
+import { EDITOR_EXTENSION_DEFINITION_ERROR } from '~/editor/constants';
+import * as helpers from './helpers';
+
+describe('Editor Extension', () => {
+ const dummyObj = { foo: 'bar' };
+
+ it.each`
+ definition | setupOptions
+ ${undefined} | ${undefined}
+ ${undefined} | ${{}}
+ ${undefined} | ${dummyObj}
+ ${{}} | ${dummyObj}
+ ${dummyObj} | ${dummyObj}
+ `(
+ 'throws when definition = $definition and setupOptions = $setupOptions',
+ ({ definition, setupOptions }) => {
+ const constructExtension = () => new EditorExtension({ definition, setupOptions });
+ expect(constructExtension).toThrowError(EDITOR_EXTENSION_DEFINITION_ERROR);
+ },
+ );
+
+ it.each`
+ definition | setupOptions | expectedName
+ ${helpers.MyClassExtension} | ${undefined} | ${'MyClassExtension'}
+ ${helpers.MyClassExtension} | ${{}} | ${'MyClassExtension'}
+ ${helpers.MyClassExtension} | ${dummyObj} | ${'MyClassExtension'}
+ ${helpers.MyFnExtension} | ${undefined} | ${'MyFnExtension'}
+ ${helpers.MyFnExtension} | ${{}} | ${'MyFnExtension'}
+ ${helpers.MyFnExtension} | ${dummyObj} | ${'MyFnExtension'}
+ ${helpers.MyConstExt} | ${undefined} | ${'MyConstExt'}
+ ${helpers.MyConstExt} | ${{}} | ${'MyConstExt'}
+ ${helpers.MyConstExt} | ${dummyObj} | ${'MyConstExt'}
+ `(
+ 'correctly creates extension for definition = $definition and setupOptions = $setupOptions',
+ ({ definition, setupOptions, expectedName }) => {
+ const extension = new EditorExtension({ definition, setupOptions });
+ // eslint-disable-next-line new-cap
+ const constructedDefinition = new definition();
+
+ expect(extension).toEqual(
+ expect.objectContaining({
+ name: expectedName,
+ setupOptions,
+ }),
+ );
+ expect(extension.obj.constructor.prototype).toBe(constructedDefinition.constructor.prototype);
+ },
+ );
+
+ describe('api', () => {
+ it.each`
+ definition | expectedKeys
+ ${helpers.MyClassExtension} | ${['shared', 'classExtMethod']}
+ ${helpers.MyFnExtension} | ${['fnExtMethod']}
+ ${helpers.MyConstExt} | ${['constExtMethod']}
+ `('correctly returns API for $definition', ({ definition, expectedKeys }) => {
+ const extension = new EditorExtension({ definition });
+ const expectedApi = Object.fromEntries(
+ expectedKeys.map((key) => [key, expect.any(Function)]),
+ );
+ expect(extension.api).toEqual(expect.objectContaining(expectedApi));
+ });
+ });
+});