Commit ab7b01aa authored by Clement Ho's avatar Clement Ho

Merge branch 'winh-mock-pager' into 'master'

Mock Pager in Karma tests

See merge request gitlab-org/gitlab-ce!18556
parents 87cdd43b 92be3461
...@@ -3,24 +3,30 @@ ...@@ -3,24 +3,30 @@
import $ from 'jquery'; import $ from 'jquery';
import 'vendor/jquery.endless-scroll'; import 'vendor/jquery.endless-scroll';
import Activities from '~/activities'; import Activities from '~/activities';
import Pager from '~/pager';
(() => { describe('Activities', () => {
window.gon || (window.gon = {}); window.gon || (window.gon = {});
const fixtureTemplate = 'static/event_filter.html.raw'; const fixtureTemplate = 'static/event_filter.html.raw';
const filters = [ const filters = [
{ {
id: 'all', id: 'all',
}, { },
{
id: 'push', id: 'push',
name: 'push events', name: 'push events',
}, { },
{
id: 'merged', id: 'merged',
name: 'merge events', name: 'merge events',
}, { },
{
id: 'comments', id: 'comments',
}, { },
{
id: 'team', id: 'team',
}]; },
];
function getEventName(index) { function getEventName(index) {
const filter = filters[index]; const filter = filters[index];
...@@ -32,31 +38,34 @@ import Activities from '~/activities'; ...@@ -32,31 +38,34 @@ import Activities from '~/activities';
return `#${filter.id}_event_filter`; return `#${filter.id}_event_filter`;
} }
describe('Activities', () => { beforeEach(() => {
beforeEach(() => { loadFixtures(fixtureTemplate);
loadFixtures(fixtureTemplate); spyOn(Pager, 'init').and.stub();
new Activities(); new Activities();
});
for (let i = 0; i < filters.length; i += 1) {
((i) => {
describe(`when selecting ${getEventName(i)}`, () => {
beforeEach(() => {
$(getSelector(i)).click();
});
for (let x = 0; x < filters.length; x += 1) {
((x) => {
const shouldHighlight = i === x;
const testName = shouldHighlight ? 'should highlight' : 'should not highlight';
it(`${testName} ${getEventName(x)}`, () => {
expect($(getSelector(x)).parent().hasClass('active')).toEqual(shouldHighlight);
});
})(x);
}
});
})(i);
}
}); });
})();
for (let i = 0; i < filters.length; i += 1) {
(i => {
describe(`when selecting ${getEventName(i)}`, () => {
beforeEach(() => {
$(getSelector(i)).click();
});
for (let x = 0; x < filters.length; x += 1) {
(x => {
const shouldHighlight = i === x;
const testName = shouldHighlight ? 'should highlight' : 'should not highlight';
it(`${testName} ${getEventName(x)}`, () => {
expect(
$(getSelector(x))
.parent()
.hasClass('active'),
).toEqual(shouldHighlight);
});
})(x);
}
});
})(i);
}
});
...@@ -3,6 +3,7 @@ import 'vendor/jquery.endless-scroll'; ...@@ -3,6 +3,7 @@ import 'vendor/jquery.endless-scroll';
import MockAdapter from 'axios-mock-adapter'; import MockAdapter from 'axios-mock-adapter';
import axios from '~/lib/utils/axios_utils'; import axios from '~/lib/utils/axios_utils';
import CommitsList from '~/commits'; import CommitsList from '~/commits';
import Pager from '~/pager';
describe('Commits List', () => { describe('Commits List', () => {
let commitsList; let commitsList;
...@@ -14,6 +15,7 @@ describe('Commits List', () => { ...@@ -14,6 +15,7 @@ describe('Commits List', () => {
</form> </form>
<ol id="commits-list"></ol> <ol id="commits-list"></ol>
`); `);
spyOn(Pager, 'init').and.stub();
commitsList = new CommitsList(25); commitsList = new CommitsList(25);
}); });
...@@ -68,9 +70,10 @@ describe('Commits List', () => { ...@@ -68,9 +70,10 @@ describe('Commits List', () => {
mock.restore(); mock.restore();
}); });
it('should save the last search string', (done) => { it('should save the last search string', done => {
commitsList.searchField.val('GitLab'); commitsList.searchField.val('GitLab');
commitsList.filterResults() commitsList
.filterResults()
.then(() => { .then(() => {
expect(ajaxSpy).toHaveBeenCalled(); expect(ajaxSpy).toHaveBeenCalled();
expect(commitsList.lastSearch).toEqual('GitLab'); expect(commitsList.lastSearch).toEqual('GitLab');
...@@ -80,8 +83,9 @@ describe('Commits List', () => { ...@@ -80,8 +83,9 @@ describe('Commits List', () => {
.catch(done.fail); .catch(done.fail);
}); });
it('should not make ajax call if the input does not change', (done) => { it('should not make ajax call if the input does not change', done => {
commitsList.filterResults() commitsList
.filterResults()
.then(() => { .then(() => {
expect(ajaxSpy).not.toHaveBeenCalled(); expect(ajaxSpy).not.toHaveBeenCalled();
expect(commitsList.lastSearch).toEqual(''); expect(commitsList.lastSearch).toEqual('');
......
import $ from 'jquery';
import MockAdapter from 'axios-mock-adapter'; import MockAdapter from 'axios-mock-adapter';
import axios from '~/lib/utils/axios_utils'; import axios from '~/lib/utils/axios_utils';
import Pager from '~/pager'; import Pager from '~/pager';
describe('pager', () => { describe('pager', () => {
let axiosMock;
beforeEach(() => {
axiosMock = new MockAdapter(axios);
});
afterEach(() => {
axiosMock.restore();
});
describe('init', () => { describe('init', () => {
const originalHref = window.location.href; const originalHref = window.location.href;
beforeEach(() => { beforeEach(() => {
setFixtures('<div class="content_list"></div><div class="loading"></div>'); setFixtures('<div class="content_list"></div><div class="loading"></div>');
spyOn($.fn, 'endlessScroll').and.stub();
}); });
afterEach(() => { afterEach(() => {
...@@ -46,33 +58,28 @@ describe('pager', () => { ...@@ -46,33 +58,28 @@ describe('pager', () => {
describe('getOld', () => { describe('getOld', () => {
const urlRegex = /(.*)some_list(.*)$/; const urlRegex = /(.*)some_list(.*)$/;
let mock;
function mockSuccess() { function mockSuccess() {
mock.onGet(urlRegex).reply(200, { axiosMock.onGet(urlRegex).reply(200, {
count: 0, count: 0,
html: '', html: '',
}); });
} }
function mockError() { function mockError() {
mock.onGet(urlRegex).networkError(); axiosMock.onGet(urlRegex).networkError();
} }
beforeEach(() => { beforeEach(() => {
setFixtures('<div class="content_list" data-href="/some_list"></div><div class="loading"></div>'); setFixtures(
'<div class="content_list" data-href="/some_list"></div><div class="loading"></div>',
);
spyOn(axios, 'get').and.callThrough(); spyOn(axios, 'get').and.callThrough();
mock = new MockAdapter(axios);
Pager.init(); Pager.init();
}); });
afterEach(() => { it('shows loader while loading next page', done => {
mock.restore();
});
it('shows loader while loading next page', (done) => {
mockSuccess(); mockSuccess();
spyOn(Pager.loading, 'show'); spyOn(Pager.loading, 'show');
...@@ -85,7 +92,7 @@ describe('pager', () => { ...@@ -85,7 +92,7 @@ describe('pager', () => {
}); });
}); });
it('hides loader on success', (done) => { it('hides loader on success', done => {
mockSuccess(); mockSuccess();
spyOn(Pager.loading, 'hide'); spyOn(Pager.loading, 'hide');
...@@ -98,7 +105,7 @@ describe('pager', () => { ...@@ -98,7 +105,7 @@ describe('pager', () => {
}); });
}); });
it('hides loader on error', (done) => { it('hides loader on error', done => {
mockError(); mockError();
spyOn(Pager.loading, 'hide'); spyOn(Pager.loading, 'hide');
...@@ -111,7 +118,7 @@ describe('pager', () => { ...@@ -111,7 +118,7 @@ describe('pager', () => {
}); });
}); });
it('sends request to url with offset and limit params', (done) => { it('sends request to url with offset and limit params', done => {
Pager.offset = 100; Pager.offset = 100;
Pager.limit = 20; Pager.limit = 20;
Pager.getOld(); Pager.getOld();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment