diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-05-05 18:09:43 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-05-05 18:09:43 +0000 |
commit | 38ceebb9b3a541f8530b379d5b5ab5e13ffc58ed (patch) | |
tree | 7a0494f677459f96e6deda30da4069b7c038eca4 /spec/frontend/lib/utils/url_utility_spec.js | |
parent | 0d09054d162458364ce3fc431506c182e2a5fa4f (diff) | |
download | gitlab-ce-38ceebb9b3a541f8530b379d5b5ab5e13ffc58ed.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/frontend/lib/utils/url_utility_spec.js')
-rw-r--r-- | spec/frontend/lib/utils/url_utility_spec.js | 69 |
1 files changed, 54 insertions, 15 deletions
diff --git a/spec/frontend/lib/utils/url_utility_spec.js b/spec/frontend/lib/utils/url_utility_spec.js index 4960895890f..6cca245582e 100644 --- a/spec/frontend/lib/utils/url_utility_spec.js +++ b/spec/frontend/lib/utils/url_utility_spec.js @@ -91,36 +91,75 @@ describe('URL utility', () => { }); describe('mergeUrlParams', () => { + const { mergeUrlParams } = urlUtils; + it('adds w', () => { - expect(urlUtils.mergeUrlParams({ w: 1 }, '#frag')).toBe('?w=1#frag'); - expect(urlUtils.mergeUrlParams({ w: 1 }, '/path#frag')).toBe('/path?w=1#frag'); - expect(urlUtils.mergeUrlParams({ w: 1 }, 'https://host/path')).toBe('https://host/path?w=1'); - expect(urlUtils.mergeUrlParams({ w: 1 }, 'https://host/path#frag')).toBe( - 'https://host/path?w=1#frag', - ); + expect(mergeUrlParams({ w: 1 }, '#frag')).toBe('?w=1#frag'); + expect(mergeUrlParams({ w: 1 }, '')).toBe('?w=1'); + expect(mergeUrlParams({ w: 1 }, '/path#frag')).toBe('/path?w=1#frag'); + expect(mergeUrlParams({ w: 1 }, 'https://host/path')).toBe('https://host/path?w=1'); + expect(mergeUrlParams({ w: 1 }, 'https://host/path#frag')).toBe('https://host/path?w=1#frag'); + expect(mergeUrlParams({ w: 1 }, 'https://h/p?k1=v1#frag')).toBe('https://h/p?k1=v1&w=1#frag'); + expect(mergeUrlParams({ w: 'null' }, '')).toBe('?w=null'); + }); - expect(urlUtils.mergeUrlParams({ w: 1 }, 'https://h/p?k1=v1#frag')).toBe( - 'https://h/p?k1=v1&w=1#frag', - ); + it('adds multiple params', () => { + expect(mergeUrlParams({ a: 1, b: 2, c: 3 }, '#frag')).toBe('?a=1&b=2&c=3#frag'); }); it('updates w', () => { - expect(urlUtils.mergeUrlParams({ w: 1 }, '?k1=v1&w=0#frag')).toBe('?k1=v1&w=1#frag'); + expect(mergeUrlParams({ w: 2 }, '/path?w=1#frag')).toBe('/path?w=2#frag'); + expect(mergeUrlParams({ w: 2 }, 'https://host/path?w=1')).toBe('https://host/path?w=2'); }); - it('adds multiple params', () => { - expect(urlUtils.mergeUrlParams({ a: 1, b: 2, c: 3 }, '#frag')).toBe('?a=1&b=2&c=3#frag'); + it('removes null w', () => { + expect(mergeUrlParams({ w: null }, '?w=1#frag')).toBe('#frag'); + expect(mergeUrlParams({ w: null }, '/path?w=1#frag')).toBe('/path#frag'); + expect(mergeUrlParams({ w: null }, 'https://host/path?w=1')).toBe('https://host/path'); + expect(mergeUrlParams({ w: null }, 'https://host/path?w=1#frag')).toBe( + 'https://host/path#frag', + ); + expect(mergeUrlParams({ w: null }, 'https://h/p?k1=v1&w=1#frag')).toBe( + 'https://h/p?k1=v1#frag', + ); }); - it('adds and updates encoded params', () => { - expect(urlUtils.mergeUrlParams({ a: '&', q: '?' }, '?a=%23#frag')).toBe('?a=%26&q=%3F#frag'); + it('adds and updates encoded param values', () => { + expect(mergeUrlParams({ foo: '&', q: '?' }, '?foo=%23#frag')).toBe('?foo=%26&q=%3F#frag'); + expect(mergeUrlParams({ foo: 'a value' }, '')).toBe('?foo=a%20value'); + expect(mergeUrlParams({ foo: 'a value' }, '?foo=1')).toBe('?foo=a%20value'); + }); + + it('adds and updates encoded param names', () => { + expect(mergeUrlParams({ 'a name': 1 }, '')).toBe('?a%20name=1'); + expect(mergeUrlParams({ 'a name': 2 }, '?a%20name=1')).toBe('?a%20name=2'); + expect(mergeUrlParams({ 'a name': null }, '?a%20name=1')).toBe(''); }); it('treats "+" as "%20"', () => { - expect(urlUtils.mergeUrlParams({ ref: 'bogus' }, '?a=lorem+ipsum&ref=charlie')).toBe( + expect(mergeUrlParams({ ref: 'bogus' }, '?a=lorem+ipsum&ref=charlie')).toBe( '?a=lorem%20ipsum&ref=bogus', ); }); + + it('treats question marks and slashes as part of the query', () => { + expect(mergeUrlParams({ ending: '!' }, '?ending=?&foo=bar')).toBe('?ending=!&foo=bar'); + expect(mergeUrlParams({ ending: '!' }, 'https://host/path?ending=?&foo=bar')).toBe( + 'https://host/path?ending=!&foo=bar', + ); + expect(mergeUrlParams({ ending: '?' }, '?ending=!&foo=bar')).toBe('?ending=%3F&foo=bar'); + expect(mergeUrlParams({ ending: '?' }, 'https://host/path?ending=!&foo=bar')).toBe( + 'https://host/path?ending=%3F&foo=bar', + ); + expect(mergeUrlParams({ ending: '!', op: '+' }, '?ending=?&op=/')).toBe('?ending=!&op=%2B'); + expect(mergeUrlParams({ ending: '!', op: '+' }, 'https://host/path?ending=?&op=/')).toBe( + 'https://host/path?ending=!&op=%2B', + ); + expect(mergeUrlParams({ op: '+' }, '?op=/&foo=bar')).toBe('?op=%2B&foo=bar'); + expect(mergeUrlParams({ op: '+' }, 'https://host/path?op=/&foo=bar')).toBe( + 'https://host/path?op=%2B&foo=bar', + ); + }); }); describe('removeParams', () => { |