This repository has been archived on 2024-10-24. You can view files and clone it, but cannot push or open issues or pull requests.
fradrive-old/frontend/src/services/http-client/http-client.spec.js
2019-05-26 20:37:09 +02:00

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();
});
});
});
});
});