Skip to content
Snippets Groups Projects
Commit cc04514d authored by OZGCloud's avatar OZGCloud
Browse files

OZG-3574 add test in vorgang / navigation lib

parent 641fc63b
Branches
Tags
No related merge requests found
Showing
with 139 additions and 42 deletions
...@@ -155,7 +155,7 @@ describe('NavigationService', () => { ...@@ -155,7 +155,7 @@ describe('NavigationService', () => {
}) })
}) })
describe('isVorgnagListPage', () => { describe('isVorgangListPage', () => {
it('should return true if params are empty', () => { it('should return true if params are empty', () => {
const isPage: boolean = NavigationService.isVorgangListPage({ }); const isPage: boolean = NavigationService.isVorgangListPage({ });
...@@ -302,4 +302,31 @@ describe('NavigationService', () => { ...@@ -302,4 +302,31 @@ describe('NavigationService', () => {
expect(router.navigate).toHaveBeenCalledWith([EMPTY_STRING, 'meine', 'neu']); expect(router.navigate).toHaveBeenCalledWith([EMPTY_STRING, 'meine', 'neu']);
}) })
}) })
describe('getRootPath', () => {
it('should call isMeineVorgaengeFilter', () => {
service.isMeineVorgaengeFilter = jest.fn();
service.getRootPath();
expect(service.isMeineVorgaengeFilter).toHaveBeenCalled();
})
it('should return NavigationService.MEINE_VORGAENGE_PATH', () => {
service.isMeineVorgaengeFilter = jest.fn().mockReturnValue(true);
const path: string = service.getRootPath();
expect(path).toBe(NavigationService.MEINE_VORGAENGE_PATH);
})
it('should return NavigationService.ALLE_VORGAENGE_PATH', () => {
service.isMeineVorgaengeFilter = jest.fn().mockReturnValue(false);
const path: string = service.getRootPath();
expect(path).toBe(NavigationService.ALLE_VORGAENGE_PATH);
})
})
}) })
\ No newline at end of file
...@@ -174,7 +174,6 @@ export class NavigationService { ...@@ -174,7 +174,6 @@ export class NavigationService {
this.router.navigate([this.getRootPath()]); this.router.navigate([this.getRootPath()]);
} }
//TODO Test
getRootPath(): string { getRootPath(): string {
return this.isMeineVorgaengeFilter() return this.isMeineVorgaengeFilter()
? NavigationService.MEINE_VORGAENGE_PATH ? NavigationService.MEINE_VORGAENGE_PATH
...@@ -211,7 +210,6 @@ export class NavigationService { ...@@ -211,7 +210,6 @@ export class NavigationService {
return this.facade.getCurrentRouteData(); return this.facade.getCurrentRouteData();
} }
//TODO Test
public navigateByLocalStorage(): void { public navigateByLocalStorage(): void {
this.router.navigate(buildPathSegmentsFromLocalStorage()); this.router.navigate(buildPathSegmentsFromLocalStorage());
} }
......
...@@ -22,11 +22,13 @@ ...@@ -22,11 +22,13 @@
* unter der Lizenz sind dem Lizenztext zu entnehmen. * unter der Lizenz sind dem Lizenztext zu entnehmen.
*/ */
import { TestBed } from '@angular/core/testing'; import { TestBed } from '@angular/core/testing';
import { Router } from '@angular/router'; import { Router, UrlTree } from '@angular/router';
import { mock } from '@goofy-client/test-utils'; import { mock } from '@goofy-client/test-utils';
import { OAuthService } from 'angular-oauth2-oidc'; import { OAuthService } from 'angular-oauth2-oidc';
import { VorgangListPageGuard } from './vorgang-list-page.guard'; import { VorgangListPageGuard } from './vorgang-list-page.guard';
import * as VorgangNavigationUtil from 'libs/vorgang-shared/src/lib/vorgang-navigation.util';
describe('VorgangListPageGuard', () => { describe('VorgangListPageGuard', () => {
let guard: VorgangListPageGuard; let guard: VorgangListPageGuard;
...@@ -66,17 +68,75 @@ describe('VorgangListPageGuard', () => { ...@@ -66,17 +68,75 @@ describe('VorgangListPageGuard', () => {
}) })
describe('buildDefaultUrlTreeFromLocalStorage', () => { describe('buildDefaultUrlTreeFromLocalStorage', () => {
const buildPathSegmentsFromLocalStorage = jest.spyOn(VorgangNavigationUtil, 'buildPathSegmentsFromLocalStorage');
it('should call guard.accessTokenIsInvalid', () => {
guard.accessTokenIsInvalid = jest.fn();
it('should call authService.getAccessToken', () => {
guard.buildDefaultUrlTreeFromLocalStorage(); guard.buildDefaultUrlTreeFromLocalStorage();
expect(authService.getAccessToken).toHaveBeenCalled(); expect(guard.accessTokenIsInvalid).toHaveBeenCalled();
}) })
it('should call router.createUrlTree', () => { it('should call router.createUrlTree', () => {
guard.accessTokenIsInvalid = jest.fn().mockReturnValue(false);
guard.buildDefaultUrlTreeFromLocalStorage(); guard.buildDefaultUrlTreeFromLocalStorage();
expect(router.createUrlTree).toHaveBeenCalled(); expect(router.createUrlTree).toHaveBeenCalled();
}) })
it('should call VorgangNavigationUtil.buildPathSegmentsFromLocalStorage', () => {
guard.accessTokenIsInvalid = jest.fn().mockReturnValue(false);
guard.buildDefaultUrlTreeFromLocalStorage();
expect(buildPathSegmentsFromLocalStorage).toHaveBeenCalled();
})
it('should return URLTree if access token is valid', () => {
guard.accessTokenIsInvalid = jest.fn().mockReturnValue(false);
const pathSegments: string[] = ['meine', 'neu'];
buildPathSegmentsFromLocalStorage.mockReturnValue(pathSegments);
guard.buildDefaultUrlTreeFromLocalStorage();
expect(router.createUrlTree).toHaveBeenCalledWith(pathSegments);
})
it('should return true if it has no valid access token', () => {
guard.accessTokenIsInvalid = jest.fn().mockReturnValue(true);
const result: boolean | UrlTree = guard.buildDefaultUrlTreeFromLocalStorage();
expect(result).toBeTruthy();
})
})
describe('accessTokenIsInvalid', () => {
it('should call authService.hasValidAccessToken', () => {
authService.hasValidAccessToken = jest.fn();
guard.accessTokenIsInvalid();
expect(authService.hasValidAccessToken).toHaveBeenCalled();
})
it('should return true', () => {
authService.hasValidAccessToken = jest.fn().mockReturnValue(false);
const result: boolean = guard.accessTokenIsInvalid();
expect(result).toBeTruthy();
})
it('should return false', () => {
authService.hasValidAccessToken = jest.fn().mockReturnValue(true);
const result: boolean = guard.accessTokenIsInvalid();
expect(result).toBeFalsy();
})
}) })
}); });
...@@ -25,7 +25,6 @@ import { Injectable } from '@angular/core'; ...@@ -25,7 +25,6 @@ import { Injectable } from '@angular/core';
import { CanActivate, Router, UrlTree } from '@angular/router'; import { CanActivate, Router, UrlTree } from '@angular/router';
import { OAuthService } from 'angular-oauth2-oidc'; import { OAuthService } from 'angular-oauth2-oidc';
import { buildPathSegmentsFromLocalStorage } from 'libs/vorgang-shared/src/lib/vorgang-navigation.util'; import { buildPathSegmentsFromLocalStorage } from 'libs/vorgang-shared/src/lib/vorgang-navigation.util';
import { isNull } from 'lodash-es';
@Injectable() @Injectable()
export class VorgangListPageGuard implements CanActivate { export class VorgangListPageGuard implements CanActivate {
...@@ -36,9 +35,8 @@ export class VorgangListPageGuard implements CanActivate { ...@@ -36,9 +35,8 @@ export class VorgangListPageGuard implements CanActivate {
return this.buildDefaultUrlTreeFromLocalStorage(); return this.buildDefaultUrlTreeFromLocalStorage();
} }
//TODO Tests
buildDefaultUrlTreeFromLocalStorage(): boolean | UrlTree { buildDefaultUrlTreeFromLocalStorage(): boolean | UrlTree {
if (isNull(this.authService.getAccessToken())) { if (this.accessTokenIsInvalid()) {
return true; return true;
} }
...@@ -47,4 +45,7 @@ export class VorgangListPageGuard implements CanActivate { ...@@ -47,4 +45,7 @@ export class VorgangListPageGuard implements CanActivate {
return this.router.createUrlTree(pathSegments); return this.router.createUrlTree(pathSegments);
} }
accessTokenIsInvalid(): boolean {
return ! this.authService.hasValidAccessToken();
}
} }
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
--> -->
<form [formGroup]="formService.form" *ngIf="multipleFilterAvailable" data-test-id="vorgang-filter-form"> <form [formGroup]="formService.form" *ngIf="multipleFilterAvailable" data-test-id="vorgang-filter-form">
<mat-button-toggle-group [formControlName]="formService.FILTER" multiple="false"> <mat-button-toggle-group [formControlName]="filterName" multiple="false">
<mat-button-toggle *ngIf="apiRootStateResource.resource | hasLink: apiRootLinkRel.MEINE_VORGAENGE" data-test-id="meine-vorgaenge-filter-toggle-button" [value]="formService.FILTER_MEINE_VALUE"> <mat-button-toggle *ngIf="apiRootStateResource.resource | hasLink: apiRootLinkRel.MEINE_VORGAENGE" data-test-id="meine-vorgaenge-filter-toggle-button" [value]="formService.FILTER_MEINE_VALUE">
<goofy-client-vorgang-meine-filter-item-container></goofy-client-vorgang-meine-filter-item-container> <goofy-client-vorgang-meine-filter-item-container></goofy-client-vorgang-meine-filter-item-container>
</mat-button-toggle> </mat-button-toggle>
......
...@@ -27,8 +27,8 @@ import { MatButtonToggle, MatButtonToggleGroup } from '@angular/material/button- ...@@ -27,8 +27,8 @@ import { MatButtonToggle, MatButtonToggleGroup } from '@angular/material/button-
import { MatRipple } from '@angular/material/core'; import { MatRipple } from '@angular/material/core';
import { ApiRootLinkRel } from '@goofy-client/api-root-shared'; import { ApiRootLinkRel } from '@goofy-client/api-root-shared';
import { NavigationService } from '@goofy-client/navigation-shared'; import { NavigationService } from '@goofy-client/navigation-shared';
import { createStateResource, HasLinkPipe } from '@goofy-client/tech-shared'; import { createEmptyStateResource, createStateResource, HasLinkPipe } from '@goofy-client/tech-shared';
import { getElementFromFixture, mock } from '@goofy-client/test-utils'; import { existsAsHtmlElement, mock, notExistsAsHtmlElement } from '@goofy-client/test-utils';
import { VorgangListService } from '@goofy-client/vorgang-shared'; import { VorgangListService } from '@goofy-client/vorgang-shared';
import { createApiRootResource } from 'libs/api-root-shared/test/api-root'; import { createApiRootResource } from 'libs/api-root-shared/test/api-root';
import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test';
...@@ -40,30 +40,18 @@ import { VorgangFilterMenuComponent } from './vorgang-filter-menu.component'; ...@@ -40,30 +40,18 @@ import { VorgangFilterMenuComponent } from './vorgang-filter-menu.component';
import { VorgangFilterFormService } from './vorgang-filter-menu.formservice'; import { VorgangFilterFormService } from './vorgang-filter-menu.formservice';
import { VorgangMeineFilterItemContainerComponent } from './vorgang-meine-filter-item-container/vorgang-meine-filter-item-container.component'; import { VorgangMeineFilterItemContainerComponent } from './vorgang-meine-filter-item-container/vorgang-meine-filter-item-container.component';
describe.skip('FIXME: VorgangFilterMenuComponent', () => { describe('VorgangFilterMenuComponent', () => {
let component: VorgangFilterMenuComponent; let component: VorgangFilterMenuComponent;
let fixture: ComponentFixture<VorgangFilterMenuComponent>; let fixture: ComponentFixture<VorgangFilterMenuComponent>;
const alleFilterToggleButton: string = getDataTestIdOf('alle-filter-toggle-button'); const alleFilterToggleButton: string = getDataTestIdOf('alle-filter-toggle-button');
const meineVorgaengeFilterToggleButton: string = getDataTestIdOf('meine-vorgaenge-filter-toggle-button'); const meineVorgaengeFilterToggleButton: string = getDataTestIdOf('meine-vorgaenge-filter-toggle-button');
// const form: FormGroup = <any>{
// controls: {
// test: new FormControl(null)
// }
// };
// const vorgangFilterFormService = { ...mock(VorgangFilterFormService) , form };
const form: FormGroup = new FormBuilder().group({ const form: FormGroup = new FormBuilder().group({
filter: new FormControl() filter: new FormControl()
}); });
// const form: FormGroup = <any>{
// controls: {
// test: new FormControl(null)
// }
// };
const vorgangFilterFormService = { ...mock(VorgangFilterFormService) , form }; const vorgangFilterFormService = { ...mock(VorgangFilterFormService) , form };
// const vorgangFilterFormService = mock(VorgangFilterFormService);
const navigationService = mock(NavigationService); const navigationService = mock(NavigationService);
const vorgangListService = mock(VorgangListService); const vorgangListService = mock(VorgangListService);
...@@ -115,43 +103,65 @@ describe.skip('FIXME: VorgangFilterMenuComponent', () => { ...@@ -115,43 +103,65 @@ describe.skip('FIXME: VorgangFilterMenuComponent', () => {
describe('alle filter item', () => { describe('alle filter item', () => {
it('should show on existing link', () => { it('should show on two existing links', () => {
component.apiRootStateResource = createStateResource(createApiRootResource([ApiRootLinkRel.ALLE_VORGAENGE])); component.apiRootStateResource = createStateResource(createApiRootResource([ApiRootLinkRel.ALLE_VORGAENGE, ApiRootLinkRel.MEINE_VORGAENGE]));
fixture.detectChanges(); fixture.detectChanges();
const element = getElementFromFixture(fixture, alleFilterToggleButton);
expect(element).toBeInstanceOf(HTMLElement); existsAsHtmlElement(fixture, alleFilterToggleButton);
}) })
it('should hide on missing link', () => { it('should hide on missing link', () => {
component.apiRootStateResource = createStateResource(createApiRootResource()); component.apiRootStateResource = createStateResource(createApiRootResource());
fixture.detectChanges(); fixture.detectChanges();
const element = getElementFromFixture(fixture, alleFilterToggleButton);
expect(element).not.toBeInstanceOf(HTMLElement); notExistsAsHtmlElement(fixture, alleFilterToggleButton);
}) })
}) })
describe('meine vorgaenge filter item', () => { describe('meine vorgaenge filter item', () => {
it('should show on existing link', () => { it('should show on existing link', () => {
component.apiRootStateResource = createStateResource(createApiRootResource([ApiRootLinkRel.MEINE_VORGAENGE])); component.apiRootStateResource = createStateResource(createApiRootResource([ApiRootLinkRel.ALLE_VORGAENGE, ApiRootLinkRel.MEINE_VORGAENGE]));
fixture.detectChanges(); fixture.detectChanges();
const element = getElementFromFixture(fixture, meineVorgaengeFilterToggleButton);
expect(element).toBeInstanceOf(HTMLElement); existsAsHtmlElement(fixture, meineVorgaengeFilterToggleButton);
}) })
it('should hide on missing link', () => { it('should hide on missing link', () => {
component.apiRootStateResource = createStateResource(createApiRootResource()); component.apiRootStateResource = createStateResource(createApiRootResource());
fixture.detectChanges(); fixture.detectChanges();
const element = getElementFromFixture(fixture, meineVorgaengeFilterToggleButton);
expect(element).not.toBeInstanceOf(HTMLElement); notExistsAsHtmlElement(fixture, meineVorgaengeFilterToggleButton);
})
})
describe('areMultipleFilterAvailable', () => {
it('should return true if more than one link', () => {
component.apiRootStateResource = createStateResource(createApiRootResource([ApiRootLinkRel.ALLE_VORGAENGE, ApiRootLinkRel.MEINE_VORGAENGE]));
const result: boolean = component.areMultipleFilterAvailable();
expect(result).toBeTruthy();
})
it('should return false if only one link', () => {
component.apiRootStateResource = createStateResource(createApiRootResource([ApiRootLinkRel.ALLE_VORGAENGE]));
const result: boolean = component.areMultipleFilterAvailable();
expect(result).toBeFalsy();
})
it('should return false if no link', () => {
component.apiRootStateResource = createEmptyStateResource();
const result: boolean = component.areMultipleFilterAvailable();
expect(result).toBeFalsy();
}) })
}) })
}); });
...@@ -47,9 +47,10 @@ export class VorgangFilterMenuComponent { ...@@ -47,9 +47,10 @@ export class VorgangFilterMenuComponent {
readonly apiRootLinkRel = ApiRootLinkRel; readonly apiRootLinkRel = ApiRootLinkRel;
filterName: string = VorgangFilterFormService.FILTER;
constructor(public formService: VorgangFilterFormService) {} constructor(public formService: VorgangFilterFormService) {}
//TODO Test
areMultipleFilterAvailable(): boolean { areMultipleFilterAvailable(): boolean {
return hasLink(this.apiRootStateResource.resource, ApiRootLinkRel.ALLE_VORGAENGE) && hasLink(this.apiRootStateResource.resource, ApiRootLinkRel.MEINE_VORGAENGE); return hasLink(this.apiRootStateResource.resource, ApiRootLinkRel.ALLE_VORGAENGE) && hasLink(this.apiRootStateResource.resource, ApiRootLinkRel.MEINE_VORGAENGE);
} }
......
...@@ -10,7 +10,7 @@ export class VorgangFilterFormService implements OnDestroy { ...@@ -10,7 +10,7 @@ export class VorgangFilterFormService implements OnDestroy {
public form: FormGroup; public form: FormGroup;
public readonly FILTER: string = 'filter'; static readonly FILTER: string = 'filter';
public readonly FILTER_ALLE_VALUE: string = 'alle'; public readonly FILTER_ALLE_VALUE: string = 'alle';
public readonly FILTER_MEINE_VALUE: string = 'meine'; public readonly FILTER_MEINE_VALUE: string = 'meine';
...@@ -34,7 +34,7 @@ export class VorgangFilterFormService implements OnDestroy { ...@@ -34,7 +34,7 @@ export class VorgangFilterFormService implements OnDestroy {
private initForm(): void { private initForm(): void {
this.form = this.formBuilder.group({ this.form = this.formBuilder.group({
[this.FILTER]: new FormControl() [VorgangFilterFormService.FILTER]: new FormControl()
}) })
} }
...@@ -51,7 +51,7 @@ export class VorgangFilterFormService implements OnDestroy { ...@@ -51,7 +51,7 @@ export class VorgangFilterFormService implements OnDestroy {
} }
private getFilterControl(): FormControl { private getFilterControl(): FormControl {
return <FormControl>this.form.controls[this.FILTER]; return <FormControl>this.form.controls[VorgangFilterFormService.FILTER];
} }
private handleFilterChange(value: string): void { private handleFilterChange(value: string): void {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment