diff --git a/projects/aca-content/src/lib/components/search/search-save/sidenav/save-search-sidenav.component.spec.ts b/projects/aca-content/src/lib/components/search/search-save/sidenav/save-search-sidenav.component.spec.ts index b0ed2b840..56294119f 100644 --- a/projects/aca-content/src/lib/components/search/search-save/sidenav/save-search-sidenav.component.spec.ts +++ b/projects/aca-content/src/lib/components/search/search-save/sidenav/save-search-sidenav.component.spec.ts @@ -22,18 +22,30 @@ * from Hyland Software. If not, see . */ -import { ComponentFixture, fakeAsync, TestBed, tick } from '@angular/core/testing'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; import { SaveSearchSidenavComponent } from './save-search-sidenav.component'; import { AppTestingModule } from '../../../../testing/app-testing.module'; +import { EventEmitter } from '@angular/core'; import { Observable, of } from 'rxjs'; import { SavedSearchesContextService } from '../../../../services/saved-searches-context.service'; import { SavedSearch } from '@alfresco/adf-content-services'; import { NavBarLinkRef } from '@alfresco/adf-extensions'; +import { TranslationService } from '@alfresco/adf-core'; +import { LangChangeEvent } from '@ngx-translate/core'; + +interface TranslationServiceMock { + instant: jasmine.Spy<(key: string) => string>; + translate: { + onLangChange: EventEmitter; + }; +} describe('SaveSearchSidenavComponent', () => { let fixture: ComponentFixture; let component: SaveSearchSidenavComponent; let savedSearchesService: SavedSearchesContextService; + let translationServiceMock: TranslationServiceMock; + const langChangeEmitter = new EventEmitter(); beforeEach(() => { const mockService: Partial = { @@ -43,12 +55,24 @@ describe('SaveSearchSidenavComponent', () => { return of([]); } }; + + translationServiceMock = { + instant: jasmine.createSpy('instant').and.callFake((key: string) => key), + translate: { + onLangChange: langChangeEmitter + } + }; + TestBed.configureTestingModule({ imports: [AppTestingModule, SaveSearchSidenavComponent], providers: [ { provide: SavedSearchesContextService, useValue: mockService + }, + { + provide: TranslationService, + useValue: translationServiceMock } ] }); @@ -81,11 +105,11 @@ describe('SaveSearchSidenavComponent', () => { }); }); - it('should set navbar object with children is searches are saved', fakeAsync(() => { + it('should set navbar object with children if searches are saved', () => { spyOnProperty(savedSearchesService, 'savedSearches$', 'get').and.returnValue(of([{ name: '1', order: 0, encodedUrl: 'abc' }])); component.ngOnInit(); fixture.detectChanges(); - tick(100); + expect(component.item.children[0]).toEqual({ icon: '', title: '1', @@ -94,7 +118,19 @@ describe('SaveSearchSidenavComponent', () => { url: 'search?q=abc', id: 'search1' }); - })); + }); + + it('should update title when language changes', () => { + spyOnProperty(savedSearchesService, 'savedSearches$', 'get').and.returnValue(of([{ name: '1', order: 0, encodedUrl: 'abc' }])); + translationServiceMock.instant.and.returnValue('Translated Title (1)'); + + component.ngOnInit(); + fixture.detectChanges(); + + langChangeEmitter.emit({ lang: 'de', translations: {} }); + + expect(component.item.title).toBe('Translated Title (1)'); + }); describe('onActionClicked', () => { beforeEach(() => { diff --git a/projects/aca-content/src/lib/components/search/search-save/sidenav/save-search-sidenav.component.ts b/projects/aca-content/src/lib/components/search/search-save/sidenav/save-search-sidenav.component.ts index bf14f5eb2..08e73ed85 100644 --- a/projects/aca-content/src/lib/components/search/search-save/sidenav/save-search-sidenav.component.ts +++ b/projects/aca-content/src/lib/components/search/search-save/sidenav/save-search-sidenav.component.ts @@ -24,11 +24,10 @@ import { Component, DestroyRef, inject, OnInit, ViewEncapsulation } from '@angular/core'; import { SavedSearch } from '@alfresco/adf-content-services'; -import { TranslationService, UserPreferencesService, UserPreferenceValues } from '@alfresco/adf-core'; +import { TranslationService } from '@alfresco/adf-core'; import { NavBarLinkRef } from '@alfresco/adf-extensions'; import { ExpandMenuComponent } from '../../../sidenav/components/expand-menu.component'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; -import { delay } from 'rxjs/operators'; import { SavedSearchesContextService } from '../../../../services/saved-searches-context.service'; @Component({ @@ -47,7 +46,6 @@ export class SaveSearchSidenavComponent implements OnInit { private readonly manageSearchesId = 'manage-saved-searches'; private readonly destroyRef = inject(DestroyRef); - private readonly userPreferenceService = inject(UserPreferencesService); ngOnInit() { this.savedSearchesService.init(); @@ -56,14 +54,11 @@ export class SaveSearchSidenavComponent implements OnInit { this.savedSearchCount = savedSearches.length; this.savedSearches = savedSearches; }); - this.userPreferenceService - .select(UserPreferenceValues.Locale) - .pipe(takeUntilDestroyed(this.destroyRef), delay(10)) - .subscribe(() => { - if (this.item) { - this.item.title = this.translationService.instant('APP.BROWSE.SEARCH.SAVE_SEARCH.NAVBAR.TITLE', { number: this.savedSearchCount }); - } - }); + this.translationService.translate.onLangChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => { + if (this.item) { + this.item.title = this.translationService.instant('APP.BROWSE.SEARCH.SAVE_SEARCH.NAVBAR.TITLE', { number: this.savedSearchCount }); + } + }); } onActionClicked(selectedLinkRef: NavBarLinkRef): void {