ACS-3855: Add validation for rule condition comparator. (#1538)

This commit is contained in:
Maciej Pichura
2022-11-07 15:31:19 +01:00
committed by GitHub
parent 024e4e072b
commit e41fc6af02
3 changed files with 51 additions and 1 deletions

View File

@@ -951,6 +951,28 @@ public class CreateRulesTests extends RestTest
restClient.assertLastError().containsSummary("Category in condition is invalid");
}
/**
* Check we get 400 error when condition comparator is invalid
*/
@Test(groups = {TestGroup.REST_API, TestGroup.RULES})
public void createRuleWithConditions_invalidComparator()
{
STEP("Try to create a rule with invalid comparator in conditions.");
final String comparator = "greaterthan";
RestCompositeConditionDefinitionModel conditions = rulesUtils.createCompositeCondition(List.of(
rulesUtils.createCompositeCondition(!INVERTED, List.of(
rulesUtils.createSimpleCondition("size", comparator, "500")
))
));
RestRuleModel ruleModel = rulesUtils.createRuleModelWithDefaultValues();
ruleModel.setConditions(conditions);
restClient.authenticateUser(user).withPrivateAPI().usingNode(ruleFolder).usingDefaultRuleSet().createSingleRule(ruleModel);
restClient.assertStatusCodeIs(BAD_REQUEST);
restClient.assertLastError().containsSummary("Comparator value for condition is invalid: " + comparator);
}
private String getAddPermissionsBody(String username, String role)
{
JsonObject userPermission = Json.createObjectBuilder().add("permissions",

View File

@@ -64,6 +64,7 @@ public class RestRuleSimpleConditionModelMapper implements RestModelMapper<Simpl
static final String FIELD_NOT_NULL = "Field in condition must not be blank";
static final String PARAMETER_NOT_NULL = "Parameter in condition must not be blank";
static final String COMPARATOR_NOT_NULL = "Comparator in condition must not be blank";
static final String INVALID_COMPARATOR_VALUE = "Comparator value for condition is invalid: %s";
private final NamespaceService namespaceService;
private final Nodes nodes;
@@ -157,13 +158,23 @@ public class RestRuleSimpleConditionModelMapper implements RestModelMapper<Simpl
parameterValues.put(ComparePropertyValueEvaluator.PARAM_PROPERTY, QName.createQName(field, namespaceService));
}
checkStringNotBlank(restModel.getComparator(), COMPARATOR_NOT_NULL);
parameterValues.put(ComparePropertyValueEvaluator.PARAM_OPERATION, restModel.getComparator().toUpperCase());
parameterValues.put(ComparePropertyValueEvaluator.PARAM_OPERATION, getComparatorValue(restModel.getComparator()));
parameterValues.put(ComparePropertyValueEvaluator.PARAM_VALUE, parameter);
break;
}
return new ActionConditionImpl(UUID.randomUUID().toString(), conditionDefinitionId, parameterValues);
}
private String getComparatorValue(String comparator)
{
try
{
return ComparePropertyValueOperation.valueOf(comparator.toUpperCase()).toString();
} catch (IllegalArgumentException e) {
throw new InvalidArgumentException(String.format(INVALID_COMPARATOR_VALUE, comparator));
}
}
private void checkStringNotBlank(final String string, final String message) {
if (Strings.isBlank(string))
{

View File

@@ -28,6 +28,7 @@ package org.alfresco.rest.api.impl.mapper.rules;
import static org.alfresco.rest.api.impl.mapper.rules.RestRuleSimpleConditionModelMapper.COMPARATOR_NOT_NULL;
import static org.alfresco.rest.api.impl.mapper.rules.RestRuleSimpleConditionModelMapper.FIELD_NOT_NULL;
import static org.alfresco.rest.api.impl.mapper.rules.RestRuleSimpleConditionModelMapper.INVALID_COMPARATOR_VALUE;
import static org.alfresco.rest.api.impl.mapper.rules.RestRuleSimpleConditionModelMapper.PARAMETER_NOT_NULL;
import static org.alfresco.rest.api.impl.mapper.rules.RestRuleSimpleConditionModelMapper.PARAM_CATEGORY;
import static org.alfresco.rest.api.impl.mapper.rules.RestRuleSimpleConditionModelMapper.PARAM_MIMETYPE;
@@ -366,6 +367,22 @@ public class RestRuleSimpleConditionModelMapperTest
.hasMessageContaining(COMPARATOR_NOT_NULL);
}
@Test
public void testToServiceModel_invalidComparator()
{
final String comparator = "greaterthan";
final SimpleCondition simpleConditionNullComparator = SimpleCondition.builder()
.field("size")
.comparator(comparator)
.parameter("65000")
.create();
// when
assertThatThrownBy(() -> objectUnderTest.toServiceModel(simpleConditionNullComparator))
.isInstanceOf(InvalidArgumentException.class)
.hasMessageContaining(String.format(INVALID_COMPARATOR_VALUE, comparator));
}
private static ActionCondition createActionCondition(final String actionDefinitionName)
{
return new ActionConditionImpl("fake-id", actionDefinitionName, createParameterValues());