diff options
Diffstat (limited to 'spec/frontend/lib/utils')
-rw-r--r-- | spec/frontend/lib/utils/common_utils_spec.js | 2 | ||||
-rw-r--r-- | spec/frontend/lib/utils/csrf_token_spec.js | 2 | ||||
-rw-r--r-- | spec/frontend/lib/utils/datetime_utility_spec.js | 27 | ||||
-rw-r--r-- | spec/frontend/lib/utils/poll_spec.js | 31 | ||||
-rw-r--r-- | spec/frontend/lib/utils/poll_until_complete_spec.js | 2 | ||||
-rw-r--r-- | spec/frontend/lib/utils/sticky_spec.js | 2 | ||||
-rw-r--r-- | spec/frontend/lib/utils/url_utility_spec.js | 112 |
7 files changed, 172 insertions, 6 deletions
diff --git a/spec/frontend/lib/utils/common_utils_spec.js b/spec/frontend/lib/utils/common_utils_spec.js index 585f0de9cc3..effc446d846 100644 --- a/spec/frontend/lib/utils/common_utils_spec.js +++ b/spec/frontend/lib/utils/common_utils_spec.js @@ -1,5 +1,5 @@ -import * as commonUtils from '~/lib/utils/common_utils'; import $ from 'jquery'; +import * as commonUtils from '~/lib/utils/common_utils'; describe('common_utils', () => { describe('parseUrl', () => { diff --git a/spec/frontend/lib/utils/csrf_token_spec.js b/spec/frontend/lib/utils/csrf_token_spec.js index 1b98ef126e9..55dd29571c0 100644 --- a/spec/frontend/lib/utils/csrf_token_spec.js +++ b/spec/frontend/lib/utils/csrf_token_spec.js @@ -1,5 +1,5 @@ -import csrf from '~/lib/utils/csrf'; import { setHTMLFixture } from 'helpers/fixtures'; +import csrf from '~/lib/utils/csrf'; describe('csrf', () => { let testContext; diff --git a/spec/frontend/lib/utils/datetime_utility_spec.js b/spec/frontend/lib/utils/datetime_utility_spec.js index adf5c312149..9eb5587e83c 100644 --- a/spec/frontend/lib/utils/datetime_utility_spec.js +++ b/spec/frontend/lib/utils/datetime_utility_spec.js @@ -1,6 +1,6 @@ -import { __, s__ } from '~/locale'; import $ from 'jquery'; import timezoneMock from 'timezone-mock'; +import { __, s__ } from '~/locale'; import '~/commons/bootstrap'; import * as datetimeUtility from '~/lib/utils/datetime_utility'; @@ -628,3 +628,28 @@ describe('localTimeAgo', () => { expect(element.getAttribute('title')).toBe(title); }); }); + +describe('dateFromParams', () => { + it('returns the expected date object', () => { + const expectedDate = new Date('2019-07-17T00:00:00.000Z'); + const date = datetimeUtility.dateFromParams(2019, 6, 17); + + expect(date.getYear()).toBe(expectedDate.getYear()); + expect(date.getMonth()).toBe(expectedDate.getMonth()); + expect(date.getDate()).toBe(expectedDate.getDate()); + }); +}); + +describe('differenceInSeconds', () => { + const startDateTime = new Date('2019-07-17T00:00:00.000Z'); + + it.each` + startDate | endDate | expected + ${startDateTime} | ${new Date('2019-07-17T00:00:00.000Z')} | ${0} + ${startDateTime} | ${new Date('2019-07-17T12:00:00.000Z')} | ${43200} + ${startDateTime} | ${new Date('2019-07-18T00:00:00.000Z')} | ${86400} + ${new Date('2019-07-18T00:00:00.000Z')} | ${startDateTime} | ${-86400} + `('returns $expected for $endDate - $startDate', ({ startDate, endDate, expected }) => { + expect(datetimeUtility.differenceInSeconds(startDate, endDate)).toBe(expected); + }); +}); diff --git a/spec/frontend/lib/utils/poll_spec.js b/spec/frontend/lib/utils/poll_spec.js index 5ee9738ebf3..135c752b5cb 100644 --- a/spec/frontend/lib/utils/poll_spec.js +++ b/spec/frontend/lib/utils/poll_spec.js @@ -1,6 +1,6 @@ +import waitForPromises from 'helpers/wait_for_promises'; import Poll from '~/lib/utils/poll'; import { successCodes } from '~/lib/utils/http_status'; -import waitForPromises from 'helpers/wait_for_promises'; describe('Poll', () => { let callbacks; @@ -128,6 +128,35 @@ describe('Poll', () => { }); }); + describe('with delayed initial request', () => { + it('delays the first request', async done => { + mockServiceCall({ status: 200, headers: { 'poll-interval': 1 } }); + + const Polling = new Poll({ + resource: service, + method: 'fetch', + data: { page: 1 }, + successCallback: callbacks.success, + errorCallback: callbacks.error, + }); + + Polling.makeDelayedRequest(1); + + expect(Polling.timeoutID).toBeTruthy(); + + waitForAllCallsToFinish(2, () => { + Polling.stop(); + + expect(service.fetch.mock.calls).toHaveLength(2); + expect(service.fetch).toHaveBeenCalledWith({ page: 1 }); + expect(callbacks.success).toHaveBeenCalled(); + expect(callbacks.error).not.toHaveBeenCalled(); + + done(); + }); + }); + }); + describe('stop', () => { it('stops polling when method is called', done => { mockServiceCall({ status: 200, headers: { 'poll-interval': 1 } }); diff --git a/spec/frontend/lib/utils/poll_until_complete_spec.js b/spec/frontend/lib/utils/poll_until_complete_spec.js index 15602b87b9c..c1df30756fd 100644 --- a/spec/frontend/lib/utils/poll_until_complete_spec.js +++ b/spec/frontend/lib/utils/poll_until_complete_spec.js @@ -1,8 +1,8 @@ import AxiosMockAdapter from 'axios-mock-adapter'; +import { TEST_HOST } from 'helpers/test_constants'; import axios from '~/lib/utils/axios_utils'; import pollUntilComplete from '~/lib/utils/poll_until_complete'; import httpStatusCodes from '~/lib/utils/http_status'; -import { TEST_HOST } from 'helpers/test_constants'; const endpoint = `${TEST_HOST}/foo`; const mockData = 'mockData'; diff --git a/spec/frontend/lib/utils/sticky_spec.js b/spec/frontend/lib/utils/sticky_spec.js index 4ad68cc9ff6..01e8fe777af 100644 --- a/spec/frontend/lib/utils/sticky_spec.js +++ b/spec/frontend/lib/utils/sticky_spec.js @@ -1,5 +1,5 @@ -import { isSticky } from '~/lib/utils/sticky'; import { setHTMLFixture } from 'helpers/fixtures'; +import { isSticky } from '~/lib/utils/sticky'; const TEST_OFFSET_TOP = 500; diff --git a/spec/frontend/lib/utils/url_utility_spec.js b/spec/frontend/lib/utils/url_utility_spec.js index e769580b587..a13ac3778cf 100644 --- a/spec/frontend/lib/utils/url_utility_spec.js +++ b/spec/frontend/lib/utils/url_utility_spec.js @@ -160,6 +160,118 @@ describe('URL utility', () => { 'https://host/path?op=%2B&foo=bar', ); }); + + describe('with spread array option', () => { + const spreadArrayOptions = { spreadArrays: true }; + + it('maintains multiple values', () => { + expect(mergeUrlParams({}, '?array[]=foo&array[]=bar', spreadArrayOptions)).toBe( + '?array[]=foo&array[]=bar', + ); + }); + + it('overrides multiple values with one', () => { + expect( + mergeUrlParams({ array: ['baz'] }, '?array[]=foo&array[]=bar', spreadArrayOptions), + ).toBe('?array[]=baz'); + }); + it('removes existing params', () => { + expect( + mergeUrlParams({ array: null }, '?array[]=foo&array[]=bar', spreadArrayOptions), + ).toBe(''); + }); + it('removes existing params and keeps others', () => { + expect( + mergeUrlParams( + { array: null }, + '?array[]=foo&array[]=bar&other=quis', + spreadArrayOptions, + ), + ).toBe('?other=quis'); + }); + it('removes existing params along others', () => { + expect( + mergeUrlParams( + { array: null, other: 'quis' }, + '?array[]=foo&array[]=bar', + spreadArrayOptions, + ), + ).toBe('?other=quis'); + }); + it('handles empty arrays along other parameters', () => { + expect(mergeUrlParams({ array: [], other: 'quis' }, '?array=baz', spreadArrayOptions)).toBe( + '?array[]=&other=quis', + ); + }); + it('handles multiple values along other parameters', () => { + expect( + mergeUrlParams( + { array: ['foo', 'bar'], other: 'quis' }, + '?array=baz', + spreadArrayOptions, + ), + ).toBe('?array[]=foo&array[]=bar&other=quis'); + }); + it('handles array values with encoding', () => { + expect( + mergeUrlParams({ array: ['foo+', 'bar,baz'] }, '?array[]=%2Fbaz', spreadArrayOptions), + ).toBe('?array[]=foo%2B&array[]=bar%2Cbaz'); + }); + it('handles multiple arrays', () => { + expect( + mergeUrlParams( + { array1: ['foo+', 'bar,baz'], array2: ['quis', 'quux'] }, + '?array1[]=%2Fbaz', + spreadArrayOptions, + ), + ).toBe('?array1[]=foo%2B&array1[]=bar%2Cbaz&array2[]=quis&array2[]=quux'); + }); + }); + + describe('without spread array option', () => { + it('maintains multiple values', () => { + expect(mergeUrlParams({}, '?array=foo%2Cbar')).toBe('?array=foo%2Cbar'); + }); + it('overrides multiple values with one', () => { + expect(mergeUrlParams({ array: ['baz'] }, '?array=foo%2Cbar')).toBe('?array=baz'); + }); + it('removes existing params', () => { + expect(mergeUrlParams({ array: null }, '?array=foo%2Cbar')).toBe(''); + }); + it('removes existing params and keeps others', () => { + expect(mergeUrlParams({ array: null }, '?array=foo&array=bar&other=quis')).toBe( + '?other=quis', + ); + }); + it('removes existing params along others', () => { + expect(mergeUrlParams({ array: null, other: 'quis' }, '?array=foo&array=bar')).toBe( + '?other=quis', + ); + }); + it('handles empty arrays along other parameters', () => { + expect(mergeUrlParams({ array: [], other: 'quis' }, '?array=baz')).toBe( + '?array=&other=quis', + ); + }); + it('handles multiple values along other parameters', () => { + expect(mergeUrlParams({ array: ['foo', 'bar'], other: 'quis' }, '?array=baz')).toBe( + '?array=foo%2Cbar&other=quis', + ); + }); + it('handles array values with encoding', () => { + expect(mergeUrlParams({ array: ['foo+', 'bar,baz'] }, '?array=%2Fbaz')).toBe( + '?array=foo%2B%2Cbar%2Cbaz', + ); + }); + it('handles multiple arrays', () => { + expect( + mergeUrlParams( + { array1: ['foo+', 'bar,baz'], array2: ['quis', 'quux'] }, + '?array1=%2Fbaz', + ), + ).toBe('?array1=foo%2B%2Cbar%2Cbaz&array2=quis%2Cquux'); + }); + }); }); describe('removeParams', () => { |