package com.constellio.model.entities.search.logical.condition;
import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.where;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.BDDMockito.willReturn;
import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import com.constellio.model.entities.schemas.Metadata;
import com.constellio.model.entities.schemas.MetadataSchema;
import com.constellio.model.entities.schemas.MetadataValueType;
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;
import com.constellio.sdk.tests.ConstellioTest;
/**
* Created by maxime on 7/31/14.
*/
public class CompositeLogicalSearchConditionTest extends ConstellioTest {
@Mock MetadataSchema schema;
@Mock Metadata booleanMetadata;
@Mock Metadata firstTextMetadata;
private List<LogicalSearchCondition> validConditions;
private SolrQueryBuilderParams params = new SolrQueryBuilderParams(false, null);
@Before
public void setUp() {
willReturn("firstText").given(firstTextMetadata).getDataStoreCode();
willReturn(MetadataValueType.BOOLEAN).given(booleanMetadata).getType();
willReturn(MetadataValueType.STRING).given(firstTextMetadata).getType();
validConditions = new ArrayList<>();
LogicalSearchCondition startsWith = where(firstTextMetadata).isStartingWithText("chuck");
LogicalSearchCondition endsWith = where(firstTextMetadata).isEndingWithText("noris");
LogicalSearchCondition contains = where(firstTextMetadata).isContainingText("lechat");
validConditions.add(startsWith);
validConditions.add(contains);
validConditions.add(endsWith);
}
@Test
public void givenStartsWithAndEndsWithConditionThenReturnValidSolrString() {
CompositeLogicalSearchCondition andSearchCondition = new CompositeLogicalSearchCondition(new SchemaFilters(schema),
LogicalOperator.AND, validConditions);
assertThat(andSearchCondition.getSolrQuery(params)).isEqualTo(
"( ( firstText:chuck* ) AND ( firstText:*lechat* ) AND ( firstText:*noris ) )");
}
@Test
public void givenStartsWithOrEndsWithConditionThenReturnValidSolrString() {
CompositeLogicalSearchCondition andSearchCondition = new CompositeLogicalSearchCondition(new SchemaFilters(schema),
LogicalOperator.OR, validConditions);
assertThat(andSearchCondition.getSolrQuery(params)).isEqualTo(
"( ( firstText:chuck* ) OR ( firstText:*lechat* ) OR ( firstText:*noris ) )");
}
}