package com.constellio.model.entities.search.logical.condition;
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.MetadataSchemaType;
import com.constellio.model.entities.schemas.MetadataValueType;
import com.constellio.model.services.search.query.logical.LogicalOperator;
import com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators;
import com.constellio.model.services.search.query.logical.LogicalSearchValueCondition;
import com.constellio.model.services.search.query.logical.condition.DataStoreFieldLogicalSearchCondition;
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 DataStoreFieldLogicalSearchConditionTest extends ConstellioTest {
@Mock MetadataSchemaType schemaType;
@Mock MetadataSchema schema;
@Mock Metadata secondTextMetadata;
@Mock Metadata firstTextMetadata;
private LogicalSearchValueCondition startsWith;
private List<Metadata> metadatas;
private SolrQueryBuilderParams params = new SolrQueryBuilderParams(false, null);
@Before
public void setUp() {
willReturn("firstText").given(firstTextMetadata).getDataStoreCode();
willReturn("secondText").given(secondTextMetadata).getDataStoreCode();
willReturn(MetadataValueType.STRING).given(secondTextMetadata).getType();
willReturn(MetadataValueType.STRING).given(firstTextMetadata).getType();
metadatas = new ArrayList<>();
metadatas.add(firstTextMetadata);
metadatas.add(secondTextMetadata);
startsWith = LogicalSearchQueryOperators.startingWithText("edouard");
}
@Test
public void givenMetadatasAndAndOperatorStartsWithConditionThenReturnValidSolrString() {
DataStoreFieldLogicalSearchCondition andSearchCondition = new DataStoreFieldLogicalSearchCondition(
new SchemaFilters(schemaType), metadatas, LogicalOperator.AND, startsWith);
assertThat(andSearchCondition.getSolrQuery(params)).isEqualTo("( firstText:edouard* AND secondText:edouard* )");
}
@Test
public void givenMetadatasAndOrOperatorStartsWithConditionThenReturnValidSolrString() {
DataStoreFieldLogicalSearchCondition andSearchCondition = new DataStoreFieldLogicalSearchCondition(
new SchemaFilters(schemaType), metadatas, LogicalOperator.OR, startsWith);
assertThat(andSearchCondition.getSolrQuery(params)).isEqualTo("( firstText:edouard* OR secondText:edouard* )");
}
}