package org.mongodb.morphia.query.validation; import org.junit.Test; import java.util.ArrayList; import java.util.List; import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import static org.mongodb.morphia.query.FilterOperator.EQUAL; import static org.mongodb.morphia.query.FilterOperator.MOD; public class ModOperationValidatorTest { @Test public void shouldAllowModOperatorForArrayOfTwoIntegerValues() { // given List<ValidationFailure> validationFailures = new ArrayList<ValidationFailure>(); // when boolean validationApplied = ModOperationValidator.getInstance().apply(null, MOD, new int[2], validationFailures); // then assertThat(validationApplied, is(true)); assertThat(validationFailures.size(), is(0)); } @Test public void shouldNotApplyValidationWithANonModOperator() { // given List<ValidationFailure> validationFailures = new ArrayList<ValidationFailure>(); // when boolean validationApplied = ModOperationValidator.getInstance().apply(null, EQUAL, new int[2], validationFailures); // then assertThat(validationApplied, is(false)); assertThat(validationFailures.size(), is(0)); } @Test public void shouldNotErrorIfModOperatorIsUsedWithZeroLengthArrayOfIntegerValues() { // given List<ValidationFailure> validationFailures = new ArrayList<ValidationFailure>(); // when boolean validationApplied = ModOperationValidator.getInstance().apply(null, MOD, new int[0], validationFailures); // then assertThat(validationApplied, is(true)); assertThat(validationFailures.size(), is(1)); assertThat(validationFailures.get(0).toString(), containsString("should be an array with two integer elements")); } @Test public void shouldRejectModOperatorWithNonArrayValue() { // given List<ValidationFailure> validationFailures = new ArrayList<ValidationFailure>(); // when boolean validationApplied = ModOperationValidator.getInstance().apply(null, MOD, "Not an array", validationFailures); // then assertThat(validationApplied, is(true)); assertThat(validationFailures.size(), is(1)); assertThat(validationFailures.get(0).toString(), containsString("should be an integer array")); } @Test public void shouldRejectModOperatorWithNonIntegerArray() { // given List<ValidationFailure> validationFailures = new ArrayList<ValidationFailure>(); // when boolean validationApplied = ModOperationValidator.getInstance().apply(null, MOD, new String[]{"1", "2"}, validationFailures); // then assertThat(validationApplied, is(true)); assertThat(validationFailures.size(), is(1)); assertThat(validationFailures.get(0).toString(), containsString("Array value needs to contain integers for $mod")); } @Test public void shouldRejectNullValues() { // given List<ValidationFailure> validationFailures = new ArrayList<ValidationFailure>(); // when boolean validationApplied = ModOperationValidator.getInstance().apply(null, MOD, null, validationFailures); // then assertThat(validationApplied, is(true)); assertThat(validationFailures.size(), is(1)); assertThat(validationFailures.get(0).toString(), containsString("value cannot be null")); } }