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', () => {
})
})
describe('isVorgnagListPage', () => {
describe('isVorgangListPage', () => {
it('should return true if params are empty', () => {
const isPage: boolean = NavigationService.isVorgangListPage({ });
......@@ -302,4 +302,31 @@ describe('NavigationService', () => {
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 {
this.router.navigate([this.getRootPath()]);
}
//TODO Test
getRootPath(): string {
return this.isMeineVorgaengeFilter()
? NavigationService.MEINE_VORGAENGE_PATH
......@@ -211,7 +210,6 @@ export class NavigationService {
return this.facade.getCurrentRouteData();
}
//TODO Test
public navigateByLocalStorage(): void {
this.router.navigate(buildPathSegmentsFromLocalStorage());
}
......
......@@ -22,11 +22,13 @@
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
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 { OAuthService } from 'angular-oauth2-oidc';
import { VorgangListPageGuard } from './vorgang-list-page.guard';
import * as VorgangNavigationUtil from 'libs/vorgang-shared/src/lib/vorgang-navigation.util';
describe('VorgangListPageGuard', () => {
let guard: VorgangListPageGuard;
......@@ -66,17 +68,75 @@ describe('VorgangListPageGuard', () => {
})
describe('buildDefaultUrlTreeFromLocalStorage', () => {
const buildPathSegmentsFromLocalStorage = jest.spyOn(VorgangNavigationUtil, 'buildPathSegmentsFromLocalStorage');
it('should call guard.accessTokenIsInvalid', () => {
guard.accessTokenIsInvalid = jest.fn();
it('should call authService.getAccessToken', () => {
guard.buildDefaultUrlTreeFromLocalStorage();
expect(authService.getAccessToken).toHaveBeenCalled();
expect(guard.accessTokenIsInvalid).toHaveBeenCalled();
})
it('should call router.createUrlTree', () => {
guard.accessTokenIsInvalid = jest.fn().mockReturnValue(false);
guard.buildDefaultUrlTreeFromLocalStorage();
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';
import { CanActivate, Router, UrlTree } from '@angular/router';
import { OAuthService } from 'angular-oauth2-oidc';
import { buildPathSegmentsFromLocalStorage } from 'libs/vorgang-shared/src/lib/vorgang-navigation.util';
import { isNull } from 'lodash-es';
@Injectable()
export class VorgangListPageGuard implements CanActivate {
......@@ -36,9 +35,8 @@ export class VorgangListPageGuard implements CanActivate {
return this.buildDefaultUrlTreeFromLocalStorage();
}
//TODO Tests
buildDefaultUrlTreeFromLocalStorage(): boolean | UrlTree {
if (isNull(this.authService.getAccessToken())) {
if (this.accessTokenIsInvalid()) {
return true;
}
......@@ -47,4 +45,7 @@ export class VorgangListPageGuard implements CanActivate {
return this.router.createUrlTree(pathSegments);
}
accessTokenIsInvalid(): boolean {
return ! this.authService.hasValidAccessToken();
}
}
......@@ -24,7 +24,7 @@
-->
<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">
<goofy-client-vorgang-meine-filter-item-container></goofy-client-vorgang-meine-filter-item-container>
</mat-button-toggle>
......
......@@ -27,8 +27,8 @@ import { MatButtonToggle, MatButtonToggleGroup } from '@angular/material/button-
import { MatRipple } from '@angular/material/core';
import { ApiRootLinkRel } from '@goofy-client/api-root-shared';
import { NavigationService } from '@goofy-client/navigation-shared';
import { createStateResource, HasLinkPipe } from '@goofy-client/tech-shared';
import { getElementFromFixture, mock } from '@goofy-client/test-utils';
import { createEmptyStateResource, createStateResource, HasLinkPipe } from '@goofy-client/tech-shared';
import { existsAsHtmlElement, mock, notExistsAsHtmlElement } from '@goofy-client/test-utils';
import { VorgangListService } from '@goofy-client/vorgang-shared';
import { createApiRootResource } from 'libs/api-root-shared/test/api-root';
import { getDataTestIdOf } from 'libs/tech-shared/test/data-test';
......@@ -40,30 +40,18 @@ import { VorgangFilterMenuComponent } from './vorgang-filter-menu.component';
import { VorgangFilterFormService } from './vorgang-filter-menu.formservice';
import { VorgangMeineFilterItemContainerComponent } from './vorgang-meine-filter-item-container/vorgang-meine-filter-item-container.component';
describe.skip('FIXME: VorgangFilterMenuComponent', () => {
describe('VorgangFilterMenuComponent', () => {
let component: VorgangFilterMenuComponent;
let fixture: ComponentFixture<VorgangFilterMenuComponent>;
const alleFilterToggleButton: string = getDataTestIdOf('alle-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({
filter: new FormControl()
});
// const form: FormGroup = <any>{
// controls: {
// test: new FormControl(null)
// }
// };
const vorgangFilterFormService = { ...mock(VorgangFilterFormService) , form };
// const vorgangFilterFormService = mock(VorgangFilterFormService);
const navigationService = mock(NavigationService);
const vorgangListService = mock(VorgangListService);
......@@ -115,43 +103,65 @@ describe.skip('FIXME: VorgangFilterMenuComponent', () => {
describe('alle filter item', () => {
it('should show on existing link', () => {
component.apiRootStateResource = createStateResource(createApiRootResource([ApiRootLinkRel.ALLE_VORGAENGE]));
it('should show on two existing links', () => {
component.apiRootStateResource = createStateResource(createApiRootResource([ApiRootLinkRel.ALLE_VORGAENGE, ApiRootLinkRel.MEINE_VORGAENGE]));
fixture.detectChanges();
const element = getElementFromFixture(fixture, alleFilterToggleButton);
expect(element).toBeInstanceOf(HTMLElement);
existsAsHtmlElement(fixture, alleFilterToggleButton);
})
it('should hide on missing link', () => {
component.apiRootStateResource = createStateResource(createApiRootResource());
fixture.detectChanges();
const element = getElementFromFixture(fixture, alleFilterToggleButton);
expect(element).not.toBeInstanceOf(HTMLElement);
notExistsAsHtmlElement(fixture, alleFilterToggleButton);
})
})
describe('meine vorgaenge filter item', () => {
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();
const element = getElementFromFixture(fixture, meineVorgaengeFilterToggleButton);
expect(element).toBeInstanceOf(HTMLElement);
existsAsHtmlElement(fixture, meineVorgaengeFilterToggleButton);
})
it('should hide on missing link', () => {
component.apiRootStateResource = createStateResource(createApiRootResource());
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 {
readonly apiRootLinkRel = ApiRootLinkRel;
filterName: string = VorgangFilterFormService.FILTER;
constructor(public formService: VorgangFilterFormService) {}
//TODO Test
areMultipleFilterAvailable(): boolean {
return hasLink(this.apiRootStateResource.resource, ApiRootLinkRel.ALLE_VORGAENGE) && hasLink(this.apiRootStateResource.resource, ApiRootLinkRel.MEINE_VORGAENGE);
}
......
......@@ -10,7 +10,7 @@ export class VorgangFilterFormService implements OnDestroy {
public form: FormGroup;
public readonly FILTER: string = 'filter';
static readonly FILTER: string = 'filter';
public readonly FILTER_ALLE_VALUE: string = 'alle';
public readonly FILTER_MEINE_VALUE: string = 'meine';
......@@ -34,7 +34,7 @@ export class VorgangFilterFormService implements OnDestroy {
private initForm(): void {
this.form = this.formBuilder.group({
[this.FILTER]: new FormControl()
[VorgangFilterFormService.FILTER]: new FormControl()
})
}
......@@ -51,7 +51,7 @@ export class VorgangFilterFormService implements OnDestroy {
}
private getFilterControl(): FormControl {
return <FormControl>this.form.controls[this.FILTER];
return <FormControl>this.form.controls[VorgangFilterFormService.FILTER];
}
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