mirror of
https://github.com/Alfresco/alfresco-content-app.git
synced 2025-07-24 17:31:52 +00:00
[ACS-6486] in breadcrumb the file title is not updating after editing (#4337)
* [ACS-6486] Update breadcrumb when file name is changed on details page * [ACS-6486] Added unit tests * [ACS-6486] Made injected services as readonly
This commit is contained in:
@@ -31,10 +31,10 @@ import { NO_ERRORS_SCHEMA } from '@angular/core';
|
||||
import { DefaultProjectorFn, MemoizedSelector, Store } from '@ngrx/store';
|
||||
import { ContentApiService } from '@alfresco/aca-shared';
|
||||
import { AppStore, isInfoDrawerOpened, NavigateToFolder, NavigateToPreviousPage, SetSelectedNodesAction } from '@alfresco/aca-shared/store';
|
||||
import { NodeEntry, PathElement } from '@alfresco/js-api';
|
||||
import { Node, NodeEntry, PathElement } from '@alfresco/js-api';
|
||||
import { RouterTestingModule } from '@angular/router/testing';
|
||||
import { AuthenticationService, CORE_PIPES, PageTitleService } from '@alfresco/adf-core';
|
||||
import { BreadcrumbComponent, ContentService, SearchQueryBuilderService } from '@alfresco/adf-content-services';
|
||||
import { BreadcrumbComponent, ContentService, NodesApiService, SearchQueryBuilderService } from '@alfresco/adf-content-services';
|
||||
import { By } from '@angular/platform-browser';
|
||||
import { ContentActionRef } from '@alfresco/adf-extensions';
|
||||
import { MatSnackBarModule } from '@angular/material/snack-bar';
|
||||
@@ -44,6 +44,7 @@ describe('DetailsComponent', () => {
|
||||
let fixture: ComponentFixture<DetailsComponent>;
|
||||
let contentApiService: ContentApiService;
|
||||
let contentService: ContentService;
|
||||
let nodesApiService: NodesApiService;
|
||||
let store: Store;
|
||||
let node: NodeEntry;
|
||||
|
||||
@@ -62,6 +63,8 @@ describe('DetailsComponent', () => {
|
||||
const mockAspectActionsSubject$ = new BehaviorSubject(mockAspectActions);
|
||||
extensionsServiceMock.getAllowedSidebarActions.and.returnValue(mockAspectActionsSubject$.asObservable());
|
||||
|
||||
const getBreadcrumb = (): BreadcrumbComponent => fixture.debugElement.query(By.directive(BreadcrumbComponent)).componentInstance;
|
||||
|
||||
beforeEach(() => {
|
||||
TestBed.configureTestingModule({
|
||||
imports: [AppTestingModule, DetailsComponent, ...CORE_PIPES, MatSnackBarModule],
|
||||
@@ -97,6 +100,7 @@ describe('DetailsComponent', () => {
|
||||
component = fixture.componentInstance;
|
||||
contentApiService = TestBed.inject(ContentApiService);
|
||||
contentService = TestBed.inject(ContentService);
|
||||
nodesApiService = TestBed.inject(NodesApiService);
|
||||
store = TestBed.inject(Store);
|
||||
storeMock.dispatch.calls.reset();
|
||||
|
||||
@@ -137,16 +141,29 @@ describe('DetailsComponent', () => {
|
||||
});
|
||||
|
||||
it('should dispatch navigation to a given folder', () => {
|
||||
const breadcrumbComponent: BreadcrumbComponent = fixture.debugElement.query(By.directive(BreadcrumbComponent)).componentInstance;
|
||||
const pathElement: PathElement = {
|
||||
id: 'fake-id'
|
||||
};
|
||||
breadcrumbComponent.navigate.emit(pathElement);
|
||||
getBreadcrumb().navigate.emit(pathElement);
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(store.dispatch).toHaveBeenCalledWith(new NavigateToFolder({ entry: pathElement } as NodeEntry));
|
||||
});
|
||||
|
||||
it('should pass different node as folderNode to breadcrumb when nodeUpdated from nodesApiService is triggered', () => {
|
||||
fixture.detectChanges();
|
||||
const breadcrumbComponent = getBreadcrumb();
|
||||
const updatedNode = {
|
||||
name: 'other node'
|
||||
} as Node;
|
||||
|
||||
nodesApiService.nodeUpdated.next(updatedNode);
|
||||
fixture.detectChanges();
|
||||
expect(breadcrumbComponent.folderNode).toEqual(updatedNode);
|
||||
expect(breadcrumbComponent.folderNode).not.toBe(updatedNode);
|
||||
expect(updatedNode).not.toEqual(node.entry);
|
||||
});
|
||||
|
||||
it('should dispatch node selection', () => {
|
||||
fixture.detectChanges();
|
||||
expect(store.dispatch).toHaveBeenCalledWith(new SetSelectedNodesAction([node]));
|
||||
|
@@ -27,7 +27,7 @@ import { ActivatedRoute, NavigationStart } from '@angular/router';
|
||||
import { ContentApiService, PageComponent, PageLayoutComponent, ToolbarComponent } from '@alfresco/aca-shared';
|
||||
import { NavigateToFolder, NavigateToPreviousPage, SetSelectedNodesAction } from '@alfresco/aca-shared/store';
|
||||
import { merge, Subject } from 'rxjs';
|
||||
import { BreadcrumbComponent, ContentService, PermissionListComponent } from '@alfresco/adf-content-services';
|
||||
import { BreadcrumbComponent, ContentService, NodesApiService, PermissionListComponent } from '@alfresco/adf-content-services';
|
||||
import { CommonModule } from '@angular/common';
|
||||
import { TranslateModule } from '@ngx-translate/core';
|
||||
import { MatIconModule } from '@angular/material/icon';
|
||||
@@ -40,6 +40,7 @@ import { NodeEntry, PathElement } from '@alfresco/js-api';
|
||||
import { first, takeUntil } from 'rxjs/operators';
|
||||
import { ContentActionRef } from '@alfresco/adf-extensions';
|
||||
import { FileSizePipe, InfoDrawerButtonsDirective } from '@alfresco/adf-core';
|
||||
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
||||
|
||||
@Component({
|
||||
standalone: true,
|
||||
@@ -74,7 +75,12 @@ export class DetailsComponent extends PageComponent implements OnInit, OnDestroy
|
||||
|
||||
private readonly onDestroy$: Subject<void> = new Subject<void>();
|
||||
|
||||
constructor(private route: ActivatedRoute, private contentApi: ContentApiService, private contentService: ContentService) {
|
||||
constructor(
|
||||
private readonly route: ActivatedRoute,
|
||||
private readonly contentApi: ContentApiService,
|
||||
private readonly contentService: ContentService,
|
||||
private readonly nodesApiService: NodesApiService
|
||||
) {
|
||||
super();
|
||||
}
|
||||
|
||||
@@ -84,6 +90,7 @@ export class DetailsComponent extends PageComponent implements OnInit, OnDestroy
|
||||
const { route } = this;
|
||||
const { data } = route.snapshot;
|
||||
this.title = data.title;
|
||||
this.nodesApiService.nodeUpdated.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((node) => (this.node = { ...node }));
|
||||
this.route.params.subscribe((params) => {
|
||||
this.isLoading = true;
|
||||
this.setActiveTab(params.activeTab);
|
||||
|
Reference in New Issue
Block a user