diff --git a/src/main/webapp/app/exercise/service/exercise.service.spec.ts b/src/main/webapp/app/exercise/service/exercise.service.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..843e7016b3f51f04ca4f76e28ef7e8a9cf949e8d --- /dev/null +++ b/src/main/webapp/app/exercise/service/exercise.service.spec.ts @@ -0,0 +1,68 @@ +import { HttpClientModule } from '@angular/common/http'; +import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; +import { TestBed } from '@angular/core/testing'; +import { RouterTestingModule } from '@angular/router/testing'; +import { TranslateModule } from '@ngx-translate/core'; +import { ApplicationConfigService } from 'app/core/config/application-config.service'; +import { LocalStorageService, SessionStorageService } from 'ngx-webstorage'; +import { ExerciseService } from './exercise.service'; + +describe('ExerciseService', () => { + let service: ExerciseService; + let httpMock: HttpTestingController; + let applicationConfigService: ApplicationConfigService; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [HttpClientTestingModule, HttpClientModule, TranslateModule.forRoot(), RouterTestingModule], + declarations: [], + providers: [ApplicationConfigService, LocalStorageService, SessionStorageService], + }); + + applicationConfigService = TestBed.inject(ApplicationConfigService); + service = TestBed.inject(ExerciseService); + httpMock = TestBed.inject(HttpTestingController); + }); + + it('should inject', () => { + expect(service).toBeTruthy(); + }); + + it('test Caching', () => { + let isInvoked443 = 0; + let isInvoked444 = 0; + + service.loadExercise('443').subscribe(() => { + isInvoked443++; + }); + service.loadExercise('444').subscribe(() => { + isInvoked444++; + }); + expect(isInvoked443).toEqual(0); // still waiting for response + expect(isInvoked444).toEqual(0); // still waiting for response + const testRequest443 = httpMock.expectOne({ + method: 'GET', + url: applicationConfigService.getEndpointFor('api/exercise/443'), + }); + const testRequest444 = httpMock.expectOne({ + method: 'GET', + url: applicationConfigService.getEndpointFor('api/exercise/444'), + }); + + testRequest443.flush({ + kaese: 'kaese', + }); + testRequest444.flush({ + kaese: 'kaese', + }); + expect(isInvoked443).toEqual(1); + expect(isInvoked444).toEqual(1); + + service.loadExercise('444').subscribe(() => { + isInvoked444++; + }); + expect(isInvoked444).toEqual(3); // result was returned immediately from cache + expect(isInvoked443).toEqual(2); + httpMock.expectNone({}); + }); +});