Skip to content

Commit

Permalink
[ADF-5362] - Content type properties should be showed when content ty…
Browse files Browse the repository at this point in the history
…pe is changed. (#6922)

* [ADF-5362] - Content type properties showed when content type changed

* [ADF-5362] - Added some fix and some unit tests

* [ADF-5370] - fixed e2e

* [ADF-5370] - fixed e2e
  • Loading branch information
VitoAlbano committed Apr 15, 2021
1 parent 257614b commit e4288cd
Show file tree
Hide file tree
Showing 12 changed files with 267 additions and 48 deletions.
32 changes: 16 additions & 16 deletions e2e/content-services/metadata/metadata-smoke-tests.e2e.ts
Original file line number Diff line number Diff line change
Expand Up @@ -160,23 +160,23 @@ describe('Metadata component', () => {
await expect(await viewerPage.getActiveTab()).toEqual(METADATA.PROPERTY_TAB);

await metadataViewPage.editIconClick();
await metadataViewPage.editPropertyIconIsDisplayed('name');
await metadataViewPage.editPropertyIconIsDisplayed('properties.cm:name');
await metadataViewPage.editPropertyIconIsDisplayed('properties.cm:title');
await metadataViewPage.editPropertyIconIsDisplayed('properties.cm:description');

await expect(await metadataViewPage.getPropertyIconTooltip('name')).toEqual('Edit');
await expect(await metadataViewPage.getPropertyIconTooltip('properties.cm:name')).toEqual('Edit');
await expect(await metadataViewPage.getPropertyIconTooltip('properties.cm:title')).toEqual('Edit');
await expect(await metadataViewPage.getPropertyIconTooltip('properties.cm:description')).toEqual('Edit');

await metadataViewPage.enterPropertyText('name', 'exampleText');
await metadataViewPage.enterPropertyText('properties.cm:name', 'exampleText');
await metadataViewPage.clickResetMetadata();
await expect(await metadataViewPage.getPropertyText('name')).toEqual(browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_name);
await expect(await metadataViewPage.getPropertyText('properties.cm:name')).toEqual(browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_name);

await metadataViewPage.enterPropertyText('name', 'exampleText.png');
await metadataViewPage.enterPropertyText('properties.cm:name', 'exampleText.png');
await metadataViewPage.enterPropertyText('properties.cm:title', 'example title');
await metadataViewPage.enterDescriptionText('example description');

await expect(await metadataViewPage.getPropertyText('name')).toEqual('exampleText.png');
await expect(await metadataViewPage.getPropertyText('properties.cm:name')).toEqual('exampleText.png');
await expect(await metadataViewPage.getPropertyText('properties.cm:title')).toEqual('example title');
await expect(await metadataViewPage.getPropertyText('properties.cm:description')).toEqual('example description');
await metadataViewPage.clickSaveMetadata();
Expand All @@ -190,13 +190,13 @@ describe('Metadata component', () => {
await metadataViewPage.clickOnPropertiesTab();
await metadataViewPage.editIconIsDisplayed();

await expect(await metadataViewPage.getPropertyText('name')).toEqual('exampleText.png');
await expect(await metadataViewPage.getPropertyText('properties.cm:name')).toEqual('exampleText.png');
await expect(await metadataViewPage.getPropertyText('properties.cm:title')).toEqual('example title');
await expect(await metadataViewPage.getPropertyText('properties.cm:description')).toEqual('example description');

await metadataViewPage.editIconClick();
await metadataViewPage.enterPropertyText('name', browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_name);
await expect(await metadataViewPage.getPropertyText('name')).toEqual(browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_name);
await metadataViewPage.enterPropertyText('properties.cm:name', browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_name);
await expect(await metadataViewPage.getPropertyText('properties.cm:name')).toEqual(browser.params.resources.Files.ADF_DOCUMENTS.PNG.file_name);
await metadataViewPage.clickSaveMetadata();
});

Expand Down Expand Up @@ -243,7 +243,7 @@ describe('Metadata component', () => {
it('[C261157] Should be possible use the metadata component When the node is a Folder', async () => {
await contentServicesPage.metadataContent(folderName);

await expect(await metadataViewPage.getPropertyText('name')).toEqual(folderName);
await expect(await metadataViewPage.getPropertyText('properties.cm:name')).toEqual(folderName);
await expect(await metadataViewPage.getPropertyText('createdByUser.displayName')).toEqual(`${acsUser.firstName} ${acsUser.lastName}`);
await BrowserActions.closeMenuAndDialogs();
});
Expand All @@ -253,17 +253,17 @@ describe('Metadata component', () => {

await metadataViewPage.editIconClick();

await metadataViewPage.enterPropertyText('name', 'newnameFolder');
await metadataViewPage.enterPropertyText('properties.cm:name', 'newnameFolder');
await metadataViewPage.clickResetButton();
await expect(await metadataViewPage.getPropertyText('name')).toEqual(folderName);
await expect(await metadataViewPage.getPropertyText('properties.cm:name')).toEqual(folderName);

await metadataViewPage.enterPropertyText('name', 'newnameFolder');
await metadataViewPage.enterPropertyText('properties.cm:name', 'newnameFolder');
await metadataViewPage.clickSaveMetadata();
await expect(await metadataViewPage.getPropertyText('name')).toEqual('newnameFolder');
await expect(await metadataViewPage.getPropertyText('properties.cm:name')).toEqual('newnameFolder');

await metadataViewPage.enterPropertyText('name', folderName);
await metadataViewPage.enterPropertyText('properties.cm:name', folderName);
await metadataViewPage.clickSaveMetadata();
await expect(await metadataViewPage.getPropertyText('name')).toEqual(folderName);
await expect(await metadataViewPage.getPropertyText('properties.cm:name')).toEqual(folderName);
});
});

Expand Down
2 changes: 1 addition & 1 deletion e2e/core/pages/metadata-view.page.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ export class MetadataViewPage {
title = element(by.css(`div[info-drawer-title]`));
expandedAspect = element(by.css(`mat-expansion-panel-header[aria-expanded='true']`));
aspectTitle: Locator = by.css(`mat-panel-title`);
name = element(by.css(`[data-automation-id='card-textitem-value-name']`));
name = element(by.css(`[data-automation-id='card-textitem-value-properties.cm:name']`));
creator = element(by.css(`[data-automation-id='card-textitem-value-createdByUser.displayName']`));
createdDate = element(by.css(`span[data-automation-id='card-dateitem-createdAt'] span`));
modifier = element(by.css(`[data-automation-id='card-textitem-value-modifiedByUser.displayName']`));
Expand Down
2 changes: 1 addition & 1 deletion e2e/core/viewer/viewer-content-services-component.e2e.ts
Original file line number Diff line number Diff line change
Expand Up @@ -464,7 +464,7 @@ describe('Content Services Viewer', () => {
await viewerPage.clickOnTab('Properties');
await viewerPage.checkTabIsActive('Properties');
await metadataViewPage.editIconClick();
await metadataViewPage.enterPropertyText('name', newName);
await metadataViewPage.enterPropertyText('properties.cm:name', newName);
await metadataViewPage.clickSaveMetadata();
await viewerPage.clickCloseButton();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ describe('ContentMetadataComponent', () => {

component.ngOnChanges({ node: new SimpleChange(node, expectedNode, false) });

expect(contentMetadataService.getContentTypeProperty).toHaveBeenCalledWith(node.nodeType);
expect(contentMetadataService.getContentTypeProperty).toHaveBeenCalledWith(expectedNode);
expect(contentMetadataService.getBasicProperties).toHaveBeenCalledWith(expectedNode);
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -168,9 +168,12 @@ export class ContentMetadataComponent implements OnChanges, OnInit, OnDestroy {

private getProperties(node: Node) {
const properties$ = this.contentMetadataService.getBasicProperties(node);
const contentTypeProperty$ = this.contentMetadataService.getContentTypeProperty(node.nodeType);
const contentTypeProperty$ = this.contentMetadataService.getContentTypeProperty(node);
return zip(properties$, contentTypeProperty$)
.pipe(map(([properties, contentTypeProperty]) => [...properties, ...contentTypeProperty]));
.pipe(map(([properties, contentTypeProperty]) => {
const filteredProperties = contentTypeProperty.filter((property) => properties.findIndex((baseProperty) => baseProperty.key === property.key) === -1);
return [...properties, ...filteredProperties];
}));
}

updateChanges(updatedNodeChanges) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ export class BasicPropertiesService {
new CardViewTextItemModel({
label: 'CORE.METADATA.BASIC.NAME',
value: node.name,
key: 'name',
key: 'properties.cm:name',
editable: true
}),
new CardViewTextItemModel({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,9 +93,19 @@ describe('ContentMetaDataService', () => {
});

it('should return the content type property', () => {
const fakeNode: Node = <Node> {
name: 'Node',
id: 'fake-id',
isFile: true,
aspectNames: ['exif:exif'],
nodeType: 'fn:fakenode',
createdByUser: {displayName: 'test-user'},
modifiedByUser: {displayName: 'test-user-modified'},
properties: []
};
spyOn(contentPropertyService, 'getContentTypeCardItem').and.returnValue(of({ label: 'hello i am a weird content type'}));

service.getContentTypeProperty('fn:fakenode').subscribe(
service.getContentTypeProperty(fakeNode).subscribe(
(res: any) => {
expect(res).toBeDefined();
expect(res).not.toBeNull();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ export class ContentMetadataService {
return of(this.basicPropertiesService.getProperties(node));
}

getContentTypeProperty(nodeType: string): Observable<CardViewItem[]> {
return this.contentTypePropertyService.getContentTypeCardItem(nodeType);
getContentTypeProperty(node: Node): Observable<CardViewItem[]> {
return this.contentTypePropertyService.getContentTypeCardItem(node);
}

openConfirmDialog(changedProperties): Observable<any> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,23 +22,67 @@ import { ContentTestingModule } from '../../testing/content.testing.module';
import { TranslateModule } from '@ngx-translate/core';
import { ContentTypeService } from '../../content-type';
import { of } from 'rxjs';
import { Node } from '@alfresco/js-api';

describe('ContentTypePropertyService', () => {

let service: ContentTypePropertiesService;
let versionCompatibilityService: VersionCompatibilityService;
let contentTypeService: ContentTypeService;

const mockContent: any = { 'entry':
{ 'associations': [],
'isArchive': true,
'includedInSupertypeQuery': true,
'description': 'Base Content Object',
'isContainer': false,
'id': 'fk:nodeType',
'title': 'Content',
'properties': [{ 'id': 'cm:name', 'title': 'Name', 'description': 'Name', 'dataType': 'd:text', 'isMultiValued': false, 'isMandatory': true, 'isMandatoryEnforced': true, 'isProtected': false}],
'parentId': 'cm:cmobject' } };
const mockContent: any = {
'entry':
{
'associations': [],
'isArchive': true,
'includedInSupertypeQuery': true,
'description': 'Base Content Object',
'isContainer': false,
'id': 'fk:nodeType',
'title': 'Content',
'model': { 'namespacePrefix': 'fk' },
'properties': [{ 'id': 'cm:name', 'title': 'Name', 'description': 'Name', 'dataType': 'd:text', 'isMultiValued': false, 'isMandatory': true, 'isMandatoryEnforced': true, 'isProtected': false }],
'parentId': 'cm:cmobject'
}
};

const mockContentWithProperties: any = {
'entry':
{
'associations': [],
'isArchive': true,
'includedInSupertypeQuery': true,
'description': 'Base Content Object',
'isContainer': false,
'id': 'fk:nodeType',
'title': 'Content',
'model': { 'namespacePrefix': 'fk' },
'properties': [
{
'id': 'cm:name',
'title': 'Name',
'description': 'Name',
'dataType': 'd:text',
'isMultiValued': false,
'isMandatory': true,
'isMandatoryEnforced': true,
'isProtected': false
},
{
'id': 'fk:brendonstare',
'title': 'Brendon',
'description': 'is watching the dark emperor',
'dataType': 'd:text',
'isMultiValued': false,
'isMandatory': true,
'defaultValue': 'default',
'isMandatoryEnforced': true,
'isProtected': false
}],
'parentId': 'cm:cmobject'
}
};

const mockSelectOptions = {
'list':
{
Expand Down Expand Up @@ -88,8 +132,18 @@ describe('ContentTypePropertyService', () => {
});

it('should return a card text item for ACS version below 7', (done) => {
const fakeNode: Node = <Node> {
name: 'Node',
id: 'fake-id',
isFile: true,
aspectNames: ['exif:exif'],
nodeType: 'fk:nodeType',
createdByUser: { displayName: 'test-user' },
modifiedByUser: { displayName: 'test-user-modified' },
properties: {}
};
spyOn(versionCompatibilityService, 'isVersionSupported').and.returnValue(false);
service.getContentTypeCardItem('fk:nodeType').subscribe((items: CardViewItem[]) => {
service.getContentTypeCardItem(fakeNode).subscribe((items: CardViewItem[]) => {
expect(items.length).toBe(1);
expect(items[0] instanceof CardViewTextItemModel).toBeTruthy();
expect(items[0].label).toBe('CORE.METADATA.BASIC.CONTENT_TYPE');
Expand All @@ -101,10 +155,20 @@ describe('ContentTypePropertyService', () => {
});

it('should return a card select item for ACS version 7 and above', (done) => {
const fakeNode: Node = <Node> {
name: 'Node',
id: 'fake-id',
isFile: true,
aspectNames: ['exif:exif'],
nodeType: 'fn:fakenode',
createdByUser: { displayName: 'test-user' },
modifiedByUser: { displayName: 'test-user-modified' },
properties: {}
};
spyOn(versionCompatibilityService, 'isVersionSupported').and.returnValue(true);
spyOn(contentTypeService, 'getContentTypeByPrefix').and.returnValue(of(mockContent));
spyOn(contentTypeService, 'getContentTypeChildren').and.returnValue(of(mockSelectOptions));
service.getContentTypeCardItem('fk:nodeType').subscribe((items: CardViewItem[]) => {
service.getContentTypeCardItem(fakeNode).subscribe((items: CardViewItem[]) => {
expect(items.length).toBe(1);
expect(items[0] instanceof CardViewSelectItemModel).toBeTruthy();
expect(items[0].label).toBe('CORE.METADATA.BASIC.CONTENT_TYPE');
Expand All @@ -115,4 +179,66 @@ describe('ContentTypePropertyService', () => {
});
});

it('should return a list of cards for the content type and all its own properties', (done) => {
const fakeNode: Node = <Node> {
name: 'Node',
id: 'fake-id',
isFile: true,
aspectNames: ['exif:exif'],
nodeType: 'fn:fakenode',
createdByUser: { displayName: 'test-user' },
modifiedByUser: { displayName: 'test-user-modified' },
properties: {}
};
spyOn(versionCompatibilityService, 'isVersionSupported').and.returnValue(true);
spyOn(contentTypeService, 'getContentTypeByPrefix').and.returnValue(of(mockContentWithProperties));
spyOn(contentTypeService, 'getContentTypeChildren').and.returnValue(of(mockSelectOptions));
service.getContentTypeCardItem(fakeNode).subscribe((items: CardViewItem[]) => {
expect(items.length).toBe(2);
expect(items[0] instanceof CardViewSelectItemModel).toBeTruthy();
expect(items[0].label).toBe('CORE.METADATA.BASIC.CONTENT_TYPE');
expect(items[0].value).toBe('fk:nodeType');
expect(items[0].key).toBe('nodeType');
expect(items[0].editable).toBeTruthy();

expect(items[1] instanceof CardViewTextItemModel).toBeTruthy();
expect(items[1].label).toBe('Brendon');
expect(items[1].value).toBe('default');
expect(items[1].key).toBe('properties.fk:brendonstare');
expect(items[1].editable).toBeTruthy();
done();
});
});

it('should return a list of cards for the content type and all its own properties with relative value set', (done) => {
const fakeNode: Node = <Node> {
name: 'Node',
id: 'fake-id',
isFile: true,
aspectNames: ['exif:exif'],
nodeType: 'fn:fakenode',
createdByUser: { displayName: 'test-user' },
modifiedByUser: { displayName: 'test-user-modified' },
properties: {'fk:brendonstare': 'i keep staring i do not know why'}
};
spyOn(versionCompatibilityService, 'isVersionSupported').and.returnValue(true);
spyOn(contentTypeService, 'getContentTypeByPrefix').and.returnValue(of(mockContentWithProperties));
spyOn(contentTypeService, 'getContentTypeChildren').and.returnValue(of(mockSelectOptions));
service.getContentTypeCardItem(fakeNode).subscribe((items: CardViewItem[]) => {
expect(items.length).toBe(2);
expect(items[0] instanceof CardViewSelectItemModel).toBeTruthy();
expect(items[0].label).toBe('CORE.METADATA.BASIC.CONTENT_TYPE');
expect(items[0].value).toBe('fk:nodeType');
expect(items[0].key).toBe('nodeType');
expect(items[0].editable).toBeTruthy();

expect(items[1] instanceof CardViewTextItemModel).toBeTruthy();
expect(items[1].label).toBe('Brendon');
expect(items[1].value).toBe('i keep staring i do not know why');
expect(items[1].key).toBe('properties.fk:brendonstare');
expect(items[1].editable).toBeTruthy();
done();
});
});

});

0 comments on commit e4288cd

Please sign in to comment.