import {TestBed} from '@angular/core/testing'; import {ActiveRequests} from './active-requests.service'; import {environment} from '../../environments/environment'; describe('ActiveRequests', () => { let service: ActiveRequests; beforeEach(() => { TestBed.configureTestingModule({}); service = TestBed.inject(ActiveRequests); (service as any).blockingRequests = 0; // To prevent tests from messing with each other we reset this }); it('should be created', () => { expect(service).toBeTruthy(); }); it('alerts subscribers on increment', (done) => { service.countBlockingRequests().subscribe((value) => { expect(value).toBe(1); done(); }); service._registerBlockingRequest(); }); it('knows whether a request is active', () => { service._registerBlockingRequest(); service._registerBlockingRequest(); expect(service.hasBlockingRequests).toBeTrue(); service._unregisterBlockingRequest(); expect(service.hasBlockingRequests).toBeTrue(); service._unregisterBlockingRequest(); expect(service.hasBlockingRequests).toBeFalse(); }); it('alerts subscribers on decrement', (done) => { (service as any).blockingRequests = 1; service.countBlockingRequests().subscribe((value) => { expect(value).toBe(0); done(); }); service._unregisterBlockingRequest(); }); it('errors when decremented below 0 in dev mode', () => { environment.production = false; expect(() => service._unregisterBlockingRequest()).toThrowError('Cannot decrease number of active requests below 0'); }); it('it warns when decremented below 0 in prod mode', () => { let errorMessage; environment.production = true; const consoleWarning = spyOn(console, 'warn').and.callFake((arg: string) => errorMessage = arg); service._unregisterBlockingRequest(); expect(consoleWarning).toHaveBeenCalled(); expect(errorMessage).toContain('Cannot decrease number of active requests below 0'); }); });