diff options
| author | Jan-Hendrik Willms <tleilax+studip@gmail.com> | 2023-05-09 07:01:51 +0000 |
|---|---|---|
| committer | Jan-Hendrik Willms <tleilax+studip@gmail.com> | 2023-05-09 07:01:51 +0000 |
| commit | c662a835c57adc802b28f9cb4a1681fcd3a27e6c (patch) | |
| tree | ba8e3e867763ebbaa29fd64087bb12e9d9ce8686 /tests | |
| parent | 8ca4989cb42c1da1f702512a29638ff363d30430 (diff) | |
add js tests, fixes #2605
Closes #2605
Merge request studip/studip!1757
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/jest/extract_callback.test.js | 121 | ||||
| -rw-r--r-- | tests/jest/parse_options.test.js | 59 |
2 files changed, 180 insertions, 0 deletions
diff --git a/tests/jest/extract_callback.test.js b/tests/jest/extract_callback.test.js new file mode 100644 index 0000000..d67d7e6 --- /dev/null +++ b/tests/jest/extract_callback.test.js @@ -0,0 +1,121 @@ +/** + * @jest-environment jsdom + */ + +import extractCallback from "../../resources/assets/javascripts/lib/extract_callback"; + +describe('extract_callback()', () => { + test('simple', () => { + const callback = jest.fn(); + const extracted = extractCallback('callback', [], { + callback + }); + + expect(typeof extracted).toBe('function'); + + extracted(); + + expect(callback).toHaveBeenCalled(); + }) + + test('simple with payload', () => { + const callback = jest.fn(); + const extracted = extractCallback('callback', ['foo', 23], { + callback + }); + + expect(typeof extracted).toBe('function'); + + extracted(); + + expect(callback).toHaveBeenCalledWith(['foo', 23]); + }) + + test('nested', () => { + const callback = jest.fn(); + const extracted = extractCallback('foo.bar.baz.callback', {}, { + foo: { + bar: { + baz: { + callback + } + } + } + }); + + expect(typeof extracted).toBe('function'); + + extracted(); + + expect(callback).toHaveBeenCalled(); + }) + + test('nested with payload', () => { + const callback = jest.fn(); + const extracted = extractCallback('foo.bar.baz.callback', ['foo', 23], { + foo: { + bar: { + baz: { + callback + } + } + } + }); + + expect(typeof extracted).toBe('function'); + + extracted(); + + expect(callback).toHaveBeenCalledWith(['foo', 23]); + }) + + test('complex', () => { + const callback = jest.fn(); + const extracted = extractCallback('foo(42.23).callback', [], { + foo () { + return {callback}; + } + }); + + expect(typeof extracted).toBe('function'); + + extracted(); + + expect(callback).toHaveBeenCalled(); + }); + + test('parameters', () => { + const callback = jest.fn(); + const extracted = extractCallback('callback("foo", 23)', [], { + callback + }); + + expect(typeof extracted).toBe('function'); + + extracted(); + + expect(callback).toHaveBeenCalledWith('foo', 23); + }); + + test('json with payload', () => { + const callback = jest.fn(); + const extracted = extractCallback('{"func":"callback","payload":["foo",23]}', [], {callback}); + + expect(typeof extracted).toBe('function'); + + extracted(); + + expect(callback).toHaveBeenCalledWith(['foo', 23]); + }) + + + test('invalid', () => { + expect(() => { + extractCallback('callback', {}, {}); + }).toThrow(); + + expect(() => { + extractCallback('{}', {}, {}); + }).toThrow(); + }) +}); diff --git a/tests/jest/parse_options.test.js b/tests/jest/parse_options.test.js new file mode 100644 index 0000000..5e825ce --- /dev/null +++ b/tests/jest/parse_options.test.js @@ -0,0 +1,59 @@ +import parseOptions from "../../resources/assets/javascripts/lib/parse_options"; + +describe('parse_options()', () => { + test('empty', () => { + expect(parseOptions('')).toStrictEqual({}); + }) + + test('boolean', () => { + expect(parseOptions('bool')).toStrictEqual({bool: true}); + expect(parseOptions('bool=false')).toStrictEqual({bool: false}); + expect(parseOptions('foo;bar=false;baz=true')).toStrictEqual({ + foo: true, + bar: false, + baz: true, + }); + }) + + test('string', () => { + expect(parseOptions('size=auto')).toStrictEqual({size: 'auto'}); + expect(parseOptions('size="auto"')).toStrictEqual({size: 'auto'}); + expect(parseOptions('size=auto;close=none')).toStrictEqual({ + size: 'auto', + close: 'none', + }); + }) + + test('int', () => { + expect(parseOptions('foo=42')).not.toStrictEqual({foo: 42}); + expect(parseOptions('foo=+42')).toStrictEqual({foo: 42}); + expect(parseOptions('foo=-42')).toStrictEqual({foo: -42}); + expect(parseOptions('foo=+42;bar=-23')).toStrictEqual({foo: 42, bar: -23}); + }) + + test('float', () => { + expect(parseOptions('foo=42.23')).not.toStrictEqual({foo: 42.23}); + expect(parseOptions('foo=+42.23')).toStrictEqual({foo: 42.23}); + expect(parseOptions('foo=-42.23')).toStrictEqual({foo: -42.23}); + expect(parseOptions('foo=+42.23;bar=-23.42')).toStrictEqual({ + foo: 42.23, + bar: -23.42, + }); + }) + + test('mixed', () => { + const parsed = parseOptions('size=auto;reload-on-close;foo=+42;bar=-42.23'); + expect(parsed).toStrictEqual({ + size: 'auto', + 'reload-on-close': true, + foo: 42, + bar: -42.23, + }); + }); + + test('invalid', () => { + expect(() => { + parseOptions('foo="bar') + }).toThrow('Invalid data, missing closing quote') + }) +}); |
