From 61a3e30c31548e2f708f4a8f059543e2c4396211 Mon Sep 17 00:00:00 2001 From: Kasia Biernat <1268696+kathrine0@users.noreply.github.com> Date: Wed, 25 Jan 2023 10:11:37 +0100 Subject: [PATCH] =?UTF-8?q?[AAE-12127]=20Test:=20The=20aspect=20added=20in?= =?UTF-8?q?=20config=20is=20displayed=20even=20if=20inc=E2=80=A6=20(#8158)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [AAE-12127] Test: The aspect added in config is displayed even if includeAll is set to false * [AAE-12128][AAE-12129][AAE-12131] content metadata tests * [AAE-12132][AAE-12133] content metadata exif tests * [AAE-12130] Test: The aspects excluded in config are not displayed when includeAll is set to true --- .../content-metadata.component.spec.ts | 267 +++++++++++- .../services/content-metadata.service.spec.ts | 379 ++++++++++++++---- 2 files changed, 564 insertions(+), 82 deletions(-) diff --git a/lib/content-services/src/lib/content-metadata/components/content-metadata/content-metadata.component.spec.ts b/lib/content-services/src/lib/content-metadata/components/content-metadata/content-metadata.component.spec.ts index 70508655ca..d1ddcf0c49 100644 --- a/lib/content-services/src/lib/content-metadata/components/content-metadata/content-metadata.component.spec.ts +++ b/lib/content-services/src/lib/content-metadata/components/content-metadata/content-metadata.component.spec.ts @@ -18,18 +18,20 @@ import { ComponentFixture, TestBed, tick, fakeAsync } from '@angular/core/testing'; import { SimpleChange } from '@angular/core'; import { By } from '@angular/platform-browser'; -import { MinimalNode, Node } from '@alfresco/js-api'; +import { ClassesApi, MinimalNode, Node } from '@alfresco/js-api'; import { ContentMetadataComponent } from './content-metadata.component'; import { ContentMetadataService } from '../../services/content-metadata.service'; import { CardViewBaseItemModel, CardViewComponent, NodesApiService, - LogService, setupTestBed + LogService, setupTestBed, AppConfigService } from '@alfresco/adf-core'; import { throwError, of } from 'rxjs'; import { ContentTestingModule } from '../../../testing/content.testing.module'; import { mockGroupProperties } from './mock-data'; import { TranslateModule } from '@ngx-translate/core'; import { CardViewContentUpdateService } from '../../../common/services/card-view-content-update.service'; +import { PropertyGroup } from '../../interfaces/property-group.interface'; +import { PropertyDescriptorsService } from '../../services/property-descriptors.service'; describe('ContentMetadataComponent', () => { let component: ContentMetadataComponent; @@ -417,6 +419,267 @@ describe('ContentMetadataComponent', () => { }); }); + + describe('Display properties with aspect oriented config', () => { + let appConfig: AppConfigService; + let classesApi: ClassesApi; + let expectedNode: MinimalNode; + + const versionableResponse: PropertyGroup = { + name: 'cm:versionable', + title: 'Versionable', + properties: { + 'cm:autoVersion': { + title: 'Auto Version', + name: 'cm:autoVersion', + dataType: 'd:boolean', + mandatory: false, + multiValued: false + }, + 'cm:initialVersion': { + title: 'Initial Version', + name: 'cm:initialVersion', + dataType: 'd:boolean', + mandatory: false, + multiValued: false + }, + 'cm:versionType': { + title: 'Version Type', + name: 'cm:versionType', + dataType: 'd:text', + mandatory: false, + multiValued: false + } + } + }; + + const exifResponse: PropertyGroup = { + name: 'exif:exif', + title: 'Exif', + properties: { + 'exif:1': { + title: 'exif:1:id', + name: 'exif:1', + dataType: '', + mandatory: false, + multiValued: false + }, + 'exif:2': { + title: 'exif:2:id', + name: 'exif:2', + dataType: '', + mandatory: false, + multiValued: false + }, + 'exif:pixelXDimension': { + title: 'Image Width', + name: 'exif:pixelXDimension', + dataType: 'd:int', + mandatory: false, + multiValued: false + }, + 'exif:pixelYDimension': { + title: 'Image Height', + name: 'exif:pixelYDimension', + dataType: 'd:int', + mandatory: false, + multiValued: false + } + } + }; + + const setContentMetadataConfig = (presetName, presetConfig) => { + appConfig.config['content-metadata'] = { + presets: { + [presetName]: presetConfig + } + }; + }; + + beforeEach(() => { + appConfig = TestBed.inject(AppConfigService); + const propertyDescriptorsService = TestBed.inject( + PropertyDescriptorsService + ); + classesApi = propertyDescriptorsService['classesApi']; + expectedNode = { + ...node, + aspectNames: [ + 'rn:renditioned', + 'cm:versionable', + 'cm:titled', + 'cm:auditable', + 'cm:author', + 'cm:thumbnailModification', + 'exif:exif' + ], + name: 'some-modified-value', + properties: { + 'exif:pixelXDimension': 1024, + 'exif:pixelYDimension': 1024 + } + }; + + component.expanded = true; + component.preset = 'default'; + }); + + it('should show Versionable with given content-metadata config', async () => { + setContentMetadataConfig('default', { + includeAll: false, + 'cm:versionable': '*' + }); + + spyOn(classesApi, 'getClass').and.returnValue(Promise.resolve(versionableResponse)); + + component.ngOnChanges({ node: new SimpleChange(node, expectedNode, false) }); + fixture.detectChanges(); + + await component.groupedProperties$.toPromise(); + fixture.detectChanges(); + + const versionableProp = queryDom(fixture, 'Versionable'); + + expect(versionableProp).toBeTruthy(); + expect(classesApi.getClass).toHaveBeenCalledWith('cm_versionable'); + }); + + it('should show Versionable twice with given content-metadata config', async () => { + setContentMetadataConfig('default', { + includeAll: true, + 'cm:versionable': '*' + }); + + spyOn(classesApi, 'getClass').and.returnValue(Promise.resolve(versionableResponse)); + + component.ngOnChanges({ node: new SimpleChange(node, expectedNode, false) }); + fixture.detectChanges(); + + await component.groupedProperties$.toPromise(); + fixture.detectChanges(); + + const versionableProps = fixture.debugElement.queryAll(By.css('[data-automation-id="adf-metadata-group-Versionable"]')); + + expect(versionableProps.length).toEqual(2); + expect(classesApi.getClass).toHaveBeenCalledWith('cm_versionable'); + }); + + it('should not show Versionable with given content-metadata config', async () => { + setContentMetadataConfig('default', { + includeAll: true, + exclude: 'cm:versionable' + }); + + spyOn(classesApi, 'getClass').and.returnValue(Promise.resolve(versionableResponse)); + + component.ngOnChanges({ node: new SimpleChange(node, expectedNode, false) }); + fixture.detectChanges(); + + await component.groupedProperties$.toPromise(); + fixture.detectChanges(); + + const versionableProp = queryDom(fixture, 'Versionable'); + + expect(versionableProp).toBeNull(); + expect(classesApi.getClass).toHaveBeenCalledWith('cm_versionable'); + }); + + it('should not show Versionable when excluded and included set in content-metadata config', async () => { + setContentMetadataConfig('default', { + includeAll: true, + exclude: 'cm:versionable', + 'cm:versionable': '*' + }); + + spyOn(classesApi, 'getClass').and.returnValue(Promise.resolve(versionableResponse)); + + component.ngOnChanges({ node: new SimpleChange(node, expectedNode, false) }); + fixture.detectChanges(); + + await component.groupedProperties$.toPromise(); + fixture.detectChanges(); + + const versionableProp = queryDom(fixture, 'Versionable'); + + expect(versionableProp).toBeTruthy(); + expect(classesApi.getClass).toHaveBeenCalledWith('cm_versionable'); + }); + + it('should not show aspects excluded in content-metadata config', async () => { + setContentMetadataConfig('default', { + includeAll: true, + exclude: ['cm:versionable', 'cm:auditable'] + }); + + spyOn(classesApi, 'getClass').and.returnValue(Promise.resolve(versionableResponse)); + + component.ngOnChanges({ node: new SimpleChange(node, expectedNode, false) }); + fixture.detectChanges(); + + await component.groupedProperties$.toPromise(); + fixture.detectChanges(); + + const versionableProp = queryDom(fixture, 'Versionable'); + expect(versionableProp).toBeNull(); + + const auditableProp = queryDom(fixture, 'Auditable'); + expect(auditableProp).toBeNull(); + + expect(classesApi.getClass).toHaveBeenCalledWith('cm_versionable'); + expect(classesApi.getClass).toHaveBeenCalledWith('cm_auditable'); + }); + + it('should show Exif even when includeAll is set to false', async () => { + setContentMetadataConfig('default', { + includeAll: false, + 'exif:exif': ['exif:pixelXDimension', 'exif:pixelYDimension'] + }); + + spyOn(classesApi, 'getClass').and.returnValue(Promise.resolve(exifResponse)); + + component.ngOnChanges({ node: new SimpleChange(node, expectedNode, false) }); + fixture.detectChanges(); + + await component.groupedProperties$.toPromise(); + fixture.detectChanges(); + + const exifProp = queryDom(fixture, 'Exif'); + + expect(exifProp).toBeTruthy(); + expect(classesApi.getClass).toHaveBeenCalledWith('exif_exif'); + + exifProp.nativeElement.click(); + + const pixelXDimentionElement = fixture.debugElement.query(By.css('[data-automation-id="card-textitem-label-properties.exif:pixelXDimension"]')); + expect(pixelXDimentionElement).toBeTruthy(); + expect(pixelXDimentionElement.nativeElement.textContent.trim()).toEqual('Image Width'); + + const pixelYDimentionElement = fixture.debugElement.query(By.css('[data-automation-id="card-textitem-label-properties.exif:pixelYDimension"]')); + expect(pixelYDimentionElement).toBeTruthy(); + expect(pixelYDimentionElement.nativeElement.textContent.trim()).toEqual('Image Height'); + }); + + it('should show Exif twice when includeAll is set to true', async () => { + setContentMetadataConfig('default', { + includeAll: true, + 'exif:exif': ['exif:pixelXDimension', 'exif:pixelYDimension'] + }); + + spyOn(classesApi, 'getClass').and.returnValue(Promise.resolve(exifResponse)); + + component.ngOnChanges({ node: new SimpleChange(node, expectedNode, false) }); + fixture.detectChanges(); + + await component.groupedProperties$.toPromise(); + fixture.detectChanges(); + + const exifProps = fixture.debugElement.queryAll(By.css('[data-automation-id="adf-metadata-group-Exif"]')); + + expect(exifProps.length).toEqual(2); + expect(classesApi.getClass).toHaveBeenCalledWith('exif_exif'); + }); + }); + describe('Expand the panel', () => { let expectedNode: MinimalNode; diff --git a/lib/content-services/src/lib/content-metadata/services/content-metadata.service.spec.ts b/lib/content-services/src/lib/content-metadata/services/content-metadata.service.spec.ts index ca94669e11..d9842f1fa8 100644 --- a/lib/content-services/src/lib/content-metadata/services/content-metadata.service.spec.ts +++ b/lib/content-services/src/lib/content-metadata/services/content-metadata.service.spec.ts @@ -32,15 +32,30 @@ const fakeNode: Node = { isFile: true, aspectNames: ['exif:exif'], nodeType: 'fn:fakenode', - createdByUser: {displayName: 'test-user'}, - modifiedByUser: {displayName: 'test-user-modified'}, + createdByUser: { displayName: 'test-user' }, + modifiedByUser: { displayName: 'test-user-modified' }, properties: [] } as Node; -const fakeContentNode: Node = { name: 'Node Action', id: 'fake-id', nodeType: 'cm:content', isFile: true, aspectNames: [] } as Node; +const fakeContentNode: Node = { + name: 'Node Action', + id: 'fake-id', + nodeType: 'cm:content', + isFile: true, + aspectNames: [ + 'rn:renditioned', + 'cm:versionable', + 'cm:titled', + 'cm:auditable', + 'cm:author', + 'cm:thumbnailModification' + ], + createdByUser: { displayName: 'test-user' }, + modifiedByUser: { displayName: 'test-user-modified' }, + properties: [] +} as Node; describe('ContentMetaDataService', () => { - let service: ContentMetadataService; let classesApi: ClassesApi; let appConfig: AppConfigService; @@ -50,8 +65,34 @@ describe('ContentMetaDataService', () => { name: 'exif:exif', title: 'Exif', properties: { - 'exif:1': { title: 'exif:1:id', name: 'exif:1', dataType: '', mandatory: false, multiValued: false }, - 'exif:2': { title: 'exif:2:id', name: 'exif:2', dataType: '', mandatory: false, multiValued: false } + 'exif:1': { + title: 'exif:1:id', + name: 'exif:1', + dataType: '', + mandatory: false, + multiValued: false + }, + 'exif:2': { + title: 'exif:2:id', + name: 'exif:2', + dataType: '', + mandatory: false, + multiValued: false + }, + 'exif:pixelXDimension': { + title: 'Image Width', + name: 'exif:pixelXDimension', + dataType: 'd:int', + mandatory: false, + multiValued: false + }, + 'exif:pixelYDimension': { + title: 'Image Height', + name: 'exif:pixelYDimension', + dataType: 'd:int', + mandatory: false, + multiValued: false + } } }; @@ -59,15 +100,46 @@ describe('ContentMetaDataService', () => { name: 'cm:content', title: '', properties: { - 'cm:content': { title: 'cm:content:id', name: 'cm:content', dataType: '', mandatory: false, multiValued: false } + 'cm:content': { + title: 'cm:content:id', + name: 'cm:content', + dataType: '', + mandatory: false, + multiValued: false + } + } + }; + + const versionableResponse: PropertyGroup = { + name: 'cm:versionable', + title: 'Versionable', + properties: { + 'cm:autoVersion': { + title: 'Auto Version', + name: 'cm:autoVersion', + dataType: 'd:boolean', + mandatory: false, + multiValued: false + }, + 'cm:initialVersion': { + title: 'Initial Version', + name: 'cm:initialVersion', + dataType: 'd:boolean', + mandatory: false, + multiValued: false + }, + 'cm:versionType': { + title: 'Version Type', + name: 'cm:versionType', + dataType: 'd:text', + mandatory: false, + multiValued: false + } } }; setupTestBed({ - imports: [ - TranslateModule.forRoot(), - ContentTestingModule - ] + imports: [TranslateModule.forRoot(), ContentTestingModule] }); const setConfig = (presetName, presetConfig) => { @@ -81,83 +153,217 @@ describe('ContentMetaDataService', () => { beforeEach(() => { service = TestBed.inject(ContentMetadataService); contentPropertyService = TestBed.inject(ContentTypePropertiesService); - const propertyDescriptorsService = TestBed.inject(PropertyDescriptorsService); + const propertyDescriptorsService = TestBed.inject( + PropertyDescriptorsService + ); classesApi = propertyDescriptorsService['classesApi']; appConfig = TestBed.inject(AppConfigService); }); it('should return all the properties of the node', () => { - service.getBasicProperties(fakeNode).subscribe( - (res) => { - expect(res.length).toEqual(10); - expect(res[0].value).toEqual('Node'); - expect(res[1].value).toBeFalsy(); - expect(res[2].value).toBe('test-user'); - } - ); + service.getBasicProperties(fakeNode).subscribe((res) => { + expect(res.length).toEqual(10); + expect(res[0].value).toEqual('Node'); + expect(res[1].value).toBeFalsy(); + expect(res[2].value).toBe('test-user'); + }); }); it('should return the content type property', () => { - spyOn(contentPropertyService, 'getContentTypeCardItem').and.returnValue(of({ label: 'hello i am a weird content type'} as any)); - - service.getContentTypeProperty(fakeNode).subscribe( - (res: any) => { - expect(res).toBeDefined(); - expect(res).not.toBeNull(); - expect(res.label).toBe('hello i am a weird content type'); - } + spyOn(contentPropertyService, 'getContentTypeCardItem').and.returnValue( + of({ label: 'hello i am a weird content type' } as any) ); + + service.getContentTypeProperty(fakeNode).subscribe((res: any) => { + expect(res).toBeDefined(); + expect(res).not.toBeNull(); + expect(res.label).toBe('hello i am a weird content type'); + }); }); it('should trigger the opening of the content type dialog', () => { - spyOn(contentPropertyService, 'openContentTypeDialogConfirm').and.returnValue(of(true)); + spyOn( + contentPropertyService, + 'openContentTypeDialogConfirm' + ).and.returnValue(of(true)); - service.openConfirmDialog(fakeNode).subscribe( - () => { - expect(contentPropertyService.openContentTypeDialogConfirm).toHaveBeenCalledWith('fn:fakenode'); - } - ); + service.openConfirmDialog(fakeNode).subscribe(() => { + expect( + contentPropertyService.openContentTypeDialogConfirm + ).toHaveBeenCalledWith('fn:fakenode'); + }); }); describe('AspectOriented preset', () => { - - it('should return response with exif property', (done) => { + it('should return response with exif property', async () => { setConfig('default', { 'exif:exif': '*' }); - spyOn(classesApi, 'getClass').and.returnValue(Promise.resolve(exifResponse)); - - service.getGroupedProperties(fakeNode).subscribe( - (res) => { - expect(res.length).toEqual(1); - expect(res[0].title).toEqual('Exif'); - done(); - } + spyOn(classesApi, 'getClass').and.returnValue( + Promise.resolve(exifResponse) ); + const groupedProperties = await service.getGroupedProperties(fakeNode).toPromise(); + + expect(groupedProperties.length).toEqual(1); + expect(groupedProperties[0].title).toEqual('Exif'); + expect(classesApi.getClass).toHaveBeenCalledTimes(1); expect(classesApi.getClass).toHaveBeenCalledWith('exif_exif'); }); - it('should filter the record options for node ', (done) => { + it('should filter the record options for node ', async () => { setConfig('default', { 'exif:exif': '*', 'rma:record': '*' }); - spyOn(classesApi, 'getClass').and.returnValue(Promise.resolve(exifResponse)); - - service.getGroupedProperties(fakeNode).subscribe( - (res) => { - expect(res.length).toEqual(1); - expect(res[0].title).toEqual('Exif'); - done(); - } + spyOn(classesApi, 'getClass').and.returnValue( + Promise.resolve(exifResponse) ); + const groupedProperties = await service.getGroupedProperties(fakeNode).toPromise(); + + expect(groupedProperties.length).toEqual(1); + expect(groupedProperties[0].title).toEqual('Exif'); + expect(classesApi.getClass).toHaveBeenCalledTimes(1); expect(classesApi.getClass).toHaveBeenCalledWith('exif_exif'); }); - }); + + it('should return response with versionable property', async () => { + setConfig('default', { + includeAll: false, + 'cm:versionable': '*' + }); + + spyOn(classesApi, 'getClass').and.returnValue(Promise.resolve(versionableResponse)); + + const groupedProperties = await service.getGroupedProperties(fakeContentNode).toPromise(); + + expect(groupedProperties.length).toEqual(1); + expect(groupedProperties[0].title).toEqual('Versionable'); + + expect(classesApi.getClass).toHaveBeenCalledTimes(1); + expect(classesApi.getClass).toHaveBeenCalledWith('cm_versionable'); + }); + + it('should return response with versionable property twice', async () => { + setConfig('default', { + includeAll: true, + 'cm:versionable': '*' + }); + + spyOn(classesApi, 'getClass').and.returnValue(Promise.resolve(versionableResponse)); + + const groupedProperties = await service.getGroupedProperties(fakeContentNode).toPromise(); + + expect(groupedProperties.length).toEqual(2); + expect(groupedProperties[0].title).toEqual('Versionable'); + expect(groupedProperties[1].title).toEqual('Versionable'); + + expect(classesApi.getClass).toHaveBeenCalledTimes(1 + fakeContentNode.aspectNames.length); + expect(classesApi.getClass).toHaveBeenCalledWith('cm_versionable'); + }); + + it('should return response with versionable excluded', async () => { + setConfig('default', { + includeAll: true, + exclude: 'cm:versionable' + }); + + spyOn(classesApi, 'getClass').and.returnValue(Promise.resolve(versionableResponse)); + + const groupedProperties = await service.getGroupedProperties(fakeContentNode).toPromise(); + expect(groupedProperties.length).toEqual(0); + + expect(classesApi.getClass).toHaveBeenCalledTimes(1 + fakeContentNode.aspectNames.length); + expect(classesApi.getClass).toHaveBeenCalledWith('cm_versionable'); + }); + + it('should return response with versionable visible when excluded and included set', async () => { + setConfig('default', { + includeAll: true, + exclude: 'cm:versionable', + 'cm:versionable': '*' + }); + + spyOn(classesApi, 'getClass').and.returnValue(Promise.resolve(versionableResponse)); + + const groupedProperties = await service.getGroupedProperties(fakeContentNode).toPromise(); + expect(groupedProperties.length).toEqual(1); + expect(groupedProperties[0].title).toEqual('Versionable'); + + expect(classesApi.getClass).toHaveBeenCalledTimes(1 + fakeContentNode.aspectNames.length); + expect(classesApi.getClass).toHaveBeenCalledWith('cm_versionable'); + }); + + it('should not show aspects excluded in content-metadata config', async () => { + setConfig('default', { + includeAll: true, + exclude: ['cm:versionable', 'cm:auditable'] + }); + + spyOn(classesApi, 'getClass').and.returnValue(Promise.resolve(versionableResponse)); + + const groupedProperties = await service.getGroupedProperties(fakeContentNode).toPromise(); + expect(groupedProperties.length).toEqual(0); + + expect(classesApi.getClass).toHaveBeenCalledTimes(1 + fakeContentNode.aspectNames.length); + expect(classesApi.getClass).toHaveBeenCalledWith('cm_versionable'); + expect(classesApi.getClass).toHaveBeenCalledWith('cm_auditable'); + }); + + it('should return response with exif visible even when includeAll is set to false', async () => { + setConfig('default', { + includeAll: false, + 'exif:exif': ['exif:pixelXDimension', 'exif:pixelYDimension'] + }); + + spyOn(classesApi, 'getClass').and.returnValue( + Promise.resolve(exifResponse) + ); + + const groupedProperties = await service.getGroupedProperties(fakeNode).toPromise(); + + expect(groupedProperties.length).toEqual(1); + expect(groupedProperties[0].title).toEqual('Exif'); + expect(groupedProperties[0].properties.length).toEqual(2); + expect(groupedProperties[0].properties[0].label).toEqual('Image Width'); + expect(groupedProperties[0].properties[1].label).toEqual('Image Height'); + + expect(classesApi.getClass).toHaveBeenCalledTimes(1); + expect(classesApi.getClass).toHaveBeenCalledWith('exif_exif'); + }); + + it('should return response with exif visible twice when includeAll is set to true', async () => { + setConfig('default', { + includeAll: true, + 'exif:exif': ['exif:pixelXDimension', 'exif:pixelYDimension'] + }); + + spyOn(classesApi, 'getClass').and.returnValue( + Promise.resolve(exifResponse) + ); + + const groupedProperties = await service.getGroupedProperties(fakeNode).toPromise(); + + expect(groupedProperties.length).toEqual(2); + expect(groupedProperties[0].title).toEqual('Exif'); + expect(groupedProperties[1].title).toEqual('Exif'); + expect(groupedProperties[0].properties.length).toEqual(4); + expect(groupedProperties[1].properties.length).toEqual(2); + + expect(groupedProperties[0].properties[0].label).toEqual('exif:1:id'); + expect(groupedProperties[0].properties[1].label).toEqual('exif:2:id'); + expect(groupedProperties[0].properties[2].label).toEqual('Image Width'); + expect(groupedProperties[0].properties[3].label).toEqual('Image Height'); + + expect(groupedProperties[1].properties[0].label).toEqual('Image Width'); + expect(groupedProperties[1].properties[1].label).toEqual('Image Height'); + + expect(classesApi.getClass).toHaveBeenCalledTimes(2); + expect(classesApi.getClass).toHaveBeenCalledWith('exif_exif'); + }); + }); describe('LayoutOriented preset', () => { - it('should return the node property', (done) => { const customLayoutOrientedScheme = [ { @@ -174,15 +380,17 @@ describe('ContentMetaDataService', () => { ]; setConfig('custom', customLayoutOrientedScheme); - spyOn(classesApi, 'getClass').and.returnValue(Promise.resolve(contentResponse)); + spyOn(classesApi, 'getClass').and.returnValue( + Promise.resolve(contentResponse) + ); - service.getGroupedProperties(fakeContentNode, 'custom').subscribe( - (res) => { + service + .getGroupedProperties(fakeContentNode, 'custom') + .subscribe((res) => { expect(res.length).toEqual(1); expect(res[0].title).toEqual('Properties'); done(); - } - ); + }); expect(classesApi.getClass).toHaveBeenCalledTimes(1); expect(classesApi.getClass).toHaveBeenCalledWith('cm_content'); @@ -215,15 +423,17 @@ describe('ContentMetaDataService', () => { ]; setConfig('custom', customLayoutOrientedScheme); - spyOn(classesApi, 'getClass').and.returnValue(Promise.resolve(contentResponse)); + spyOn(classesApi, 'getClass').and.returnValue( + Promise.resolve(contentResponse) + ); - service.getGroupedProperties(fakeContentNode, 'custom').subscribe( - (res) => { + service + .getGroupedProperties(fakeContentNode, 'custom') + .subscribe((res) => { expect(res.length).toEqual(1); expect(res[0].title).toEqual('Properties'); done(); - } - ); + }); expect(classesApi.getClass).toHaveBeenCalledTimes(1); expect(classesApi.getClass).toHaveBeenCalledWith('cm_content'); @@ -247,22 +457,24 @@ describe('ContentMetaDataService', () => { ]; setConfig('custom', customLayoutOrientedScheme); - spyOn(classesApi, 'getClass').and.returnValue(Promise.resolve(contentResponse)); - - service.getGroupedProperties(fakeContentNode, 'custom').subscribe( - (res) => { - expect(res.length).toEqual(0); - done(); - } + spyOn(classesApi, 'getClass').and.returnValue( + Promise.resolve(contentResponse) ); - expect(classesApi.getClass).toHaveBeenCalledTimes(1); + service + .getGroupedProperties(fakeContentNode, 'custom') + .subscribe((res) => { + expect(res.length).toEqual(0); + done(); + }); + + expect(classesApi.getClass).toHaveBeenCalledTimes(1 + fakeContentNode.aspectNames.length); expect(classesApi.getClass).toHaveBeenCalledWith('cm_content'); }); }); describe('Provided preset config', () => { - it('should create the metadata config on the fly when preset config is provided', (done) => { + it('should create the metadata config on the fly when preset config is provided', (done) => { const customLayoutOrientedScheme = [ { id: 'app.content.metadata.customGroup', @@ -288,17 +500,24 @@ describe('ContentMetaDataService', () => { } ]; - spyOn(classesApi, 'getClass').and.returnValue(Promise.resolve(contentResponse)); + spyOn(classesApi, 'getClass').and.returnValue( + Promise.resolve(contentResponse) + ); - service.getGroupedProperties(fakeContentNode, customLayoutOrientedScheme).subscribe( - (res) => { + service + .getGroupedProperties( + fakeContentNode, + customLayoutOrientedScheme + ) + .subscribe((res) => { expect(res.length).toEqual(1); expect(res[0].title).toEqual('Properties'); expect(classesApi.getClass).toHaveBeenCalledTimes(1); - expect(classesApi.getClass).toHaveBeenCalledWith('cm_content'); + expect(classesApi.getClass).toHaveBeenCalledWith( + 'cm_content' + ); done(); - } - ); + }); }); }); });