[MNT-25558] Folder rules - respect multivalued properties (#5184)

This commit is contained in:
Michal Kinas
2026-05-15 08:06:25 +02:00
committed by GitHub
parent 8bc00a2295
commit 29a2a36efc
3 changed files with 36 additions and 14 deletions
@@ -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];
@@ -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<string>).options$.subscribe((options) => {
(getPropertiesCardView().properties[3] as CardViewSelectItemModel<string>).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<string>).options$.subscribe((options) => {
(getPropertiesCardView().properties[3] as CardViewSelectItemModel<string>).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<string>).options$.subscribe((options) => {
(getPropertiesCardView().properties[3] as CardViewSelectItemModel<string>).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<string>).options$.subscribe((options) => {
(getPropertiesCardView().properties[3] as CardViewSelectItemModel<string>).options$.subscribe((options) => {
expect(options).toEqual([
{
key: 'cm:notCategoryRelated',
@@ -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: [