117 lines
3.3 KiB
JavaScript
117 lines
3.3 KiB
JavaScript
import { HttpClient } from "./http-client";
|
|
|
|
const TEST_URL = 'http://example.com';
|
|
const FAKE_RESPONSE = {
|
|
data: 'data',
|
|
};
|
|
|
|
describe('HttpClient', () => {
|
|
let httpClient;
|
|
|
|
beforeEach(() => {
|
|
httpClient = new HttpClient();
|
|
|
|
// setup and spy on fake fetch API
|
|
spyOn(window, 'fetch').and.returnValue(Promise.resolve(FAKE_RESPONSE));
|
|
});
|
|
|
|
it('should create', () => {
|
|
expect(httpClient).toBeTruthy();
|
|
});
|
|
|
|
describe('get()', () => {
|
|
let params;
|
|
|
|
beforeEach(() => {
|
|
params = {
|
|
url: TEST_URL,
|
|
};
|
|
});
|
|
|
|
it('should GET the given url', () => {
|
|
httpClient.get(params);
|
|
expect(window.fetch).toHaveBeenCalledWith(params.url, jasmine.objectContaining({ method: 'GET' }));
|
|
});
|
|
|
|
it('should return a promise', (done) => {
|
|
const result = httpClient.get(params);
|
|
result.then((response) => {
|
|
expect(response).toEqual(FAKE_RESPONSE);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('post()', () => {
|
|
let params;
|
|
|
|
beforeEach(() => {
|
|
params = {
|
|
url: TEST_URL,
|
|
};
|
|
});
|
|
|
|
it('should POST the given url', () => {
|
|
httpClient.post(params);
|
|
expect(window.fetch).toHaveBeenCalledWith(params.url, jasmine.objectContaining({ method: 'POST' }));
|
|
});
|
|
|
|
it('should return a promise', (done) => {
|
|
const result = httpClient.post(params);
|
|
result.then((response) => {
|
|
expect(response).toEqual(FAKE_RESPONSE);
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('Response Interceptors', () => {
|
|
it('can be added', () => {
|
|
const interceptor = () => {};
|
|
expect(httpClient._responseInterceptors.length).toBe(0);
|
|
httpClient.addResponseInterceptor(interceptor);
|
|
expect(httpClient._responseInterceptors.length).toBe(1);
|
|
httpClient.addResponseInterceptor(interceptor);
|
|
expect(httpClient._responseInterceptors.length).toBe(2);
|
|
});
|
|
|
|
describe('get called', () => {
|
|
let intercepted1;
|
|
let intercepted2;
|
|
const interceptors = {
|
|
interceptor1: () => intercepted1 = true,
|
|
interceptor2: () => intercepted2 = true,
|
|
};
|
|
|
|
beforeEach(() => {
|
|
intercepted1 = false;
|
|
intercepted2 = false;
|
|
spyOn(interceptors, 'interceptor1').and.callThrough();
|
|
spyOn(interceptors, 'interceptor2').and.callThrough();
|
|
httpClient.addResponseInterceptor(interceptors.interceptor1);
|
|
httpClient.addResponseInterceptor(interceptors.interceptor2);
|
|
});
|
|
|
|
it('for GET requests', (done) => {
|
|
httpClient.get({ url: TEST_URL }).then(() => {
|
|
expect(intercepted1).toBeTruthy();
|
|
expect(intercepted2).toBeTruthy();
|
|
expect(interceptors.interceptor1).toHaveBeenCalledWith(FAKE_RESPONSE, jasmine.any(Object));
|
|
expect(interceptors.interceptor2).toHaveBeenCalledWith(FAKE_RESPONSE, jasmine.any(Object));
|
|
done();
|
|
});
|
|
});
|
|
|
|
it('for POST requests', (done) => {
|
|
httpClient.post({ url: TEST_URL }).then(() => {
|
|
expect(intercepted1).toBeTruthy();
|
|
expect(intercepted2).toBeTruthy();
|
|
expect(interceptors.interceptor1).toHaveBeenCalledWith(FAKE_RESPONSE, jasmine.any(Object));
|
|
expect(interceptors.interceptor2).toHaveBeenCalledWith(FAKE_RESPONSE, jasmine.any(Object));
|
|
done();
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|