diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-05-20 14:34:42 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-05-20 14:34:42 +0000 |
commit | 9f46488805e86b1bc341ea1620b866016c2ce5ed (patch) | |
tree | f9748c7e287041e37d6da49e0a29c9511dc34768 /spec/javascripts/lib/utils | |
parent | dfc92d081ea0332d69c8aca2f0e745cb48ae5e6d (diff) | |
download | gitlab-ce-9f46488805e86b1bc341ea1620b866016c2ce5ed.tar.gz |
Add latest changes from gitlab-org/gitlab@13-0-stable-ee
Diffstat (limited to 'spec/javascripts/lib/utils')
-rw-r--r-- | spec/javascripts/lib/utils/csrf_token_spec.js | 50 | ||||
-rw-r--r-- | spec/javascripts/lib/utils/navigation_utility_spec.js | 23 | ||||
-rw-r--r-- | spec/javascripts/lib/utils/poll_spec.js | 222 | ||||
-rw-r--r-- | spec/javascripts/lib/utils/sticky_spec.js | 66 |
4 files changed, 0 insertions, 361 deletions
diff --git a/spec/javascripts/lib/utils/csrf_token_spec.js b/spec/javascripts/lib/utils/csrf_token_spec.js deleted file mode 100644 index 867bee34ee5..00000000000 --- a/spec/javascripts/lib/utils/csrf_token_spec.js +++ /dev/null @@ -1,50 +0,0 @@ -import csrf from '~/lib/utils/csrf'; - -describe('csrf', function() { - beforeEach(() => { - this.tokenKey = 'X-CSRF-Token'; - this.token = - 'pH1cvjnP9grx2oKlhWEDvUZnJ8x2eXsIs1qzyHkF3DugSG5yTxR76CWeEZRhML2D1IeVB7NEW0t5l/axE4iJpQ=='; - }); - - it('returns the correct headerKey', () => { - expect(csrf.headerKey).toBe(this.tokenKey); - }); - - describe('when csrf token is in the DOM', () => { - beforeEach(() => { - setFixtures(` - <meta name="csrf-token" content="${this.token}"> - `); - - csrf.init(); - }); - - it('returns the csrf token', () => { - expect(csrf.token).toBe(this.token); - }); - - it('returns the csrf headers object', () => { - expect(csrf.headers[this.tokenKey]).toBe(this.token); - }); - }); - - describe('when csrf token is not in the DOM', () => { - beforeEach(() => { - setFixtures(` - <meta name="some-other-token"> - `); - - csrf.init(); - }); - - it('returns null for token', () => { - expect(csrf.token).toBeNull(); - }); - - it('returns empty object for headers', () => { - expect(typeof csrf.headers).toBe('object'); - expect(Object.keys(csrf.headers).length).toBe(0); - }); - }); -}); diff --git a/spec/javascripts/lib/utils/navigation_utility_spec.js b/spec/javascripts/lib/utils/navigation_utility_spec.js deleted file mode 100644 index be620e4a27c..00000000000 --- a/spec/javascripts/lib/utils/navigation_utility_spec.js +++ /dev/null @@ -1,23 +0,0 @@ -import findAndFollowLink from '~/lib/utils/navigation_utility'; - -describe('findAndFollowLink', () => { - it('visits a link when the selector exists', () => { - const href = '/some/path'; - const visitUrl = spyOnDependency(findAndFollowLink, 'visitUrl'); - - setFixtures(`<a class="my-shortcut" href="${href}">link</a>`); - - findAndFollowLink('.my-shortcut'); - - expect(visitUrl).toHaveBeenCalledWith(href); - }); - - it('does not throw an exception when the selector does not exist', () => { - const visitUrl = spyOnDependency(findAndFollowLink, 'visitUrl'); - - // this should not throw an exception - findAndFollowLink('.this-selector-does-not-exist'); - - expect(visitUrl).not.toHaveBeenCalled(); - }); -}); diff --git a/spec/javascripts/lib/utils/poll_spec.js b/spec/javascripts/lib/utils/poll_spec.js deleted file mode 100644 index 138041a349f..00000000000 --- a/spec/javascripts/lib/utils/poll_spec.js +++ /dev/null @@ -1,222 +0,0 @@ -/* eslint-disable jasmine/no-unsafe-spy */ - -import Poll from '~/lib/utils/poll'; -import { successCodes } from '~/lib/utils/http_status'; - -const waitForAllCallsToFinish = (service, waitForCount, successCallback) => { - const timer = () => { - setTimeout(() => { - if (service.fetch.calls.count() === waitForCount) { - successCallback(); - } else { - timer(); - } - }, 0); - }; - - timer(); -}; - -function mockServiceCall(service, response, shouldFail = false) { - const action = shouldFail ? Promise.reject : Promise.resolve; - const responseObject = response; - - if (!responseObject.headers) responseObject.headers = {}; - - service.fetch.and.callFake(action.bind(Promise, responseObject)); -} - -describe('Poll', () => { - const service = jasmine.createSpyObj('service', ['fetch']); - const callbacks = jasmine.createSpyObj('callbacks', ['success', 'error', 'notification']); - - function setup() { - return new Poll({ - resource: service, - method: 'fetch', - successCallback: callbacks.success, - errorCallback: callbacks.error, - notificationCallback: callbacks.notification, - }).makeRequest(); - } - - afterEach(() => { - callbacks.success.calls.reset(); - callbacks.error.calls.reset(); - callbacks.notification.calls.reset(); - service.fetch.calls.reset(); - }); - - it('calls the success callback when no header for interval is provided', done => { - mockServiceCall(service, { status: 200 }); - setup(); - - waitForAllCallsToFinish(service, 1, () => { - expect(callbacks.success).toHaveBeenCalled(); - expect(callbacks.error).not.toHaveBeenCalled(); - - done(); - }); - }); - - it('calls the error callback when the http request returns an error', done => { - mockServiceCall(service, { status: 500 }, true); - setup(); - - waitForAllCallsToFinish(service, 1, () => { - expect(callbacks.success).not.toHaveBeenCalled(); - expect(callbacks.error).toHaveBeenCalled(); - - done(); - }); - }); - - it('skips the error callback when request is aborted', done => { - mockServiceCall(service, { status: 0 }, true); - setup(); - - waitForAllCallsToFinish(service, 1, () => { - expect(callbacks.success).not.toHaveBeenCalled(); - expect(callbacks.error).not.toHaveBeenCalled(); - expect(callbacks.notification).toHaveBeenCalled(); - - done(); - }); - }); - - it('should call the success callback when the interval header is -1', done => { - mockServiceCall(service, { status: 200, headers: { 'poll-interval': -1 } }); - setup() - .then(() => { - expect(callbacks.success).toHaveBeenCalled(); - expect(callbacks.error).not.toHaveBeenCalled(); - - done(); - }) - .catch(done.fail); - }); - - describe('for 2xx status code', () => { - successCodes.forEach(httpCode => { - it(`starts polling when http status is ${httpCode} and interval header is provided`, done => { - mockServiceCall(service, { status: httpCode, headers: { 'poll-interval': 1 } }); - - const Polling = new Poll({ - resource: service, - method: 'fetch', - data: { page: 1 }, - successCallback: callbacks.success, - errorCallback: callbacks.error, - }); - - Polling.makeRequest(); - - waitForAllCallsToFinish(service, 2, () => { - Polling.stop(); - - expect(service.fetch.calls.count()).toEqual(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(service, { status: 200, headers: { 'poll-interval': 1 } }); - - const Polling = new Poll({ - resource: service, - method: 'fetch', - data: { page: 1 }, - successCallback: () => { - Polling.stop(); - }, - errorCallback: callbacks.error, - }); - - spyOn(Polling, 'stop').and.callThrough(); - - Polling.makeRequest(); - - waitForAllCallsToFinish(service, 1, () => { - expect(service.fetch.calls.count()).toEqual(1); - expect(service.fetch).toHaveBeenCalledWith({ page: 1 }); - expect(Polling.stop).toHaveBeenCalled(); - - done(); - }); - }); - }); - - describe('enable', () => { - it('should enable polling upon a response', done => { - jasmine.clock().install(); - - const Polling = new Poll({ - resource: service, - method: 'fetch', - data: { page: 1 }, - successCallback: () => {}, - }); - - Polling.enable({ - data: { page: 4 }, - response: { status: 200, headers: { 'poll-interval': 1 } }, - }); - - jasmine.clock().tick(1); - jasmine.clock().uninstall(); - - waitForAllCallsToFinish(service, 1, () => { - Polling.stop(); - - expect(service.fetch.calls.count()).toEqual(1); - expect(service.fetch).toHaveBeenCalledWith({ page: 4 }); - expect(Polling.options.data).toEqual({ page: 4 }); - done(); - }); - }); - }); - - describe('restart', () => { - it('should restart polling when its called', done => { - mockServiceCall(service, { status: 200, headers: { 'poll-interval': 1 } }); - - const Polling = new Poll({ - resource: service, - method: 'fetch', - data: { page: 1 }, - successCallback: () => { - Polling.stop(); - setTimeout(() => { - Polling.restart({ data: { page: 4 } }); - }, 0); - }, - errorCallback: callbacks.error, - }); - - spyOn(Polling, 'stop').and.callThrough(); - spyOn(Polling, 'enable').and.callThrough(); - spyOn(Polling, 'restart').and.callThrough(); - - Polling.makeRequest(); - - waitForAllCallsToFinish(service, 2, () => { - Polling.stop(); - - expect(service.fetch.calls.count()).toEqual(2); - expect(service.fetch).toHaveBeenCalledWith({ page: 4 }); - expect(Polling.stop).toHaveBeenCalled(); - expect(Polling.enable).toHaveBeenCalled(); - expect(Polling.restart).toHaveBeenCalled(); - expect(Polling.options.data).toEqual({ page: 4 }); - done(); - }); - }); - }); -}); diff --git a/spec/javascripts/lib/utils/sticky_spec.js b/spec/javascripts/lib/utils/sticky_spec.js deleted file mode 100644 index 1b1e7da1ed3..00000000000 --- a/spec/javascripts/lib/utils/sticky_spec.js +++ /dev/null @@ -1,66 +0,0 @@ -import { isSticky } from '~/lib/utils/sticky'; - -describe('sticky', () => { - let el; - - beforeEach(() => { - document.body.innerHTML += ` - <div class="parent"> - <div id="js-sticky"></div> - </div> - `; - - el = document.getElementById('js-sticky'); - }); - - afterEach(() => { - el.parentNode.remove(); - }); - - describe('when stuck', () => { - it('does not remove is-stuck class', () => { - isSticky(el, 0, el.offsetTop); - isSticky(el, 0, el.offsetTop); - - expect(el.classList.contains('is-stuck')).toBeTruthy(); - }); - - it('adds is-stuck class', () => { - isSticky(el, 0, el.offsetTop); - - expect(el.classList.contains('is-stuck')).toBeTruthy(); - }); - - it('inserts placeholder element', () => { - isSticky(el, 0, el.offsetTop, true); - - expect(document.querySelector('.sticky-placeholder')).not.toBeNull(); - }); - }); - - describe('when not stuck', () => { - it('removes is-stuck class', () => { - spyOn(el.classList, 'remove').and.callThrough(); - - isSticky(el, 0, el.offsetTop); - isSticky(el, 0, 0); - - expect(el.classList.remove).toHaveBeenCalledWith('is-stuck'); - - expect(el.classList.contains('is-stuck')).toBeFalsy(); - }); - - it('does not add is-stuck class', () => { - isSticky(el, 0, 0); - - expect(el.classList.contains('is-stuck')).toBeFalsy(); - }); - - it('removes placeholder', () => { - isSticky(el, 0, el.offsetTop, true); - isSticky(el, 0, 0, true); - - expect(document.querySelector('.sticky-placeholder')).toBeNull(); - }); - }); -}); |