From f3c4680c2ccb8c5b2d8a8619e8d86051fd5997d7 Mon Sep 17 00:00:00 2001 From: Vito Date: Thu, 25 Feb 2021 21:50:31 +0000 Subject: [PATCH] [ADF-5344] - fixed counter for custom aspects (#6727) --- .../aspect-list-dialog.component.spec.ts | 36 +++++++++++++++++-- .../aspect-list/aspect-list.component.spec.ts | 24 ++++++++++++- .../lib/aspect-list/aspect-list.component.ts | 15 +++++--- 3 files changed, 67 insertions(+), 8 deletions(-) diff --git a/lib/content-services/src/lib/aspect-list/aspect-list-dialog.component.spec.ts b/lib/content-services/src/lib/aspect-list/aspect-list-dialog.component.spec.ts index b09d6e6fe6..02a5d40c95 100644 --- a/lib/content-services/src/lib/aspect-list/aspect-list-dialog.component.spec.ts +++ b/lib/content-services/src/lib/aspect-list/aspect-list-dialog.component.spec.ts @@ -68,6 +68,27 @@ const aspectListMock: AspectEntry[] = [{ } }]; +const customAspectListMock: AspectEntry[] = [{ + entry: { + parentId: 'cst:customAspect', + id: 'cst:customAspect', + description: 'Custom Aspect with random description', + title: 'CustomAspect', + properties: [ + { + id: 'channelPassword', + title: 'The authenticated channel password', + dataType: 'd:propA' + }, + { + id: 'channelUsername', + title: 'The authenticated channel username', + dataType: 'd:propB' + } + ] + } +}]; + describe('AspectListDialogComponent', () => { let fixture: ComponentFixture; let aspectListService: AspectListService; @@ -246,9 +267,10 @@ describe('AspectListDialogComponent', () => { beforeEach(async () => { aspectListService = TestBed.inject(AspectListService); nodeService = TestBed.inject(NodesApiService); - spyOn(aspectListService, 'getAspects').and.returnValue(of(aspectListMock)); + spyOn(aspectListService, 'getAspects').and.returnValue(of([...aspectListMock, ...customAspectListMock])); spyOn(aspectListService, 'getVisibleAspects').and.returnValue(['frs:AspectOne']); - spyOn(nodeService, 'getNode').and.returnValue(of({ id: 'fake-node-id', aspectNames: ['frs:AspectOne'] }).pipe(delay(0))); + spyOn(aspectListService, 'getCustomAspects').and.returnValue(of(customAspectListMock)); + spyOn(nodeService, 'getNode').and.returnValue(of({ id: 'fake-node-id', aspectNames: ['frs:AspectOne', 'cst:customAspect'] }).pipe(delay(0))); fixture = TestBed.createComponent(AspectListDialogComponent); fixture.componentInstance.data.select = new Subject(); fixture.detectChanges(); @@ -266,6 +288,16 @@ describe('AspectListDialogComponent', () => { expect(firstAspectCheckbox).toBeDefined(); expect(firstAspectCheckbox).not.toBeNull(); expect(firstAspectCheckbox.checked).toBeTruthy(); + + const notCheckedAspect: HTMLInputElement = fixture.nativeElement.querySelector('#aspect-list-1-check-input'); + expect(notCheckedAspect).toBeDefined(); + expect(notCheckedAspect).not.toBeNull(); + expect(notCheckedAspect.checked).toBeFalsy(); + + const customAspectCheckbox: HTMLInputElement = fixture.nativeElement.querySelector('#aspect-list-2-check-input'); + expect(customAspectCheckbox).toBeDefined(); + expect(customAspectCheckbox).not.toBeNull(); + expect(customAspectCheckbox.checked).toBeTruthy(); }); }); diff --git a/lib/content-services/src/lib/aspect-list/aspect-list.component.spec.ts b/lib/content-services/src/lib/aspect-list/aspect-list.component.spec.ts index 7c528ef776..fb419e1e65 100644 --- a/lib/content-services/src/lib/aspect-list/aspect-list.component.spec.ts +++ b/lib/content-services/src/lib/aspect-list/aspect-list.component.spec.ts @@ -66,6 +66,27 @@ const aspectListMock: AspectEntry[] = [{ } }]; +const customAspectListMock: AspectEntry[] = [{ + entry: { + parentId: 'cst:customAspect', + id: 'cst:customAspect', + description: 'Custom Aspect with random description', + title: 'CustomAspect', + properties: [ + { + id: 'channelPassword', + title: 'The authenticated channel password', + dataType: 'd:propA' + }, + { + id: 'channelUsername', + title: 'The authenticated channel username', + dataType: 'd:propB' + } + ] + } +}]; + describe('AspectListComponent', () => { let component: AspectListComponent; @@ -107,7 +128,8 @@ describe('AspectListComponent', () => { fixture = TestBed.createComponent(AspectListComponent); component = fixture.componentInstance; aspectListService = TestBed.inject(AspectListService); - spyOn(aspectListService, 'getAspects').and.returnValue(of(aspectListMock)); + spyOn(aspectListService, 'getAspects').and.returnValue(of([...aspectListMock, ...customAspectListMock])); + spyOn(aspectListService, 'getCustomAspects').and.returnValue(of(customAspectListMock)); spyOn(aspectListService, 'getVisibleAspects').and.returnValue(['frs:AspectOne']); nodeService = TestBed.inject(NodesApiService); spyOn(nodeService, 'getNode').and.returnValue(of({ id: 'fake-node-id', aspectNames: ['frs:AspectOne'] })); diff --git a/lib/content-services/src/lib/aspect-list/aspect-list.component.ts b/lib/content-services/src/lib/aspect-list/aspect-list.component.ts index 3073bf3b73..70f4dc5eff 100644 --- a/lib/content-services/src/lib/aspect-list/aspect-list.component.ts +++ b/lib/content-services/src/lib/aspect-list/aspect-list.component.ts @@ -17,8 +17,8 @@ import { Component, EventEmitter, Input, OnDestroy, OnInit, Output, ViewEncapsulation } from '@angular/core'; import { NodesApiService } from '@alfresco/adf-core'; -import { Observable, Subject } from 'rxjs'; -import { concatMap, takeUntil, tap } from 'rxjs/operators'; +import { Observable, Subject, zip } from 'rxjs'; +import { concatMap, map, takeUntil, tap } from 'rxjs/operators'; import { AspectListService } from './aspect-list.service'; import { MatCheckboxChange } from '@angular/material/checkbox'; import { AspectEntry } from '@alfresco/js-api'; @@ -56,9 +56,14 @@ export class AspectListComponent implements OnInit, OnDestroy { ngOnInit(): void { if (this.nodeId) { - this.aspects$ = this.nodeApiService.getNode(this.nodeId).pipe( - tap((node) => { - this.nodeAspects = node.aspectNames.filter((aspect) => this.aspectListService.getVisibleAspects().includes(aspect)); + const node$ = this.nodeApiService.getNode(this.nodeId); + const customAspect$ = this.aspectListService.getCustomAspects() + .pipe(map( + (customAspects) => customAspects.flatMap((customAspect) => customAspect.entry.id) + )); + this.aspects$ = zip(node$, customAspect$).pipe( + tap(([node, customAspects]) => { + this.nodeAspects = node.aspectNames.filter((aspect) => this.aspectListService.getVisibleAspects().includes(aspect) || customAspects.includes(aspect)); this.nodeAspectStatus = Array.from(node.aspectNames); this.valueChanged.emit(this.nodeAspects); }),