OK-487 FE Unittest anpassen
diff --git a/src/app/app.component.spec.ts b/src/app/app.component.spec.ts
index 5aaaddb..ab3bc79 100644
--- a/src/app/app.component.spec.ts
+++ b/src/app/app.component.spec.ts
@@ -1,30 +1,116 @@
/* tslint:disable:no-unused-variable */
import { TestBed, async } from '@angular/core/testing';
+import { MockComponent } from './testing/mock.component';
import { AppComponent } from './app.component';
+import { Http, Response } from '@angular/http';
+import { Router, ActivatedRoute } from '@angular/router';
+import { BaseDataLoaderService } from './services/jobs/base-data-loader.service';
+import { HttpResponseInterceptorService } from './services/http-response-interceptor.service';
+import { SessionContext } from './common/session-context';
+import { MessageService } from './services/message.service';
+import { ReminderCallerJobService } from './services/jobs/reminder-caller-job.service';
+import { ImportFileCallerService } from './services/jobs/import-file-caller.service';
+import { AbstractMockObservableService } from './common/abstract-mock-observable.service';
+
+class FakeRouter {
+ navigate(commands: any[]) {
+ return commands[0];
+ }
+}
+
+class MockHttp extends AbstractMockObservableService {
+ get() {
+ return this;
+ }
+}
+
+class MockHttpRes {
+ public content: any;
+ json() { return this.content; }
+}
describe('AppComponent', () => {
+ let router: Router;
+ const mockService = new MockHttp();
+ let sessionContext: SessionContext;
+
beforeEach(() => {
+ router = new FakeRouter() as any as Router;
+ sessionContext = new SessionContext();
+
TestBed.configureTestingModule({
declarations: [
- AppComponent
+ AppComponent,
+ MockComponent({selector: 'app-main-navigation'}),
+ MockComponent({selector: 'app-message-banner'}),
+ MockComponent({selector: 'router-outlet'})
],
+ providers: [
+ { provide: Http, useValue: mockService },
+ { provide: Router, useValue: router },
+ { provide: BaseDataLoaderService, useValue: {} },
+ { provide: ActivatedRoute },
+ { provide: HttpResponseInterceptorService },
+ { provide: SessionContext, useValue: sessionContext },
+ { provide: MessageService },
+ { provide: ReminderCallerJobService },
+ { provide: ImportFileCallerService }
+ ],
});
TestBed.compileComponents();
+
+ const httpRes = new MockHttpRes();
+ httpRes.content = {};
+ mockService.content = httpRes;
+
+
});
-/*
+
+
+
it('should create the app', async(() => {
- const fixture = TestBed.createComponent(AppComponent);
+ const fixture = TestBed.createComponent(AppComponent);
const app = fixture.debugElement.componentInstance;
expect(app).toBeTruthy();
}));
- it(`should have as title 'app works!'`, async(() => {
- const fixture = TestBed.createComponent(AppComponent);
+
+ it('should extract the user data from the JWT-AccessToken', async(() => {
+ const fixture = TestBed.createComponent(AppComponent);
const app = fixture.debugElement.componentInstance;
- expect(app.title).toEqual('app works!');
+
+ const accessToken = 'eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJodVl0e' +
+ 'VByUEVLQ1phY3FfMW5sOGZscENETnFHdmZEZHctYUxGQXNoWHZVIn0.eyJqdGkiOiI4ZmY5NTlhZC' +
+ '02ODQ1LTRlOGEtYjRiYi02ODQ0YjAwMjU0ZjgiLCJleHAiOjE1MDY2MDA0NTAsIm5iZiI6MCwiaWF' +
+ '0IjoxNTA2NjAwMTUwLCJpc3MiOiJodHRwOi8vZW50amF2YTAwMjo4MDgwL2F1dGgvcmVhbG1zL2Vs' +
+ 'b2dib29rIiwiYXVkIjoiZWxvZ2Jvb2stYmFja2VuZCIsInN1YiI6IjM1OWVmOWM5LTc3ZGYtNGEzZ' +
+ 'C1hOWM5LWY5NmQ4MzdkMmQ1NyIsInR5cCI6IkJlYXJlciIsImF6cCI6ImVsb2dib29rLWJhY2tlbm' +
+ 'QiLCJhdXRoX3RpbWUiOjAsInNlc3Npb25fc3RhdGUiOiI5NjVmNzM1MS0yZThiLTQ1MjgtOWYzZC1' +
+ 'lZTYyODNhOTViMTYiLCJhY3IiOiIxIiwiYWxsb3dlZC1vcmlnaW5zIjpbIioiXSwicmVhbG1fYWNj' +
+ 'ZXNzIjp7InJvbGVzIjpbImVsb2dib29rLXN1cGVydXNlciIsImVsb2dib29rLW5vcm1hbHVzZXIiL' +
+ 'CJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7InJlYWxtLW1hbmFnZW1lbn' +
+ 'QiOnsicm9sZXMiOlsidmlldy11c2VycyIsInF1ZXJ5LWdyb3VwcyIsInF1ZXJ5LXVzZXJzIl19LCJ' +
+ 'hY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3Mi' +
+ 'LCJ2aWV3LXByb2ZpbGUiXX19LCJuYW1lIjoiQWRtaW5pc3RyYXRvciBBZG1pbmlzdHJhdG93aWNoI' +
+ 'iwicHJlZmVycmVkX3VzZXJuYW1lIjoiYWRtaW4iLCJnaXZlbl9uYW1lIjoiQWRtaW5pc3RyYXRvci' +
+ 'IsImZhbWlseV9uYW1lIjoiQWRtaW5pc3RyYXRvd2ljaCIsImVtYWlsIjoic2VyZ2VqLmtlcm5AcHRh' +
+ 'LmRlIiwicm9sZXN0ZXN0IjoiW2Vsb2dib29rLXN1cGVydXNlciwgZWxvZ2Jvb2stbm9ybWFsdXNlc' +
+ 'iwgdW1hX2F1dGhvcml6YXRpb24sIG9mZmxpbmVfYWNjZXNzLCB1bWFfYXV0aG9yaXphdGlvbiwgZW' +
+ 'xvZ2Jvb2stbm9ybWFsdXNlcl0ifQ.o94Bl43oqyLNzZRABvIq9z-XI8JQjqj2FSDdUUEZGZPTN4uw' +
+ 'D5fyi0sONbDxmTFvgWPh_8ZhX6tlDGiupVDBY4eRH43Eettm-t4CDauL7FzB3w3dDPFMB5DhP4rrp' +
+ 'k_kATwnY2NKLRbequnh8Z6wLXjcmQNLgrgknXB_gogWAqH29dqKexwceMNIbq-kjaeLsmHSXM9TE9' +
+ 'q7_Ln9el04OlkpOVspVguedfINcNFg0DmYLJWyD2ORkOHLmYigN6YnyB9P2NFOnKGlLuQ87GjosI0' +
+ '0zBniRGi3PhE9NGd51Qggdbcsm0aM8GiMaZ7SO5i8iQWL10TRFRFyTEfy6hSO8g';
+
+ const incognito: any = app;
+ incognito.processAccessToken( accessToken );
+
+ expect( sessionContext.getCurrUser().name).toBe('Administrator Administratowich');
+ expect( sessionContext.getAccessToken()).toBe( accessToken );
}));
+ /*
it('should render title in a h1 tag', async(() => {
const fixture = TestBed.createComponent(AppComponent);
fixture.detectChanges();
diff --git a/src/app/app.component.ts b/src/app/app.component.ts
index 84d5334..3456c3c 100644
--- a/src/app/app.component.ts
+++ b/src/app/app.component.ts
@@ -48,6 +48,31 @@
this.extractTokenFromParameters();
}
+ private processAccessToken( accessToken: string ) {
+ const jwtHelper: JwtHelper = new JwtHelper();
+ const decoded: any = jwtHelper.decodeToken(accessToken);
+ const user: User = new User();
+ user.id = decoded.sub;
+ user.username = decoded.preferred_username;
+ user.itemName = decoded.preferred_username;
+ let firstName = decoded.given_name;
+ if (!firstName) {
+ firstName = '';
+ }
+ let lastName = decoded.family_name;
+ if (!lastName) {
+ lastName = '';
+ }
+
+ user.name = firstName + ' ' + lastName;
+
+ if (decoded.realm_access.roles.filter(s => s === Globals.OAUTH2CONF_SUPERUSER_ROLE).length >= 1) {
+ user.specialUser = true;
+ }
+
+ this.sessionContext.setCurrUser(user);
+ this.sessionContext.setAccessToken(accessToken);
+}
/**
* Extract the params (suscribe to router event) and store them in the sessionContext.
@@ -55,31 +80,9 @@
private extractTokenFromParameters() {
this.activatedRoute.params.subscribe((params: Params) => {
const accessToken = this.getParametersFromUrl();
- if (accessToken) {
- const jwtHelper: JwtHelper = new JwtHelper();
- const decoded: any = jwtHelper.decodeToken(accessToken);
- const user: User = new User();
- user.id = decoded.sub;
- user.username = decoded.preferred_username;
- user.itemName = decoded.preferred_username;
- let firstName = decoded.given_name;
- if (!firstName) {
- firstName = '';
- }
- let lastName = decoded.family_name;
- if (!lastName) {
- lastName = '';
- }
-
- user.name = firstName + ' ' + lastName;
-
- if (decoded.realm_access.roles.filter(s => s === Globals.OAUTH2CONF_SUPERUSER_ROLE).length >= 1) {
- user.specialUser = true;
- }
-
- this.sessionContext.setCurrUser(user);
- this.sessionContext.setAccessToken(accessToken);
+ if (accessToken) {
+ this.processAccessToken( accessToken );
}
this.messageService.loginLogoff$.emit(MessageDefines.MSG_LOG_IN_SUCCEEDED);
});
diff --git a/src/app/common-components/message-banner/message-banner.component.spec.ts b/src/app/common-components/message-banner/message-banner.component.spec.ts
index 4046152..a691e76 100644
--- a/src/app/common-components/message-banner/message-banner.component.spec.ts
+++ b/src/app/common-components/message-banner/message-banner.component.spec.ts
@@ -1,14 +1,26 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
-
+import { SessionContext } from '../../common/session-context';
+import { By } from '@angular/platform-browser';
+import { DebugElement } from '@angular/core';
import { MessageBannerComponent } from './message-banner.component';
+import { BannerMessage } from '../../common/banner-message';
+import { BannerMessageStatusEn } from '../../common/enums';
describe('MessageBannerComponent', () => {
let component: MessageBannerComponent;
let fixture: ComponentFixture<MessageBannerComponent>;
+ let sessionContext: SessionContext;
+ let de: DebugElement;
+ let el: HTMLElement; // the DOM element with the welcome message
beforeEach(async(() => {
+ sessionContext = new SessionContext();
+
TestBed.configureTestingModule({
- declarations: [ MessageBannerComponent ]
+ declarations: [ MessageBannerComponent ],
+ providers: [
+ { provide: SessionContext, useValue: sessionContext },
+ ],
})
.compileComponents();
}));
@@ -19,7 +31,36 @@
fixture.detectChanges();
});
- // it('should be created', () => {
- // expect(component).toBeTruthy();
- // });
+ it('should be created', () => {
+ expect(component).toBeTruthy();
+ });
+
+ it('should count the zOrder correctly and toggle the visibility due to zOrder', () => {
+ const fixture2 = TestBed.createComponent(MessageBannerComponent);
+ const component2: any = fixture2.componentInstance;
+ const bannerMessage = new BannerMessage();
+
+ sessionContext.setBannerMessage(BannerMessageStatusEn.success, 'Testor', true);
+
+ const x1: any = component;
+ x1.ngOnInit();
+
+ expect(component.getMaxMessageBannerZOrder()).toBe(0);
+ fixture.detectChanges();
+
+ // Component 1 is the only one and has the topmost zOrder=>Visible
+ expect(fixture.debugElement.query( By.css('.close'))).not.toBeNull();
+
+ component2.zOrder = 666;
+ component2.ngOnInit();
+
+ expect(component.getMaxMessageBannerZOrder()).toBe(666);
+ fixture.detectChanges();
+ fixture2.detectChanges();
+
+ // Component 2 has a bigger zOrder => Component1=invisible, Component2=visible
+ expect(fixture.debugElement.query( By.css('.close'))).toBeNull();
+ expect(fixture2.debugElement.query( By.css('.close'))).not.toBeNull();
+
+ });
});
diff --git a/src/app/services/user.service.spec.ts b/src/app/services/user.service.spec.ts
index fc6883d..c8fbe8c 100644
--- a/src/app/services/user.service.spec.ts
+++ b/src/app/services/user.service.spec.ts
@@ -18,7 +18,7 @@
describe('Http-UserService (mockBackend)', () => {
let sessionContext: SessionContext;
-let messageService:MessageService;
+ let messageService: MessageService;
beforeEach( async(() => {
TestBed.configureTestingModule({
imports: [ HttpModule ],