package alien4cloud.tosca.properties.constraints;
import org.junit.Test;
import org.alien4cloud.tosca.model.definitions.constraints.EqualConstraint;
import alien4cloud.tosca.normative.InvalidPropertyValueException;
import alien4cloud.tosca.normative.ToscaType;
import alien4cloud.tosca.properties.constraints.exception.ConstraintValueDoNotMatchPropertyTypeException;
import alien4cloud.tosca.properties.constraints.exception.ConstraintViolationException;
public class EqualConstraintTest {
@Test
public void testEqualConstraintSatisfiedNull() throws ConstraintViolationException {
EqualConstraint constraint = new EqualConstraint();
constraint.setEqual(null);
constraint.validate(null);
}
@Test(expected = ConstraintViolationException.class)
public void testEqualConstraintFailNullValue() throws ConstraintViolationException, ConstraintValueDoNotMatchPropertyTypeException {
EqualConstraint constraint = new EqualConstraint();
constraint.setEqual("value");
constraint.initialize(ToscaType.STRING_TYPE);
constraint.validate(null);
}
@Test(expected = ConstraintViolationException.class)
public void testEqualConstraintFailNullProperty() throws ConstraintViolationException {
EqualConstraint constraint = new EqualConstraint();
constraint.setEqual(null);
constraint.validate("value");
}
@Test(expected = ConstraintViolationException.class)
public void testEqualConstraintFailNullDef() throws ConstraintViolationException {
EqualConstraint constraint = new EqualConstraint();
constraint.setEqual(null);
constraint.validate("value");
}
@Test
public void testEqualConstraintSatisfiedString() throws ConstraintViolationException, ConstraintValueDoNotMatchPropertyTypeException {
EqualConstraint constraint = new EqualConstraint();
constraint.setEqual("value");
constraint.initialize(ToscaType.STRING_TYPE);
constraint.validate("value");
}
@Test(expected = ConstraintViolationException.class)
public void testEqualConstraintFailString() throws ConstraintViolationException {
EqualConstraint constraint = new EqualConstraint();
constraint.setEqual("value");
constraint.validate("othervalue");
}
@Test
public void testEqualConstraintSatisfiedInteger() throws ConstraintViolationException, ConstraintValueDoNotMatchPropertyTypeException {
EqualConstraint constraint = new EqualConstraint();
constraint.setEqual("1");
constraint.initialize(ToscaType.INTEGER_TYPE);
constraint.validate(1l);
}
@Test(expected = ConstraintViolationException.class)
public void testEqualConstraintFailInteger() throws ConstraintViolationException, ConstraintValueDoNotMatchPropertyTypeException {
EqualConstraint constraint = new EqualConstraint();
constraint.setEqual("1");
constraint.initialize(ToscaType.INTEGER_TYPE);
constraint.validate(2l);
}
@Test
public void testEqualConstraintSatisfiedFloat() throws ConstraintViolationException, ConstraintValueDoNotMatchPropertyTypeException {
EqualConstraint constraint = new EqualConstraint();
constraint.setEqual("1");
constraint.initialize(ToscaType.FLOAT_TYPE);
constraint.validate(1.0d);
}
@Test(expected = ConstraintViolationException.class)
public void testEqualConstraintFailFloat() throws ConstraintViolationException, ConstraintValueDoNotMatchPropertyTypeException {
EqualConstraint constraint = new EqualConstraint();
constraint.setEqual("1");
constraint.initialize(ToscaType.FLOAT_TYPE);
constraint.validate(2.0d);
}
@Test
public void testEqualConstraintSatisfiedTime() throws ConstraintViolationException, ConstraintValueDoNotMatchPropertyTypeException, InvalidPropertyValueException {
EqualConstraint constraint = new EqualConstraint();
constraint.setEqual("1 m");
constraint.initialize(ToscaType.TIME_TYPE);
constraint.validate(ToscaType.TIME_TYPE.parse("1 m"));
}
@Test(expected = ConstraintViolationException.class)
public void testEqualConstraintFailTime() throws ConstraintViolationException, ConstraintValueDoNotMatchPropertyTypeException,
InvalidPropertyValueException {
EqualConstraint constraint = new EqualConstraint();
constraint.setEqual("1 m");
constraint.initialize(ToscaType.TIME_TYPE);
constraint.validate(ToscaType.TIME_TYPE.parse("2 d"));
}
// TODO test with version
// TODO test with timestamp
}