From b844bd975a5650ffc47a25d392e142a68fa2d85f Mon Sep 17 00:00:00 2001
From: Michael Breu <Michael.Breu@arctis.at>
Date: Fri, 26 Jan 2024 09:52:17 +0100
Subject: [PATCH] starting with jest test

---
 .../exercise/service/exercise.service.spec.ts | 68 +++++++++++++++++++
 1 file changed, 68 insertions(+)
 create mode 100644 src/main/webapp/app/exercise/service/exercise.service.spec.ts

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 000000000..843e7016b
--- /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({});
+  });
+});
-- 
GitLab