diff --git a/goofy-client/libs/api-root-shared/src/lib/api-root.linkrel.ts b/goofy-client/libs/api-root-shared/src/lib/api-root.linkrel.ts index 054439050bc6c2e62e3e54699ef9302e7a1c720a..eceb8ebbfa92a0159d84c66944563e02d962e219 100644 --- a/goofy-client/libs/api-root-shared/src/lib/api-root.linkrel.ts +++ b/goofy-client/libs/api-root-shared/src/lib/api-root.linkrel.ts @@ -32,8 +32,13 @@ export enum ApiRootLinkRel { ALLE_VORGAENGE_NEU = 'vorgaenge_neu_all', MEINE_VORGAENGE_NEU = 'vorgaenge_neu_meine', ALLE_VORGAENGE_ANGENOMMEN = 'vorgaenge_angenommen_all', + MEINE_VORGAENGE_ANGENOMMEN = 'vorgaenge_angenommen_my', ALLE_VORGAENGE_IN_BEARBEITUNG = 'vorgaenge_in_bearbeitung_all', + MEINE_VORGAENGE_IN_BEARBEITUNG = 'vorgaenge_in_bearbeitung_my', ALLE_VORGAENGE_BESCHIEDEN = 'vorgaenge_beschieden_all', + MEINE_VORGAENGE_BESCHIEDEN = 'vorgaenge_beschieden_my', ALLE_VORGAENGE_ABGESCHLOSSEN = 'vorgaenge_abgeschlossen_all', + MEINE_VORGAENGE_ABGESCHLOSSEN = 'vorgaenge_abgeschlossen_my', ALLE_VORGAENGE_VERWORFEN = 'vorgaenge_verworfen_all', + MEINE_VORGAENGE_VERWORFEN = 'vorgaenge_verworfen_my', } \ No newline at end of file diff --git a/goofy-client/libs/test-utils/src/index.ts b/goofy-client/libs/test-utils/src/index.ts index 50ec9f83cc6a6654a80da3808b1814df60c44194..f5bebce588a4599909fb879bda5cb646263860c9 100644 --- a/goofy-client/libs/test-utils/src/index.ts +++ b/goofy-client/libs/test-utils/src/index.ts @@ -22,6 +22,7 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ export * from './lib/helper'; +export * from './lib/jest.helper'; export * from './lib/mocking'; export * from './lib/test-utils.module'; diff --git a/goofy-client/libs/test-utils/src/lib/jest.helper.ts b/goofy-client/libs/test-utils/src/lib/jest.helper.ts new file mode 100644 index 0000000000000000000000000000000000000000..a720a330596247ebd844c1d12b5f3248781d9e6d --- /dev/null +++ b/goofy-client/libs/test-utils/src/lib/jest.helper.ts @@ -0,0 +1,11 @@ +import { ComponentFixture } from "@angular/core/testing"; +import { expect } from '@jest/globals'; +import { getElementFromFixture } from "./helper"; + +export function notExistsAsHtmlElement(fixture: ComponentFixture<any>, domElement: string): void { + expect(getElementFromFixture(fixture, domElement)).not.toBeInstanceOf(HTMLElement); +} + +export function existsAsHtmlElement(fixture: ComponentFixture<any>, domElement: string): void { + expect(getElementFromFixture(fixture, domElement)).toBeInstanceOf(HTMLElement); +} \ No newline at end of file diff --git a/goofy-client/libs/vorgang/src/lib/vorgang-list-page/vorgang-views-menu/vorgang-views-menu.component.html b/goofy-client/libs/vorgang/src/lib/vorgang-list-page/vorgang-views-menu/vorgang-views-menu.component.html index 14ebaf1ff9f7bf6ca5cbcbe5ad27654c7950e7cc..8163e5e1ae31bf491d463876f8b8377bcfddc8c4 100644 --- a/goofy-client/libs/vorgang/src/lib/vorgang-list-page/vorgang-views-menu/vorgang-views-menu.component.html +++ b/goofy-client/libs/vorgang/src/lib/vorgang-list-page/vorgang-views-menu/vorgang-views-menu.component.html @@ -26,19 +26,18 @@ <div class="views"> <goofy-client-vorgang-neu-view-item-container *ngIf="apiRootResource | hasAnyLink: apiRootLinkRel.ALLE_VORGAENGE_NEU: apiRootLinkRel.MEINE_VORGAENGE_NEU" data-test-id="vorgang-neu-view"> </goofy-client-vorgang-neu-view-item-container> - <!-- TODO Richtige Links abfragen + Tests --> - <goofy-client-vorgang-angenommen-view-item-container *ngIf="(apiRootResource | hasLink: apiRootLinkRel.ALLE_VORGAENGE_ANGENOMMEN) || (apiRootResource | hasLink: apiRootLinkRel.MEINE_VORGAENGE_NEU)" data-test-id="vorgang-angenommen-view"> + <goofy-client-vorgang-angenommen-view-item-container *ngIf="apiRootResource | hasAnyLink: apiRootLinkRel.ALLE_VORGAENGE_ANGENOMMEN: apiRootLinkRel.MEINE_VORGAENGE_ANGENOMMEN" data-test-id="vorgang-angenommen-view"> </goofy-client-vorgang-angenommen-view-item-container> - <goofy-client-vorgang-in-bearbeitung-view-item-container *ngIf="(apiRootResource | hasLink: apiRootLinkRel.ALLE_VORGAENGE_IN_BEARBEITUNG) || (apiRootResource | hasLink: apiRootLinkRel.MEINE_VORGAENGE_NEU)" data-test-id="vorgang-in-bearbeitung-view"> + <goofy-client-vorgang-in-bearbeitung-view-item-container *ngIf="apiRootResource | hasAnyLink: apiRootLinkRel.ALLE_VORGAENGE_IN_BEARBEITUNG: apiRootLinkRel.MEINE_VORGAENGE_IN_BEARBEITUNG" data-test-id="vorgang-in-bearbeitung-view"> </goofy-client-vorgang-in-bearbeitung-view-item-container> - <goofy-client-vorgang-beschieden-view-item-container *ngIf="(apiRootResource | hasLink: apiRootLinkRel.ALLE_VORGAENGE_BESCHIEDEN) || (apiRootResource | hasLink: apiRootLinkRel.MEINE_VORGAENGE_NEU)" data-test-id="vorgang-beschieden-view"> + <goofy-client-vorgang-beschieden-view-item-container *ngIf="apiRootResource | hasAnyLink: apiRootLinkRel.ALLE_VORGAENGE_BESCHIEDEN: apiRootLinkRel.MEINE_VORGAENGE_BESCHIEDEN" data-test-id="vorgang-beschieden-view"> </goofy-client-vorgang-beschieden-view-item-container> - <goofy-client-vorgang-abgeschlossen-view-item-container *ngIf="(apiRootResource | hasLink: apiRootLinkRel.ALLE_VORGAENGE_ABGESCHLOSSEN) || (apiRootResource | hasLink: apiRootLinkRel.MEINE_VORGAENGE_NEU)" data-test-id="vorgang-abgeschlossen-view"> + <goofy-client-vorgang-abgeschlossen-view-item-container *ngIf="apiRootResource | hasAnyLink: apiRootLinkRel.ALLE_VORGAENGE_ABGESCHLOSSEN: apiRootLinkRel.MEINE_VORGAENGE_ABGESCHLOSSEN" data-test-id="vorgang-abgeschlossen-view"> </goofy-client-vorgang-abgeschlossen-view-item-container> - <goofy-client-vorgang-verworfen-view-item-container *ngIf="(apiRootResource | hasLink: apiRootLinkRel.ALLE_VORGAENGE_VERWORFEN) || (apiRootResource | hasLink: apiRootLinkRel.MEINE_VORGAENGE_NEU)" data-test-id="vorgang-verworfen-view"> + <goofy-client-vorgang-verworfen-view-item-container *ngIf="apiRootResource | hasAnyLink: apiRootLinkRel.ALLE_VORGAENGE_VERWORFEN: apiRootLinkRel.MEINE_VORGAENGE_VERWORFEN" data-test-id="vorgang-verworfen-view"> </goofy-client-vorgang-verworfen-view-item-container> - <goofy-client-vorgang-list-view-item-container *ngIf="apiRootResource | hasLink: apiRootLinkRel.ALLE_VORGAENGE" data-test-id="vorgang-vorgang-list-view" class="top-border"> + <goofy-client-vorgang-list-view-item-container *ngIf="apiRootResource | hasAnyLink: apiRootLinkRel.ALLE_VORGAENGE: apiRootLinkRel.MEINE_VORGAENGE" data-test-id="vorgang-vorgang-list-view" class="top-border"> </goofy-client-vorgang-list-view-item-container> - <goofy-client-vorgang-search-view-item-container *ngIf="(apiRootResource | hasLink: apiRootLinkRel.SEARCH_ALLE) || (apiRootResource | hasLink: apiRootLinkRel.SEARCH_MEINE)" data-test-id="vorgang-search-view" class="top-border"> + <goofy-client-vorgang-search-view-item-container *ngIf="apiRootResource | hasAnyLink: apiRootLinkRel.SEARCH_ALLE: apiRootLinkRel.SEARCH_MEINE" data-test-id="vorgang-search-view" class="top-border"> </goofy-client-vorgang-search-view-item-container> </div> \ No newline at end of file diff --git a/goofy-client/libs/vorgang/src/lib/vorgang-list-page/vorgang-views-menu/vorgang-views-menu.component.spec.ts b/goofy-client/libs/vorgang/src/lib/vorgang-list-page/vorgang-views-menu/vorgang-views-menu.component.spec.ts index dbabc1b5d23e9d8e0d3b765fcd23e3ca9675e7a0..374f443fa918361f7a897e16553b20ff48399464 100644 --- a/goofy-client/libs/vorgang/src/lib/vorgang-list-page/vorgang-views-menu/vorgang-views-menu.component.spec.ts +++ b/goofy-client/libs/vorgang/src/lib/vorgang-list-page/vorgang-views-menu/vorgang-views-menu.component.spec.ts @@ -24,7 +24,7 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { ApiRootLinkRel } from '@goofy-client/api-root-shared'; import { HasLinkPipe } from '@goofy-client/tech-shared'; -import { getElementFromFixture } from '@goofy-client/test-utils'; +import { existsAsHtmlElement, notExistsAsHtmlElement } from '@goofy-client/test-utils'; import { createApiRootResource } from 'libs/api-root-shared/test/api-root'; import { HasAnyLinkPipe } from 'libs/tech-shared/src/lib/pipe/has-any-link.pipe'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; @@ -43,9 +43,14 @@ describe('VorgangViewsMenuComponent', () => { let component: VorgangViewsMenuComponent; let fixture: ComponentFixture<VorgangViewsMenuComponent>; + const neuView: string = getDataTestIdOf('vorgang-neu-view'); + const angenommenView: string = getDataTestIdOf('vorgang-angenommen-view'); + const inBearbeitungView: string = getDataTestIdOf('vorgang-in-bearbeitung-view'); + const beschiedenView: string = getDataTestIdOf('vorgang-beschieden-view'); + const abgeschlossenView: string = getDataTestIdOf('vorgang-abgeschlossen-view'); + const verworfenView: string = getDataTestIdOf('vorgang-verworfen-view'); const vorgangListView: string = getDataTestIdOf('vorgang-vorgang-list-view'); const searchView: string = getDataTestIdOf('vorgang-search-view'); - const neuView: string = getDataTestIdOf('vorgang-neu-view'); beforeEach(async () => { await TestBed.configureTestingModule({ @@ -75,83 +80,137 @@ describe('VorgangViewsMenuComponent', () => { describe('neu view', () => { - it('should show if ' + ApiRootLinkRel.ALLE_VORGAENGE_NEU + ' link exists', () => { - component.apiRootResource = createApiRootResource([ApiRootLinkRel.ALLE_VORGAENGE_NEU]); + it.each([ApiRootLinkRel.ALLE_VORGAENGE_NEU, ApiRootLinkRel.MEINE_VORGAENGE_NEU])('should show if %s link exists', (linkRel: string) => { + component.apiRootResource = createApiRootResource([linkRel]); fixture.detectChanges(); - const element = getElementFromFixture(fixture, neuView); - - expect(element).toBeInstanceOf(HTMLElement); + existsAsHtmlElement(fixture, neuView); }) - it('should show if ' + ApiRootLinkRel.ALLE_VORGAENGE_NEU + ' link exists', () => { - component.apiRootResource = createApiRootResource([ApiRootLinkRel.MEINE_VORGAENGE_NEU]); + it('should hide if both links not exists', () => { + component.apiRootResource = createApiRootResource(); fixture.detectChanges(); - const element = getElementFromFixture(fixture, neuView); + notExistsAsHtmlElement(fixture, neuView); + }) + }) + + describe('angenommen view', () => { - expect(element).toBeInstanceOf(HTMLElement); + it.each([ApiRootLinkRel.ALLE_VORGAENGE_ANGENOMMEN, ApiRootLinkRel.MEINE_VORGAENGE_ANGENOMMEN])('should show if %s link exists', (linkRel: string) => { + component.apiRootResource = createApiRootResource([linkRel]); + fixture.detectChanges(); + + existsAsHtmlElement(fixture, angenommenView); }) it('should hide if both links not exists', () => { component.apiRootResource = createApiRootResource(); fixture.detectChanges(); - const element = getElementFromFixture(fixture, neuView); - - expect(element).not.toBeInstanceOf(HTMLElement); + notExistsAsHtmlElement(fixture, angenommenView); }) }) + describe('in bearbeitung view', () => { - describe('vorgangList view', () => { + it.each([ApiRootLinkRel.ALLE_VORGAENGE_IN_BEARBEITUNG, ApiRootLinkRel.MEINE_VORGAENGE_IN_BEARBEITUNG])('should show if %s link exists', (linkRel: string) => { + component.apiRootResource = createApiRootResource([linkRel]); + fixture.detectChanges(); + + existsAsHtmlElement(fixture, inBearbeitungView); + }) - it('should show if link exists', () => { - component.apiRootResource = createApiRootResource([ApiRootLinkRel.ALLE_VORGAENGE]); + it('should hide if both links not exists', () => { + component.apiRootResource = createApiRootResource(); fixture.detectChanges(); - const element = getElementFromFixture(fixture, vorgangListView); + notExistsAsHtmlElement(fixture, inBearbeitungView); + }) + }) + + describe('beschieden view', () => { + + it.each([ApiRootLinkRel.ALLE_VORGAENGE_BESCHIEDEN, ApiRootLinkRel.MEINE_VORGAENGE_BESCHIEDEN])('should show if %s link exists', (linkRel: string) => { + component.apiRootResource = createApiRootResource([linkRel]); + fixture.detectChanges(); - expect(element).toBeInstanceOf(HTMLElement); + existsAsHtmlElement(fixture, beschiedenView); }) - it('should hide if link not exists', () => { + it('should hide if both links not exists', () => { component.apiRootResource = createApiRootResource(); fixture.detectChanges(); - const element = getElementFromFixture(fixture, vorgangListView); + notExistsAsHtmlElement(fixture, beschiedenView); + }) + }) + + describe('abgeschlossen view', () => { + + it.each([ApiRootLinkRel.ALLE_VORGAENGE_ABGESCHLOSSEN, ApiRootLinkRel.MEINE_VORGAENGE_ABGESCHLOSSEN])('should show if %s link exists', (linkRel: string) => { + component.apiRootResource = createApiRootResource([linkRel]); + fixture.detectChanges(); - expect(element).not.toBeInstanceOf(HTMLElement); + existsAsHtmlElement(fixture, abgeschlossenView); + }) + + it('should hide if both links not exists', () => { + component.apiRootResource = createApiRootResource(); + fixture.detectChanges(); + + notExistsAsHtmlElement(fixture, beschiedenView); }) }) - describe('search view', () => { + describe('verworfen view', () => { - it('should show if ' + ApiRootLinkRel.SEARCH_ALLE + ' link exists', () => { - component.apiRootResource = createApiRootResource([ApiRootLinkRel.SEARCH_ALLE]); + it.each([ApiRootLinkRel.ALLE_VORGAENGE_VERWORFEN, ApiRootLinkRel.MEINE_VORGAENGE_VERWORFEN])('should show if %s link exists', (linkRel: string) => { + component.apiRootResource = createApiRootResource([linkRel]); fixture.detectChanges(); - const element = getElementFromFixture(fixture, searchView); + existsAsHtmlElement(fixture, verworfenView); + }) + + it('should hide if both links not exists', () => { + component.apiRootResource = createApiRootResource(); + fixture.detectChanges(); + + notExistsAsHtmlElement(fixture, verworfenView); + }) + }) + + describe('vorgangList view', () => { - expect(element).toBeInstanceOf(HTMLElement); + it.each([ApiRootLinkRel.ALLE_VORGAENGE, ApiRootLinkRel.MEINE_VORGAENGE])('should show if %s link exists', (linkRel: string) => { + component.apiRootResource = createApiRootResource([linkRel]); + fixture.detectChanges(); + + existsAsHtmlElement(fixture, vorgangListView); }) - it('should show if ' + ApiRootLinkRel.SEARCH_MEINE + ' link exists', () => { - component.apiRootResource = createApiRootResource([ApiRootLinkRel.SEARCH_MEINE]); + it('should hide if link not exists', () => { + component.apiRootResource = createApiRootResource(); fixture.detectChanges(); - const element = getElementFromFixture(fixture, searchView); + notExistsAsHtmlElement(fixture, vorgangListView); + }) + }) + + describe('search view', () => { - expect(element).toBeInstanceOf(HTMLElement); + it.each([ApiRootLinkRel.SEARCH_ALLE, ApiRootLinkRel.SEARCH_MEINE])('should show if %s link exists', (linkRel: string) => { + component.apiRootResource = createApiRootResource([linkRel]); + fixture.detectChanges(); + + existsAsHtmlElement(fixture, searchView); }) it('should hide if no link not exists', () => { component.apiRootResource = createApiRootResource(); fixture.detectChanges(); - const element = getElementFromFixture(fixture, searchView); - - expect(element).not.toBeInstanceOf(HTMLElement); + notExistsAsHtmlElement(fixture, searchView); }) }) });