/*! * Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved. * * Alfresco Example Content Application * * This file is part of the Alfresco Example Content Application. * If the software was purchased under a paid Alfresco license, the terms of * the paid license agreement will prevail. Otherwise, the software is * provided under the following open source license terms: * * The Alfresco Example Content Application is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The Alfresco Example Content Application is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * from Hyland Software. If not, see . */ import { Component } from '@angular/core'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { AppTestingModule } from '../../../testing/app-testing.module'; import { NavigationEnd, Router } from '@angular/router'; import { Subject } from 'rxjs'; import { ActiveLinkDirective } from './active-link.directive'; import { ActionDirective } from './action.directive'; @Component({ imports: [ActiveLinkDirective, ActionDirective], selector: 'app-test-component', template: ` ` }) class TestComponent { item = { route: 'dummy' }; } class MockRouter { private subject = new Subject(); events = this.subject.asObservable(); url = ''; navigateByUrl(url: string) { const navigationEnd = new NavigationEnd(0, '', url); this.subject.next(navigationEnd); } } describe('ActionDirective', () => { let fixture: ComponentFixture; let router: Router; beforeEach(() => { TestBed.configureTestingModule({ imports: [AppTestingModule, ActiveLinkDirective, TestComponent], providers: [ { provide: Router, useClass: MockRouter } ] }); fixture = TestBed.createComponent(TestComponent); router = TestBed.inject(Router); }); it('should add active route class name', () => { fixture.detectChanges(); router.navigateByUrl('/dummy'); expect(document.body.querySelector('#test-element').className.includes('active-link-class')).toBe(true); }); it('should remove class name if route not active', () => { fixture.detectChanges(); router.navigateByUrl('/dummy'); expect(document.body.querySelector('#test-element').className.includes('active-link-class')).toBe(true); router.navigateByUrl('/other'); expect(document.body.querySelector('#test-element').className.includes('active-link-class')).not.toBe(true); }); });