package com.constellio.model.entities.search.logical.criterion;
import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.endingWithText;
import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.not;
import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.startingWithText;
import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.where;
import static com.constellio.sdk.tests.TestUtils.asList;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.BDDMockito.willReturn;
import static org.mockito.Mockito.when;
import org.mockito.Mock;
import com.constellio.model.entities.schemas.Metadata;
import com.constellio.model.entities.schemas.MetadataSchema;
import com.constellio.model.entities.schemas.MetadataSchemaType;
import com.constellio.model.services.search.query.logical.LogicalOperator;
import com.constellio.model.services.search.query.logical.condition.CompositeLogicalSearchCondition;
import com.constellio.model.services.search.query.logical.condition.LogicalSearchCondition;
import com.constellio.model.services.search.query.logical.condition.SchemaFilters;
import com.constellio.model.services.search.query.logical.condition.SolrQueryBuilderParams;
/**
* Created by maxime on 8/11/14.
*/
public class NotCriterionTest extends com.constellio.sdk.tests.ConstellioTest {
@Mock MetadataSchemaType schemaType;
@Mock MetadataSchema schema;
@Mock Metadata booleanMetadata;
@Mock Metadata firstTextMetadata;
private java.util.List<LogicalSearchCondition> firstConditions;
private java.util.List<LogicalSearchCondition> secondConditions;
private SolrQueryBuilderParams params = new SolrQueryBuilderParams(false, null);
@org.junit.Before
public void setUp() {
willReturn("firstText").given(firstTextMetadata).getDataStoreCode();
willReturn(com.constellio.model.entities.schemas.MetadataValueType.BOOLEAN).given(booleanMetadata).getType();
willReturn(com.constellio.model.entities.schemas.MetadataValueType.STRING).given(firstTextMetadata).getType();
when(firstTextMetadata.getCollection()).thenReturn(zeCollection);
when(booleanMetadata.getCollection()).thenReturn(zeCollection);
firstConditions = new java.util.ArrayList<>();
LogicalSearchCondition endsWith = where(firstTextMetadata).isEndingWithText("noris");
LogicalSearchCondition notStarting = where(firstTextMetadata).isNot(startingWithText("chuck"));
firstConditions.add(notStarting);
firstConditions.add(endsWith);
secondConditions = new java.util.ArrayList<>();
LogicalSearchCondition notStartingAndEnding = where(firstTextMetadata).isNot(startingWithText("chuck")).and(
asList(not(endingWithText("lechat"))));
secondConditions.add(notStartingAndEnding);
}
@org.junit.Test
public void givenStartsWithAndEndsWithConditionThenReturnValidSolrString() {
CompositeLogicalSearchCondition andSearchCondition = new CompositeLogicalSearchCondition(new SchemaFilters(schemaType),
LogicalOperator.AND, firstConditions);
assertThat(andSearchCondition.getSolrQuery(params))
.isEqualTo("( ( (*:* -(firstText:chuck*) ) ) AND ( firstText:*noris ) )");
}
@org.junit.Test
public void givenStartsWithConditionThenReturnValidSolrString() {
CompositeLogicalSearchCondition andSearchCondition = new CompositeLogicalSearchCondition(new SchemaFilters(schemaType),
LogicalOperator.AND, secondConditions);
assertThat(andSearchCondition.getSolrQuery(params)).isEqualTo(
"( ( ( (*:* -(firstText:chuck*) ) AND (*:* -(firstText:*lechat) ) ) ) )");
}
}