From 29a2a36efc0bab529dc7ac6d6675e4f2251917a4 Mon Sep 17 00:00:00 2001 From: Michal Kinas <113341662+MichalKinas@users.noreply.github.com> Date: Fri, 15 May 2026 08:06:25 +0200 Subject: [PATCH] [MNT-25558] Folder rules - respect multivalued properties (#5184) --- .../folder-rules/src/mock/actions.mock.ts | 27 +++++++++++++++---- .../actions/rule-action.ui-component.spec.ts | 22 ++++++++------- .../actions/rule-action.ui-component.ts | 1 + 3 files changed, 36 insertions(+), 14 deletions(-) diff --git a/projects/aca-content/folder-rules/src/mock/actions.mock.ts b/projects/aca-content/folder-rules/src/mock/actions.mock.ts index 5a88ad947..6ff8dd135 100644 --- a/projects/aca-content/folder-rules/src/mock/actions.mock.ts +++ b/projects/aca-content/folder-rules/src/mock/actions.mock.ts @@ -45,6 +45,13 @@ export const actionDefListMock = { mandatory: true, displayLabel: 'Mock action parameter text' }, + { + name: 'mock-action-parameter-text-multi', + type: 'd:text', + multiValued: true, + mandatory: false, + displayLabel: 'Mock action parameter text multi' + }, { name: 'mock-action-parameter-boolean', type: 'd:boolean', @@ -97,6 +104,15 @@ const actionParam1TransformedMock: ActionParameterDefinitionTransformed = { }; const actionParam2TransformedMock: ActionParameterDefinitionTransformed = { + name: 'mock-action-parameter-text-multi', + type: 'd:text', + multiValued: true, + mandatory: false, + displayLabel: 'Mock action parameter text multi', + parameterConstraintName: '' +}; + +const actionParam3TransformedMock: ActionParameterDefinitionTransformed = { name: 'mock-action-parameter-boolean', type: 'd:boolean', multiValued: false, @@ -105,7 +121,7 @@ const actionParam2TransformedMock: ActionParameterDefinitionTransformed = { parameterConstraintName: '' }; -const actionParam3TransformedMock: ActionParameterDefinitionTransformed = { +const actionParam4TransformedMock: ActionParameterDefinitionTransformed = { name: 'aspect-name', type: 'd:qname', multiValued: false, @@ -114,7 +130,7 @@ const actionParam3TransformedMock: ActionParameterDefinitionTransformed = { parameterConstraintName: 'ac-aspects' }; -const actionParam4TransformedMock: ActionParameterDefinitionTransformed = { +const actionParam5TransformedMock: ActionParameterDefinitionTransformed = { name: 'mock-action-parameter-noderef', type: 'd:noderef', multiValued: false, @@ -123,7 +139,7 @@ const actionParam4TransformedMock: ActionParameterDefinitionTransformed = { parameterConstraintName: '' }; -const actionParam5TransformedMock: ActionParameterDefinitionTransformed = { +const actionParam6TransformedMock: ActionParameterDefinitionTransformed = { name: 'aspect-name', type: 'd:noderef', multiValued: false, @@ -168,7 +184,8 @@ const action1TransformedMock: ActionDefinitionTransformed = { actionParam2TransformedMock, actionParam3TransformedMock, actionParam4TransformedMock, - actionParam5TransformedMock + actionParam5TransformedMock, + actionParam6TransformedMock ] }; @@ -209,7 +226,7 @@ export const actionNodeTransformedMock: ActionDefinitionTransformed = { title: 'mock-action-5-definition', applicableTypes: [], trackStatus: false, - parameterDefinitions: [actionParam5TransformedMock] + parameterDefinitions: [actionParam6TransformedMock] }; export const actionsTransformedListMock: ActionDefinitionTransformed[] = [action1TransformedMock, action2TransformedMock]; diff --git a/projects/aca-content/folder-rules/src/rule-details/actions/rule-action.ui-component.spec.ts b/projects/aca-content/folder-rules/src/rule-details/actions/rule-action.ui-component.spec.ts index ff5e63c77..042e43281 100644 --- a/projects/aca-content/folder-rules/src/rule-details/actions/rule-action.ui-component.spec.ts +++ b/projects/aca-content/folder-rules/src/rule-details/actions/rule-action.ui-component.spec.ts @@ -128,13 +128,17 @@ describe('RuleActionUiComponent', () => { await changeMatSelectValue('Action 1 title'); const cardView = getPropertiesCardView(); + const multiValuedProperties = cardView.properties.filter((property: CardViewTextItemModel) => property.multivalued); - expect(cardView.properties.length).toBe(5); + expect(cardView.properties.length).toBe(6); expect(cardView.properties[0]).toBeInstanceOf(CardViewTextItemModel); - expect(cardView.properties[1]).toBeInstanceOf(CardViewBoolItemModel); - expect(cardView.properties[2]).toBeInstanceOf(CardViewSelectItemModel); - expect(cardView.properties[3]).toBeInstanceOf(CardViewTextItemModel); - expect(cardView.properties[4]).toBeInstanceOf(CardViewSelectItemModel); + expect(cardView.properties[1]).toBeInstanceOf(CardViewTextItemModel); + expect(cardView.properties[2]).toBeInstanceOf(CardViewBoolItemModel); + expect(cardView.properties[3]).toBeInstanceOf(CardViewSelectItemModel); + expect(cardView.properties[4]).toBeInstanceOf(CardViewTextItemModel); + expect(cardView.properties[5]).toBeInstanceOf(CardViewSelectItemModel); + expect(multiValuedProperties.length).toBe(1); + expect(multiValuedProperties[0].key).toBe('mock-action-parameter-text-multi'); await changeMatSelectValue('mock-action-2-definition'); expect(unitTestingUtils.getByDirective(CardViewComponent)).toBeNull(); @@ -211,7 +215,7 @@ describe('RuleActionUiComponent', () => { await changeMatSelectValue('Action 1 title'); expect(tagService.areTagsEnabled).toHaveBeenCalled(); - (getPropertiesCardView().properties[2] as CardViewSelectItemModel).options$.subscribe((options) => { + (getPropertiesCardView().properties[3] as CardViewSelectItemModel).options$.subscribe((options) => { expect(options).toEqual( dummyTagsConstraints[0].constraints.map((constraint) => ({ key: constraint.value, @@ -229,7 +233,7 @@ describe('RuleActionUiComponent', () => { await changeMatSelectValue('Action 1 title'); expect(tagService.areTagsEnabled).toHaveBeenCalled(); - (getPropertiesCardView().properties[2] as CardViewSelectItemModel).options$.subscribe((options) => { + (getPropertiesCardView().properties[3] as CardViewSelectItemModel).options$.subscribe((options) => { expect(options).toEqual([ { key: 'cm:notTagRelated', @@ -247,7 +251,7 @@ describe('RuleActionUiComponent', () => { await changeMatSelectValue('Action 1 title'); expect(categoriesService.areCategoriesEnabled).toHaveBeenCalled(); - (getPropertiesCardView().properties[2] as CardViewSelectItemModel).options$.subscribe((options) => { + (getPropertiesCardView().properties[3] as CardViewSelectItemModel).options$.subscribe((options) => { expect(options).toEqual( dummyCategoriesConstraints[0].constraints.map((constraint) => ({ key: constraint.value, @@ -265,7 +269,7 @@ describe('RuleActionUiComponent', () => { await changeMatSelectValue('Action 1 title'); expect(categoryService.areCategoriesEnabled).toHaveBeenCalled(); - (getPropertiesCardView().properties[2] as CardViewSelectItemModel).options$.subscribe((options) => { + (getPropertiesCardView().properties[3] as CardViewSelectItemModel).options$.subscribe((options) => { expect(options).toEqual([ { key: 'cm:notCategoryRelated', diff --git a/projects/aca-content/folder-rules/src/rule-details/actions/rule-action.ui-component.ts b/projects/aca-content/folder-rules/src/rule-details/actions/rule-action.ui-component.ts index 3234c408a..c8bb0644b 100644 --- a/projects/aca-content/folder-rules/src/rule-details/actions/rule-action.ui-component.ts +++ b/projects/aca-content/folder-rules/src/rule-details/actions/rule-action.ui-component.ts @@ -213,6 +213,7 @@ export class RuleActionUiComponent implements ControlValueAccessor, OnInit, OnCh label: paramDef.displayLabel + (paramDef.mandatory ? ' *' : ''), key: paramDef.name, editable: true, + multivalued: paramDef.multiValued, ...(paramDef.mandatory ? { validators: [