package com.constellio.model.entities.search.logical.criterion;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.when;
import org.joda.time.LocalDateTime;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import com.constellio.model.entities.records.Record;
import com.constellio.model.entities.schemas.Metadata;
import com.constellio.model.entities.schemas.MetadataValueType;
import com.constellio.model.services.search.query.logical.criteria.IsEqualCriterion;
import com.constellio.sdk.tests.ConstellioTest;
import com.constellio.sdk.tests.TestRecord;
public class IsEqualCriterionTest extends ConstellioTest {
@Mock Metadata textMetadata;
@Mock Metadata referenceMetadata;
@Mock Metadata numberMetadata;
@Mock Metadata booleanMetadata;
@Mock Metadata dateMetadata;
@Mock Metadata contentMetadata;
LocalDateTime date = new LocalDateTime(2000, 10, 20, 10, 50);
String textValue = "text value";
int numberValue1 = 1;
int numberValue12 = 12;
int numberValue100 = 100;
Boolean booleanFalseValue = Boolean.FALSE;
Boolean booleanTrueValue = Boolean.TRUE;
@Before
public void setUp()
throws Exception {
when(textMetadata.getDataStoreCode()).thenReturn("textMetadata");
when(textMetadata.getType()).thenReturn(MetadataValueType.STRING);
when(referenceMetadata.getDataStoreCode()).thenReturn("referenceMetadata");
when(referenceMetadata.getType()).thenReturn(MetadataValueType.REFERENCE);
when(numberMetadata.getDataStoreCode()).thenReturn("numberMetadata");
when(numberMetadata.getType()).thenReturn(MetadataValueType.NUMBER);
when(booleanMetadata.getDataStoreCode()).thenReturn("booleanMetadata");
when(booleanMetadata.getType()).thenReturn(MetadataValueType.BOOLEAN);
when(dateMetadata.getDataStoreCode()).thenReturn("dateTimeMetadata");
when(dateMetadata.getType()).thenReturn(MetadataValueType.DATE_TIME);
when(contentMetadata.getDataStoreCode()).thenReturn("contentMetadata");
when(contentMetadata.getType()).thenReturn(MetadataValueType.CONTENT);
}
@Test
public void whenGettingSolrQueryThenQueryIsCorrect() {
IsEqualCriterion criterion = new IsEqualCriterion(numberValue12);
assertThat(criterion.getSolrQuery(numberMetadata)).isEqualTo("numberMetadata:\"12\"");
}
@Test
public void givenRecordWhenGettingSolrQueryThenQueryIsCorrect() {
Record record = new TestRecord("code", "zeCollection", "zeId");
IsEqualCriterion criterion = new IsEqualCriterion(record);
assertThat(criterion.getSolrQuery(textMetadata)).isEqualTo(
"textMetadata:\"zeId\"");
}
@Test
public void givenNullWhenGettingSolrQueryThenQueryIsCorrect() {
IsEqualCriterion criterion = new IsEqualCriterion(null);
assertThat(criterion.getSolrQuery(textMetadata)).isEqualTo(
"textMetadata:\"__NULL__\"");
}
@Test
public void givenBooleanMetadataWhenGettingSolrQueryThenQueryIsCorrect() {
IsEqualCriterion criterion = new IsEqualCriterion(booleanTrueValue);
assertThat(criterion.getSolrQuery(booleanMetadata)).isEqualTo("booleanMetadata:\"__TRUE__\"");
criterion = new IsEqualCriterion(booleanFalseValue);
assertThat(criterion.getSolrQuery(booleanMetadata)).isEqualTo("booleanMetadata:\"__FALSE__\"");
}
@Test
public void givenTextWhenGettingSolrQueryThenQueryIsCorrect() {
IsEqualCriterion criterion = new IsEqualCriterion(textValue);
assertThat(criterion.getSolrQuery(textMetadata)).isEqualTo("textMetadata:\"text\\ value\"");
}
@Test
public void givenDateWhenGettingSolrQueryThenQueryIsCorrect() {
IsEqualCriterion criterion = new IsEqualCriterion(date);
assertThat(criterion.getSolrQuery(dateMetadata)).isEqualTo("dateTimeMetadata:\"" + date + "Z\"");
}
@Test
public void givenDateWithSummerTimeWhenGettingSolrQueryThenQueryIsCorrect() {
LocalDateTime date = new LocalDateTime(2015, 07, 01, 22, 50);
IsEqualCriterion criterion = new IsEqualCriterion(date);
assertThat(criterion.getSolrQuery(dateMetadata)).isEqualTo("dateTimeMetadata:\"" + date + "Z\"");
}
@Test
public void givenDateWithOutSummerTimeWhenGettingSolrQueryThenQueryIsCorrect() {
LocalDateTime date = new LocalDateTime(2014, 11, 04, 22, 50);
IsEqualCriterion criterion = new IsEqualCriterion(date);
assertThat(criterion.getSolrQuery(dateMetadata)).isEqualTo("dateTimeMetadata:\"" + date + "Z\"");
}
@Test
public void givenNumberMetadataWhenCheckingIsValidForThenReturnTrue() {
IsEqualCriterion criterion = new IsEqualCriterion(anInteger());
assertThat(criterion.isValidFor(numberMetadata)).isTrue();
}
@Test
public void givenTextMetadataWhenCheckingIsValidForThenReturnTrue() {
IsEqualCriterion criterion = new IsEqualCriterion(aString());
assertThat(criterion.isValidFor(textMetadata)).isTrue();
}
@Test
public void givenReferenceMetadataWhenCheckingIsValidForThenReturnTrue() {
IsEqualCriterion criterion = new IsEqualCriterion(anInteger());
assertThat(criterion.isValidFor(referenceMetadata)).isTrue();
}
@Test
public void givenBooleanMetadataWhenCheckingIsValidForThenReturnTrue() {
IsEqualCriterion criterion = new IsEqualCriterion(aString());
assertThat(criterion.isValidFor(booleanMetadata)).isTrue();
}
@Test
public void givenDateMetadataWhenCheckingIsValidForThenReturnTrue() {
IsEqualCriterion criterion = new IsEqualCriterion(aDateTime());
assertThat(criterion.isValidFor(dateMetadata)).isTrue();
}
@Test
public void givenContentMetadataWhenCheckingIsValidForThenReturnTrue() {
IsEqualCriterion criterion = new IsEqualCriterion(aString());
assertThat(criterion.isValidFor(contentMetadata)).isTrue();
}
@Test
public void givenValueContainsSpacesWhenGettingSolrQueryThenSpacesEscaped() {
String value = "value with spaces";
IsEqualCriterion criterion = new IsEqualCriterion(value);
assertThat(criterion.getSolrQuery(textMetadata)).isEqualTo("textMetadata:\"value\\ with\\ spaces\"");
}
@Test
public void givenValueContainsAsterisksWhenGettingSolrQueryThenAsterisksEscaped() {
String value = "value*with*asterisks*";
IsEqualCriterion criterion = new IsEqualCriterion(value);
assertThat(criterion.getSolrQuery(textMetadata)).isEqualTo("textMetadata:\"value\\*with\\*asterisks\\*\"");
}
@Test
public void givenValueContainsWildCardsWhenGettingSolrQueryThenWildCardsEscaped() {
String value = "value?with?wildcards?";
IsEqualCriterion criterion = new IsEqualCriterion(value);
assertThat(criterion.getSolrQuery(textMetadata)).isEqualTo("textMetadata:\"value\\?with\\?wildcards\\?\"");
}
}