import {async, TestBed} from '@angular/core/testing'; import { ApiService } from './api.service'; import {HttpClient} from '@angular/common/http'; import {LocalStorageService} from 'angular-2-local-storage'; import {Observable} from 'rxjs'; import {ModalService} from '@inst-iot/bosch-angular-ui-components'; let apiService: ApiService; let httpClientSpy: jasmine.SpyObj; let localStorageServiceSpy: jasmine.SpyObj; let modalServiceSpy: jasmine.SpyObj; // TODO: test options describe('ApiService', () => { beforeEach(() => { const httpSpy = jasmine.createSpyObj('HttpClient', ['get', 'post', 'put', 'delete']); const localStorageSpy = jasmine.createSpyObj('LocalStorageService', ['get']); const modalSpy = jasmine.createSpyObj('ModalService', ['openComponent']); TestBed.configureTestingModule({ providers: [ ApiService, {provide: HttpClient, useValue: httpSpy}, {provide: LocalStorageService, useValue: localStorageSpy}, {provide: ModalService, useValue: modalSpy} ] }); apiService = TestBed.inject(ApiService); httpClientSpy = TestBed.inject(HttpClient) as jasmine.SpyObj; localStorageServiceSpy = TestBed.inject(LocalStorageService) as jasmine.SpyObj; modalServiceSpy = TestBed.inject(ModalService) as jasmine.SpyObj; }); it('should be created', () => { expect(apiService).toBeTruthy(); }); it('shows an error message when the request fails', () => { const getReturn = new Observable(observer => { observer.error('error'); }); httpClientSpy.get.and.returnValue(getReturn); localStorageServiceSpy.get.and.returnValue(undefined); modalServiceSpy.openComponent.and.returnValue({instance: {message: ''}} as any); apiService.get('/testurl'); expect(httpClientSpy.get).toHaveBeenCalledWith('/api/testurl', {}); expect(modalServiceSpy.openComponent.calls.count()).toBe(1); }); it('returns the error message if the callback function had an error parameter', () => { const getReturn = new Observable(observer => { observer.error('error'); }); httpClientSpy.get.and.returnValue(getReturn); localStorageServiceSpy.get.and.returnValue(undefined); modalServiceSpy.openComponent.and.returnValue({instance: {message: ''}} as any); apiService.get('/testurl', (data, error) => { expect(modalServiceSpy.openComponent.calls.count()).toBe(0); expect(error).toBe('error'); }); }); it('should do get requests without auth if not available', async(() => { const getReturn = new Observable(observer => { observer.next('data'); }); httpClientSpy.get.and.returnValue(getReturn); localStorageServiceSpy.get.and.returnValue(undefined); apiService.get('/testurl', res => { expect(res).toBe('data'); expect(httpClientSpy.get).toHaveBeenCalledWith('/api/testurl', {}); expect(localStorageServiceSpy.get).toHaveBeenCalledWith('basicAuth'); }); })); it('should do get requests with basic auth if available', async(() => { const getReturn = new Observable(observer => { observer.next('data'); }); httpClientSpy.get.and.returnValue(getReturn); localStorageServiceSpy.get.and.returnValue('basicAuth'); apiService.get('/testurl', res => { expect(res).toBe('data'); expect(httpClientSpy.get).toHaveBeenCalledWith('/api/testurl', jasmine.any(Object)); // could not test http headers better expect(localStorageServiceSpy.get).toHaveBeenCalledWith('basicAuth'); }); })); it('should do post requests', async(() => { const resReturn = new Observable(observer => { observer.next('data'); }); httpClientSpy.post.and.returnValue(resReturn); localStorageServiceSpy.get.and.returnValue('basicAuth'); apiService.post('/testurl', 'reqData', res => { expect(res).toBe('data'); expect(httpClientSpy.post).toHaveBeenCalledWith('/api/testurl', 'reqData', jasmine.any(Object)); expect(localStorageServiceSpy.get).toHaveBeenCalledWith('basicAuth'); }); })); it('should do put requests', async(() => { const resReturn = new Observable(observer => { observer.next('data'); }); httpClientSpy.put.and.returnValue(resReturn); localStorageServiceSpy.get.and.returnValue('basicAuth'); apiService.put('/testurl', 'reqData', res => { expect(res).toBe('data'); expect(httpClientSpy.put).toHaveBeenCalledWith('/api/testurl', 'reqData', jasmine.any(Object)); expect(localStorageServiceSpy.get).toHaveBeenCalledWith('basicAuth'); }); })); it('should do delete requests', async(() => { const resReturn = new Observable(observer => { observer.next('data'); }); httpClientSpy.delete.and.returnValue(resReturn); localStorageServiceSpy.get.and.returnValue('basicAuth'); apiService.delete('/testurl', res => { expect(res).toBe('data'); expect(httpClientSpy.delete).toHaveBeenCalledWith('/api/testurl', jasmine.any(Object)); expect(localStorageServiceSpy.get).toHaveBeenCalledWith('basicAuth'); }); })); });