From e2df1e352c46057eef33ecdfdb996624df9a8949 Mon Sep 17 00:00:00 2001 From: Akash Rathod <41251473+akashrathod28@users.noreply.github.com> Date: Fri, 3 Jul 2026 12:40:52 +0200 Subject: [PATCH] [MNT-25149] Add unit tests for multivalued select parameter default value (#5262) * [MNT-25149] Add unit tests for multivalued select parameter default value * address comment on pr --- .../mock/action-parameter-constraints.mock.ts | 20 ++++++++ .../folder-rules/src/mock/actions.mock.ts | 19 ++++++++ .../actions/rule-action.ui-component.spec.ts | 47 ++++++++++++++++++- 3 files changed, 85 insertions(+), 1 deletion(-) diff --git a/projects/aca-content/folder-rules/src/mock/action-parameter-constraints.mock.ts b/projects/aca-content/folder-rules/src/mock/action-parameter-constraints.mock.ts index 660f7741e..a9c0b8e55 100644 --- a/projects/aca-content/folder-rules/src/mock/action-parameter-constraints.mock.ts +++ b/projects/aca-content/folder-rules/src/mock/action-parameter-constraints.mock.ts @@ -106,3 +106,23 @@ export const dummyCategoriesConstraints: ActionParameterConstraint[] = [ ] } ]; + +export const dummyMultiSelectConstraints: ActionParameterConstraint[] = [ + { + name: 'mock-multi-select-param', + constraints: [ + { + value: 'opt:one', + label: 'Option One' + }, + { + value: 'opt:two', + label: 'Option Two' + }, + { + value: 'opt:three', + label: 'Option Three' + } + ] + } +]; 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 6ff8dd135..e3ae39da1 100644 --- a/projects/aca-content/folder-rules/src/mock/actions.mock.ts +++ b/projects/aca-content/folder-rules/src/mock/actions.mock.ts @@ -156,6 +156,15 @@ const actionParamLinkToCategoryTransformedMock = { displayLabel: 'Category value' }; +const actionMultiSelectParamTransformedMock: ActionParameterDefinitionTransformed = { + name: 'mock-multi-select-param', + type: 'd:text', + multiValued: true, + mandatory: false, + displayLabel: 'Mock multi select param', + parameterConstraintName: 'mock-multi-select-constraint' +}; + const actionParamSecurityGroup: ActionParameterDefinitionTransformed = { name: 'securityGroupId', type: 'd:text', @@ -229,6 +238,16 @@ export const actionNodeTransformedMock: ActionDefinitionTransformed = { parameterDefinitions: [actionParam6TransformedMock] }; +export const actionMultiSelectTransformedMock: ActionDefinitionTransformed = { + id: 'mock-action-6-definition', + name: 'mock-action-6-definition', + description: '', + title: 'mock-action-6-definition', + applicableTypes: [], + trackStatus: false, + parameterDefinitions: [actionMultiSelectParamTransformedMock] +}; + export const actionsTransformedListMock: ActionDefinitionTransformed[] = [action1TransformedMock, action2TransformedMock]; export const validActionMock: RuleAction = { 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 042e43281..334323b52 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 @@ -34,11 +34,17 @@ import { import { RuleActionUiComponent } from './rule-action.ui-component'; import { actionLinkToCategoryTransformedMock, + actionMultiSelectTransformedMock, actionNodeTransformedMock, actionsTransformedListMock, securityActionTransformedMock } from '../../mock/actions.mock'; -import { dummyCategoriesConstraints, dummyConstraints, dummyTagsConstraints } from '../../mock/action-parameter-constraints.mock'; +import { + dummyCategoriesConstraints, + dummyConstraints, + dummyMultiSelectConstraints, + dummyTagsConstraints +} from '../../mock/action-parameter-constraints.mock'; import { securityMarksResponseMock, updateNotificationMock } from '../../mock/security-marks.mock'; import { AlfrescoApiService, @@ -448,4 +454,43 @@ describe('RuleActionUiComponent', () => { expect(component.readOnly).toBe(true); expect(component.form.disabled).toBe(true); }); + + describe('Multivalued select parameter default value', () => { + const multiSelectActionTitle = 'mock-action-6-definition'; + + beforeEach(() => { + component.actionDefinitions = [actionMultiSelectTransformedMock]; + component.parameterConstraints = dummyMultiSelectConstraints; + }); + + it('should default a multivalued select parameter value to an array with an empty string when no value is set', async () => { + fixture.detectChanges(); + await changeMatSelectValue(multiSelectActionTitle); + + const cardView = getPropertiesCardView(); + const selectProperty = cardView.properties[0] as CardViewSelectItemModel; + + expect(selectProperty).toBeInstanceOf(CardViewSelectItemModel); + expect(selectProperty.multivalued).toBe(true); + expect(selectProperty.value).toEqual(['']); + }); + + it('should preserve an existing array value for a multivalued select parameter', async () => { + fixture.detectChanges(); + await changeMatSelectValue(multiSelectActionTitle); + + component.writeValue({ + actionDefinitionId: actionMultiSelectTransformedMock.id, + params: { 'mock-multi-select-param': ['opt:one', 'opt:three'] } + }); + fixture.detectChanges(); + + const cardView = getPropertiesCardView(); + const selectProperty = cardView.properties[0] as CardViewSelectItemModel; + + expect(selectProperty).toBeInstanceOf(CardViewSelectItemModel); + expect(selectProperty.multivalued).toBe(true); + expect(selectProperty.value).toEqual(['opt:one', 'opt:three']); + }); + }); });