box-ui-elements-mlh
Version:
168 lines (144 loc) • 5.96 kB
JavaScript
import OffsetBasedAPI from '../OffsetBasedAPI';
const LIMIT = 1000;
describe('api/OffsetBasedAPI', () => {
let offsetBasedAPI;
const offsetBasedAPIResponse = { total_count: 0, entries: [] };
const url = 'https://foo.bar';
const errorCode = 'foo';
beforeEach(() => {
offsetBasedAPI = new OffsetBasedAPI({});
offsetBasedAPI.errorCode = errorCode;
});
describe('getQueryParameters()', () => {
test('should return query parameters with no fields', () => {
expect(offsetBasedAPI.getQueryParameters(0, LIMIT)).toEqual({
offset: 0,
limit: LIMIT,
});
});
test('should return query parameters with fields', () => {
expect(offsetBasedAPI.getQueryParameters(0, LIMIT, ['foo', 'bar'])).toEqual({
offset: 0,
limit: LIMIT,
fields: 'foo,bar',
});
});
});
describe('hasMoreItems()', () => {
test('should be more items', () => {
expect(offsetBasedAPI.hasMoreItems(LIMIT, LIMIT + 1)).toBe(true);
});
test('should be more items with no totalCount', () => {
expect(offsetBasedAPI.hasMoreItems(LIMIT)).toBe(true);
});
test('should not be more items', () => {
expect(offsetBasedAPI.hasMoreItems(LIMIT, LIMIT)).toBe(false);
});
});
describe('offsetGetRequest()', () => {
beforeEach(() => {
offsetBasedAPI.getUrl = jest.fn(() => url);
offsetBasedAPI.successHandler = jest.fn();
offsetBasedAPI.errorHandler = jest.fn();
});
test('should do two xhr calls and call successHandler once', () => {
offsetBasedAPI.xhr = {
get: jest.fn().mockReturnValue(
Promise.resolve({
data: {
...offsetBasedAPIResponse,
total_count: 1500,
},
}),
),
};
return offsetBasedAPI.offsetGetRequest('id', 0, 1000, true).then(() => {
expect(offsetBasedAPI.xhr.get).toHaveBeenCalledTimes(2);
expect(offsetBasedAPI.successHandler).toHaveBeenCalledTimes(1);
expect(offsetBasedAPI.errorHandler).not.toHaveBeenCalled();
});
});
test('should do one xhr call and call successHandler once', () => {
offsetBasedAPI.xhr = {
get: jest.fn().mockReturnValue(
Promise.resolve({
data: offsetBasedAPIResponse,
}),
),
};
return offsetBasedAPI.offsetGetRequest('id', 0, 1000, true).then(() => {
expect(offsetBasedAPI.xhr.get).toHaveBeenCalledTimes(1);
expect(offsetBasedAPI.successHandler).toHaveBeenCalledTimes(1);
expect(offsetBasedAPI.errorHandler).not.toHaveBeenCalled();
});
});
});
describe('offsetGet()', () => {
const successCb = jest.fn();
const errorCb = jest.fn();
beforeEach(() => {
offsetBasedAPI.getUrl = jest.fn(() => url);
});
test('should not do anything if destroyed', () => {
offsetBasedAPI.isDestroyed = jest.fn().mockReturnValueOnce(true);
offsetBasedAPI.xhr = null;
return offsetBasedAPI.offsetGet('id', successCb, errorCb).catch(() => {
expect(successCb).not.toHaveBeenCalled();
expect(errorCb).not.toHaveBeenCalled();
});
});
test('should make xhr to get offsetBasedAPI and call success callback', () => {
offsetBasedAPI.xhr = {
get: jest.fn().mockReturnValueOnce(Promise.resolve({ data: offsetBasedAPIResponse })),
};
return offsetBasedAPI.offsetGet('id', successCb, errorCb).then(() => {
expect(successCb).toHaveBeenCalledWith(offsetBasedAPIResponse);
expect(successCb).toHaveBeenCalledTimes(1);
expect(offsetBasedAPI.xhr.get).toHaveBeenCalledWith({
id: 'file_id',
url,
params: {
offset: 0,
limit: LIMIT,
},
});
});
});
test('should immediately reject if offset >= total_count', () => {
const pagedCommentsResponse = {
total_count: 50,
entries: [],
};
offsetBasedAPI.xhr = {
get: jest.fn().mockReturnValue(
Promise.resolve({
data: pagedCommentsResponse,
}),
),
};
return offsetBasedAPI.offsetGet('id', successCb, errorCb, 50).catch(() => {
expect(successCb).not.toHaveBeenCalled();
expect(errorCb).not.toHaveBeenCalled();
expect(offsetBasedAPI.xhr.get).not.toHaveBeenCalled();
});
});
test('should call error callback when xhr fails', () => {
const error = new Error('error');
offsetBasedAPI.xhr = {
get: jest.fn().mockReturnValueOnce(Promise.reject(error)),
};
return offsetBasedAPI.offsetGet('id', successCb, errorCb).then(() => {
expect(successCb).not.toHaveBeenCalled();
expect(errorCb).toHaveBeenCalledWith(error, errorCode);
expect(offsetBasedAPI.xhr.get).toHaveBeenCalledWith({
id: 'file_id',
url,
params: {
offset: 0,
limit: LIMIT,
},
});
});
});
});
});