Newer
Older
* Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den
* Ministerpräsidenten des Landes Schleswig-Holstein
* Staatskanzlei
* Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
*
* Lizenziert unter der EUPL, Version 1.2 oder - sobald
* diese von der Europäischen Kommission genehmigt wurden -
* Folgeversionen der EUPL ("Lizenz");
* Sie dürfen dieses Werk ausschließlich gemäß
* dieser Lizenz nutzen.
* Eine Kopie der Lizenz finden Sie hier:
*
* https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
*
* Sofern nicht durch anwendbare Rechtsvorschriften
* gefordert oder in schriftlicher Form vereinbart, wird
* die unter der Lizenz verbreitete Software "so wie sie
* ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
* ausdrücklich oder stillschweigend - verbreitet.
* Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen.
*/
import { createStateResource } from '@alfa-client/tech-shared';
import { dispatchEventFromFixture, getElementComponentFromFixtureByCss, mock, useFromMock } from '@alfa-client/test-utils';
import { UserIconComponent } from '@alfa-client/user-profile';
import { getUserName, UserProfileResource } from '@alfa-client/user-profile-shared';
import { EventEmitter } from '@angular/core';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { MatIcon } from '@angular/material/icon';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { DropdownMenuButtonItemComponent, DropdownMenuComponent, LogoutIconComponent } from '@ods/system';
import { getDataTestIdAttributeOf, getDataTestIdOf } from 'libs/tech-shared/test/data-test';
import { createUserProfileResource } from 'libs/user-profile-shared/test/user-profile';
import { MockComponent } from 'ng-mocks';
import { UserProfileInHeaderComponent } from './user-profile-in-header.component';
describe('UserProfileInHeaderComponent', () => {
let component: UserProfileInHeaderComponent;
let fixture: ComponentFixture<UserProfileInHeaderComponent>;
const logoutButton: string = getDataTestIdAttributeOf('logout-button');
const userIconDropDownMenu: string = getDataTestIdOf('user-icon-dropdown-menu');
const userProfile: UserProfileResource = createUserProfileResource();
beforeEach(async () => {
await TestBed.configureTestingModule({
declarations: [
UserProfileInHeaderComponent,
MatIcon,
MockComponent(UserIconComponent),
MockComponent(DropdownMenuComponent),
MockComponent(DropdownMenuButtonItemComponent),
MockComponent(LogoutIconComponent),
imports: [NoopAnimationsModule],
fixture = TestBed.createComponent(UserProfileInHeaderComponent);
component = fixture.componentInstance;
component.currentUserResource = createStateResource(userProfile);
component.logoutEmitter = useFromMock(mock(EventEmitter<void>));
it('should create', () => {
expect(component).toBeTruthy();
});
describe('component', () => {
describe('buttonLabel', () => {
it('should contain user name', () => {
const label: string = 'Benutzerkonto von ' + getUserName(component.currentUserResource.resource);
expect(component.buttonLabel).toBe(label);
});
it('should not contain user name', () => {
component.currentUserResource = null;
const label: string = 'Benutzerkonto';
expect(component.buttonLabel).toBe(label);
});
describe('click on logout button', () => {
it('should emit logout event', () => {
dispatchEventFromFixture(fixture, logoutButton, 'itemClicked');
expect(component.logoutEmitter.emit).toHaveBeenCalled();
});
it('should have user name inside aria label', () => {
const buttonLabel: string = 'Benutzerkonto label';
jest.spyOn(component, 'buttonLabel', 'get').mockReturnValue(buttonLabel);
fixture.detectChanges();
const abmeldenDropDownButton: DropdownMenuComponent = getElementComponentFromFixtureByCss(fixture, userIconDropDownMenu);
expect(abmeldenDropDownButton.label).toEqual(buttonLabel);
});
it('should not have user name inside aria label if no user loaded', () => {
component.currentUserResource = null;
fixture.detectChanges();
const abmeldenDropDownButton: DropdownMenuComponent = getElementComponentFromFixtureByCss(fixture, userIconDropDownMenu);
expect(abmeldenDropDownButton.label).toEqual('Benutzerkonto');