Skip to content
This repository has been archived by the owner on Apr 14, 2023. It is now read-only.

Commit

Permalink
Merge pull request #1657 from jwatkinsdavid-scottlogic/fix/1553-if-co…
Browse files Browse the repository at this point in the history
…nstraint-error-message

fix(#1553): Improve error message from invalid conditional constraint
  • Loading branch information
tjohnson-scottlogic authored Jul 13, 2020
2 parents e613b3c + bfa5a14 commit 33e6b5b
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,9 @@ public ConditionalConstraintValidator(List<FieldDTO> fields)
public ValidationResult validate(ConditionalConstraintDTO conditionalConstraint)
{
ValidationResult validateIfConstraint = validateConstraint(conditionalConstraint.ifConstraint, fields);
ValidationResult validateThenConstraint = validateConstraint(conditionalConstraint.thenConstraint, fields);
ValidationResult validateThenConstraint = conditionalConstraint.thenConstraint == null
? ValidationResult.failure("'if' constraint must also have an associated 'then' constraint")
: validateConstraint(conditionalConstraint.thenConstraint, fields);
ValidationResult validateElseConstraint = conditionalConstraint.elseConstraint == null
? ValidationResult.success()
:validateConstraint(conditionalConstraint.ifConstraint, fields);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
/*
* Copyright 2020 Scott Logic Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.scottlogic.datahelix.generator.profile.validators.profile.constraints.grammatical;

import com.scottlogic.datahelix.generator.common.profile.StandardSpecificFieldType;
import com.scottlogic.datahelix.generator.common.validators.ValidationResult;
import com.scottlogic.datahelix.generator.profile.creation.FieldDTOBuilder;
import com.scottlogic.datahelix.generator.profile.dtos.FieldDTO;
import com.scottlogic.datahelix.generator.profile.dtos.constraints.atomic.EqualToConstraintDTO;
import com.scottlogic.datahelix.generator.profile.dtos.constraints.grammatical.ConditionalConstraintDTO;
import org.junit.jupiter.api.Test;

import java.util.Arrays;
import java.util.List;

import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.jupiter.api.Assertions.assertEquals;

public class ConditionalConstraintValidatorTests {

private final List<FieldDTO> fields = Arrays.asList
(
FieldDTOBuilder.create("integer", StandardSpecificFieldType.INTEGER.toSpecificFieldType())
);

@Test
public void validateConditionalConstraint_withNullThenConstraint_shouldResultInValidationFailure()
{
// Arrange
EqualToConstraintDTO equalToConstraint = new EqualToConstraintDTO();
equalToConstraint.field = "integer";
equalToConstraint.value = 1;

ConditionalConstraintDTO dto = new ConditionalConstraintDTO();
dto.ifConstraint = equalToConstraint;
dto.thenConstraint = null;
dto.elseConstraint = null;

// Act
ValidationResult validationResult = new ConditionalConstraintValidator(fields).validate(dto);

// Assert
assertFalse(validationResult.isSuccess);
assertEquals(1, validationResult.errors.size());
assertTrue(validationResult.errors.contains("'if' constraint must also have an associated 'then' constraint"));
}
}

0 comments on commit 33e6b5b

Please sign in to comment.