package org.molgenis.data.elasticsearch.request;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.index.query.*;
import org.mockito.ArgumentCaptor;
import org.molgenis.data.DataConverter;
import org.molgenis.data.Entity;
import org.molgenis.data.MolgenisQueryException;
import org.molgenis.data.Query;
import org.molgenis.data.elasticsearch.index.MappingsBuilder;
import org.molgenis.data.meta.model.Attribute;
import org.molgenis.data.meta.model.AttributeFactory;
import org.molgenis.data.meta.model.EntityType;
import org.molgenis.data.meta.model.EntityTypeFactory;
import org.molgenis.data.support.DynamicEntity;
import org.molgenis.data.support.QueryImpl;
import org.molgenis.test.data.AbstractMolgenisSpringTest;
import org.molgenis.util.MolgenisDateFormat;
import org.springframework.beans.factory.annotation.Autowired;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.text.ParseException;
import java.util.Arrays;
import java.util.Date;
import static java.util.Arrays.asList;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.molgenis.data.elasticsearch.index.ElasticsearchIndexCreator.DEFAULT_ANALYZER;
import static org.molgenis.data.meta.AttributeType.*;
import static org.molgenis.data.meta.model.EntityType.AttributeRole.ROLE_ID;
import static org.molgenis.data.meta.model.EntityType.AttributeRole.ROLE_LABEL;
import static org.testng.Assert.assertEquals;
// FIXME add nillable tests
public class QueryGeneratorTest extends AbstractMolgenisSpringTest
{
private static final String idAttrName = "xid";
private static final String boolAttrName = "xbool";
private static final String categoricalAttrName = "xcategorical";
private static final String compoundAttrName = "xcompound";
private static final String compoundPart0AttrName = "xcompoundpart0";
private static final String compoundPart1AttrName = "xcompoundpart1";
private static final String dateAttrName = "xdate";
private static final String dateTimeAttrName = "xdatetime";
private static final String decimalAttrName = "xdecimal";
private static final String emailAttrName = "xemail";
private static final String enumAttrName = "xenum";
private static final String htmlAttrName = "xhtml";
private static final String hyperlinkAttrName = "xhyperlink";
private static final String intAttrName = "xint";
private static final String longAttrName = "xlong";
private static final String mrefAttrName = "xmref";
private static final String scriptAttrName = "xscript";
private static final String stringAttrName = "xstring";
private static final String textAttrName = "xtext";
private static final String xrefAttrName = "xxref";
private static final String refStringAttrName = "ref_xstring";
private static final String refMrefAttrName = "ref_xmref";
private SearchRequestBuilder searchRequestBuilder;
private EntityType entityType;
private EntityType refEntityType;
@Autowired
EntityTypeFactory entityTypeFactory;
@Autowired
AttributeFactory attrFactory;
@BeforeMethod
public void setUp()
{
searchRequestBuilder = mock(SearchRequestBuilder.class);
refEntityType = entityTypeFactory.create().setName("ref_entity");
refEntityType.addAttribute(attrFactory.create().setName(idAttrName), ROLE_ID);
refEntityType.addAttribute(attrFactory.create().setName(refStringAttrName).setUnique(true), ROLE_LABEL);
refEntityType.addAttribute(attrFactory.create().setName(refMrefAttrName).setDataType(MREF).setNillable(true)
.setRefEntity(refEntityType));
entityType = entityTypeFactory.create().setName("entity");
entityType.addAttribute(attrFactory.create().setName(idAttrName), ROLE_ID);
entityType.addAttribute(attrFactory.create().setName(boolAttrName).setDataType(BOOL));
entityType.addAttribute(
attrFactory.create().setName(categoricalAttrName).setDataType(CATEGORICAL).setRefEntity(refEntityType));
Attribute compoundAttr = attrFactory.create().setName(compoundAttrName).setDataType(COMPOUND);
Attribute compoundPart0Attr = attrFactory.create().setName(compoundPart0AttrName).setDataType(STRING).setParent(compoundAttr);
Attribute compoundPart1Attr = attrFactory.create().setName(compoundPart1AttrName).setDataType(STRING).setParent(compoundAttr);
entityType.addAttribute(compoundAttr).addAttribute(compoundPart0Attr).addAttribute(compoundPart1Attr);
entityType.addAttribute(attrFactory.create().setName(dateAttrName).setDataType(DATE));
entityType.addAttribute(attrFactory.create().setName(dateTimeAttrName).setDataType(DATE_TIME));
entityType.addAttribute(attrFactory.create().setName(decimalAttrName).setDataType(DECIMAL));
entityType.addAttribute(attrFactory.create().setName(emailAttrName).setDataType(EMAIL));
entityType.addAttribute(attrFactory.create().setName(enumAttrName).setDataType(ENUM)
.setEnumOptions(asList("enum0", "enum1", "enum2")));
entityType.addAttribute(attrFactory.create().setName(htmlAttrName).setDataType(HTML));
entityType.addAttribute(attrFactory.create().setName(hyperlinkAttrName).setDataType(HYPERLINK));
entityType.addAttribute(attrFactory.create().setName(intAttrName).setDataType(INT));
entityType.addAttribute(attrFactory.create().setName(longAttrName).setDataType(LONG));
entityType
.addAttribute(attrFactory.create().setName(mrefAttrName).setDataType(MREF).setRefEntity(refEntityType));
entityType.addAttribute(attrFactory.create().setName(scriptAttrName).setDataType(SCRIPT));
entityType.addAttribute(attrFactory.create().setName(stringAttrName).setDataType(STRING));
entityType.addAttribute(attrFactory.create().setName(textAttrName).setDataType(TEXT));
entityType
.addAttribute(attrFactory.create().setName(xrefAttrName).setDataType(XREF).setRefEntity(refEntityType));
}
@Test(expectedExceptions = MolgenisQueryException.class)
public void generateOneQueryRuleGreaterInvalidAttribute()
{
String value = "str";
Query<Entity> q = new QueryImpl<>().gt(stringAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.rangeFilter(stringAttrName).gt(value));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleGreaterDate() throws ParseException
{
String date = "2015-01-22";
Date value = MolgenisDateFormat.getDateFormat().parse(date);
Query<Entity> q = new QueryImpl<>().gt(dateAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.rangeFilter(dateAttrName).gt(date));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleGreaterDateTime() throws ParseException
{
Date value = MolgenisDateFormat.getDateTimeFormat().parse("2015-05-22T11:12:13+0500");
Query<Entity> q = new QueryImpl<>().gt(dateTimeAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.rangeFilter(dateTimeAttrName).gt(DataConverter.toString(value)));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleGreaterDecimal()
{
Double value = 1.23;
Query<Entity> q = new QueryImpl<>().gt(decimalAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.rangeFilter(decimalAttrName).gt(value));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleGreaterInt()
{
Integer value = 1;
Query<Entity> q = new QueryImpl<>().gt(intAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.rangeFilter(intAttrName).gt(value));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleGreaterLong()
{
Long value = 1L;
Query<Entity> q = new QueryImpl<>().gt(longAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.rangeFilter(longAttrName).gt(value));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test(expectedExceptions = MolgenisQueryException.class)
public void generateOneQueryRuleGreaterEqualInvalidAttribute()
{
String value = "str";
Query<Entity> q = new QueryImpl<>().ge(stringAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.rangeFilter(stringAttrName).gte(value));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleGreaterEqualDate() throws ParseException
{
String date = "2015-05-22";
Date value = MolgenisDateFormat.getDateFormat().parse(date);
Query<Entity> q = new QueryImpl<>().ge(dateAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.rangeFilter(dateAttrName).gte(date));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleGreaterEqualDateTime() throws ParseException
{
Date value = MolgenisDateFormat.getDateTimeFormat().parse("2015-05-22T11:12:13+0500");
Query<Entity> q = new QueryImpl<>().ge(dateTimeAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.rangeFilter(dateTimeAttrName).gte(DataConverter.toString(value)));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleGreaterEqualDecimal()
{
Double value = 1.23;
Query<Entity> q = new QueryImpl<>().ge(decimalAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.rangeFilter(decimalAttrName).gte(value));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleGreaterEqualInt()
{
Integer value = 1;
Query<Entity> q = new QueryImpl<>().ge(intAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.rangeFilter(intAttrName).gte(value));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleGreaterEqualLong()
{
Long value = 1L;
Query<Entity> q = new QueryImpl<>().ge(longAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.rangeFilter(longAttrName).gte(value));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test(expectedExceptions = MolgenisQueryException.class)
public void generateOneQueryRuleLesserEqualInvalidAttribute()
{
String value = "str";
Query<Entity> q = new QueryImpl<>().le(stringAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.rangeFilter(stringAttrName).lte(value));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleLesserEqualDate() throws ParseException
{
String date = "2015-05-22";
Date value = MolgenisDateFormat.getDateFormat().parse(date);
Query<Entity> q = new QueryImpl<>().le(dateAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.rangeFilter(dateAttrName).lte(date));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleLesserEqualDateTime() throws ParseException
{
Date value = MolgenisDateFormat.getDateTimeFormat().parse("2015-05-22T11:12:13+0500");
Query<Entity> q = new QueryImpl<>().le(dateTimeAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.rangeFilter(dateTimeAttrName).lte(DataConverter.toString(value)));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleLesserEqualDecimal()
{
Double value = 1.23;
Query<Entity> q = new QueryImpl<>().le(decimalAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.rangeFilter(decimalAttrName).lte(value));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleLesserEqualInt()
{
Integer value = 1;
Query<Entity> q = new QueryImpl<>().le(intAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.rangeFilter(intAttrName).lte(value));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleLesserEqualLong()
{
Long value = 1L;
Query<Entity> q = new QueryImpl<>().le(longAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.rangeFilter(longAttrName).lte(value));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test(expectedExceptions = MolgenisQueryException.class)
public void generateOneQueryRuleLesserInvalidAttribute()
{
String value = "str";
Query<Entity> q = new QueryImpl<>().lt(stringAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.rangeFilter(stringAttrName).lt(value));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleInBool()
{
Iterable<Object> values = Arrays.asList(Boolean.TRUE, Boolean.FALSE);
Query<Entity> q = new QueryImpl<>().in(boolAttrName, values);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.inFilter(boolAttrName, new Object[] { Boolean.TRUE, Boolean.FALSE }));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleInCategorical_Ids()
{
Iterable<String> values = asList("id0", "id1", "id2");
Query<Entity> q = new QueryImpl<>().in(categoricalAttrName, values);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders
.nestedFilter(categoricalAttrName, FilterBuilders
.inFilter(categoricalAttrName + '.' + idAttrName + '.' + MappingsBuilder.FIELD_NOT_ANALYZED,
new Object[] { "id0", "id1", "id2" })));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleInCategorical_Entities()
{
Entity ref0 = new DynamicEntity(refEntityType);
ref0.set(idAttrName, "id0");
Entity ref1 = new DynamicEntity(refEntityType);
ref1.set(idAttrName, "id1");
Entity ref2 = new DynamicEntity(refEntityType);
ref2.set(idAttrName, "id2");
Iterable<Object> values = Arrays.asList(ref0, ref1, ref2);
Query<Entity> q = new QueryImpl<>().in(categoricalAttrName, values);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders
.nestedFilter(categoricalAttrName, FilterBuilders
.inFilter(categoricalAttrName + '.' + idAttrName + '.' + MappingsBuilder.FIELD_NOT_ANALYZED,
new Object[] { "id0", "id1", "id2" })));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleInDate() throws ParseException
{
Date date1 = MolgenisDateFormat.getDateFormat().parse("2015-05-22");
Date date2 = MolgenisDateFormat.getDateFormat().parse("2015-05-23");
Iterable<Object> values = Arrays.asList(date1, date2);
Query<Entity> q = new QueryImpl<>().in(dateAttrName, values);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.inFilter(dateAttrName, new Object[] { date1, date2 }));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleInDateTime() throws ParseException
{
Date date1 = MolgenisDateFormat.getDateFormat().parse("2015-05-22");
Date date2 = MolgenisDateFormat.getDateFormat().parse("2015-05-23");
Iterable<Object> values = Arrays.asList(date1, date2);
Query<Entity> q = new QueryImpl<>().in(dateTimeAttrName, values);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.inFilter(dateTimeAttrName, new Object[] { date1, date2 }));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleInDecimal()
{
Double double1 = 1.23;
Double double2 = 2.34;
Iterable<Object> values = Arrays.asList(double1, double2);
Query<Entity> q = new QueryImpl<>().in(decimalAttrName, values);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.inFilter(decimalAttrName, new Object[] { double1, double2 }));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleInEmail()
{
String value1 = "e@mail.com";
String value2 = "em@ail.com";
Iterable<Object> values = Arrays.asList(value1, value2);
Query<Entity> q = new QueryImpl<>().in(emailAttrName, values);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders
.inFilter(emailAttrName + '.' + MappingsBuilder.FIELD_NOT_ANALYZED, new Object[] { value1, value2 }));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleInEnum()
{
String value1 = "enum0";
String value2 = "enum1";
Iterable<Object> values = Arrays.asList(value1, value2);
Query<Entity> q = new QueryImpl<>().in(enumAttrName, values);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders
.inFilter(enumAttrName + '.' + MappingsBuilder.FIELD_NOT_ANALYZED, new Object[] { value1, value2 }));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleInHtml()
{
String value1 = "<h1>title</h1>";
String value2 = "<h2>subtitle</h2>";
Iterable<Object> values = Arrays.asList(value1, value2);
Query<Entity> q = new QueryImpl<>().in(htmlAttrName, values);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders
.inFilter(htmlAttrName + '.' + MappingsBuilder.FIELD_NOT_ANALYZED, new Object[] { value1, value2 }));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleInHyperlink()
{
String value1 = "http://www.site0.com/";
String value2 = "http://www.site1.com/";
Iterable<Object> values = Arrays.asList(value1, value2);
Query<Entity> q = new QueryImpl<>().in(hyperlinkAttrName, values);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders
.inFilter(hyperlinkAttrName + '.' + MappingsBuilder.FIELD_NOT_ANALYZED,
new Object[] { value1, value2 }));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleInInt()
{
Integer value1 = 1;
Integer value2 = 2;
Iterable<Object> values = Arrays.asList(value1, value2);
Query<Entity> q = new QueryImpl<>().in(intAttrName, values);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.inFilter(intAttrName, new Object[] { value1, value2 }));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleInLong()
{
Long value1 = 0L;
Long value2 = 1L;
Iterable<Object> values = Arrays.asList(value1, value2);
Query<Entity> q = new QueryImpl<>().in(longAttrName, values);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.inFilter(longAttrName, new Object[] { value1, value2 }));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleInMref_Entities()
{
Entity ref0 = new DynamicEntity(refEntityType);
ref0.set(idAttrName, "id0");
Entity ref1 = new DynamicEntity(refEntityType);
ref1.set(idAttrName, "id1");
Entity ref2 = new DynamicEntity(refEntityType);
ref2.set(idAttrName, "id2");
Iterable<Object> values = Arrays.asList(ref0, ref1, ref2);
Query<Entity> q = new QueryImpl<>().in(mrefAttrName, values);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders
.nestedFilter(mrefAttrName, FilterBuilders
.inFilter(mrefAttrName + '.' + idAttrName + '.' + MappingsBuilder.FIELD_NOT_ANALYZED,
new Object[] { "id0", "id1", "id2" })));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleInMref_Ids()
{
Iterable<String> values = asList("id0", "id1", "id2");
Query<Entity> q = new QueryImpl<>().in(mrefAttrName, values);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders
.nestedFilter(mrefAttrName, FilterBuilders
.inFilter(mrefAttrName + '.' + idAttrName + '.' + MappingsBuilder.FIELD_NOT_ANALYZED,
new Object[] { "id0", "id1", "id2" })));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleInScript()
{
String value1 = "var a = 0;";
String value2 = "var b = 'a'";
Iterable<Object> values = Arrays.asList(value1, value2);
Query<Entity> q = new QueryImpl<>().in(scriptAttrName, values);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders
.inFilter(scriptAttrName + '.' + MappingsBuilder.FIELD_NOT_ANALYZED, new Object[] { value1, value2 }));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleInString()
{
String value1 = "str0";
String value2 = "str1";
Iterable<Object> values = Arrays.asList(value1, value2);
Query<Entity> q = new QueryImpl<>().in(stringAttrName, values);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders
.inFilter(stringAttrName + '.' + MappingsBuilder.FIELD_NOT_ANALYZED, new Object[] { value1, value2 }));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleInText()
{
String value1 = "some very long text";
String value2 = "a bit shorter text";
Iterable<Object> values = Arrays.asList(value1, value2);
Query<Entity> q = new QueryImpl<>().in(textAttrName, values);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders
.inFilter(textAttrName + '.' + MappingsBuilder.FIELD_NOT_ANALYZED, new Object[] { value1, value2 }));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleInXref_Ids()
{
Iterable<String> values = asList("id0", "id1", "id2");
Query<Entity> q = new QueryImpl<>().in(xrefAttrName, values);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders
.nestedFilter(xrefAttrName, FilterBuilders
.inFilter(xrefAttrName + '.' + idAttrName + '.' + MappingsBuilder.FIELD_NOT_ANALYZED,
new Object[] { "id0", "id1", "id2" })));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleInXref_Entities()
{
Entity ref0 = new DynamicEntity(refEntityType);
ref0.set(idAttrName, "id0");
Entity ref1 = new DynamicEntity(refEntityType);
ref1.set(idAttrName, "id1");
Entity ref2 = new DynamicEntity(refEntityType);
ref2.set(idAttrName, "id2");
Iterable<Object> values = Arrays.asList(ref0, ref1, ref2);
Query<Entity> q = new QueryImpl<>().in(xrefAttrName, values);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders
.nestedFilter(xrefAttrName, FilterBuilders
.inFilter(xrefAttrName + '.' + idAttrName + '.' + MappingsBuilder.FIELD_NOT_ANALYZED,
new Object[] { "id0", "id1", "id2" })));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleLesserDate() throws ParseException
{
String date = "2015-05-22";
Date value = MolgenisDateFormat.getDateFormat().parse(date);
Query<Entity> q = new QueryImpl<>().lt(dateAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.rangeFilter(dateAttrName).lt(date));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleLesserDateTime() throws ParseException
{
Date value = MolgenisDateFormat.getDateTimeFormat().parse("2015-05-22T11:12:13+0500");
Query<Entity> q = new QueryImpl<>().lt(dateTimeAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.rangeFilter(dateTimeAttrName).lt(DataConverter.toString(value)));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleLesserDecimal()
{
Double value = 1.23;
Query<Entity> q = new QueryImpl<>().lt(decimalAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.rangeFilter(decimalAttrName).lt(value));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleLesserInt()
{
Integer value = 1;
Query<Entity> q = new QueryImpl<>().lt(intAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.rangeFilter(intAttrName).lt(value));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleLesserLong()
{
Long value = 1L;
Query<Entity> q = new QueryImpl<>().lt(longAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.rangeFilter(longAttrName).lt(value));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test(expectedExceptions = MolgenisQueryException.class)
public void generateOneQueryRuleLikeBool()
{
String value = "value";
Query<Entity> q = new QueryImpl<>().like(boolAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
}
@Test(expectedExceptions = UnsupportedOperationException.class)
public void generateOneQueryRuleLikeCategorical()
{
String value = "value";
Query<Entity> q = new QueryImpl<>().like(categoricalAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
}
@Test(expectedExceptions = MolgenisQueryException.class)
public void generateOneQueryRuleLikeCompound()
{
String value = "value";
Query<Entity> q = new QueryImpl<>().like(compoundAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
}
@Test
public void generateOneQueryRuleLikeCompoundPartString()
{
String value = "value";
Query<Entity> q = new QueryImpl<>().like(compoundPart0AttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.matchQuery(compoundPart0AttrName + '.' + MappingsBuilder.FIELD_NGRAM_ANALYZED, value)
.analyzer(DEFAULT_ANALYZER);
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test(expectedExceptions = MolgenisQueryException.class)
public void generateOneQueryRuleLikeDate()
{
String value = "value";
Query<Entity> q = new QueryImpl<>().like(dateAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
}
@Test(expectedExceptions = MolgenisQueryException.class)
public void generateOneQueryRuleLikeDateTime()
{
String value = "value";
Query<Entity> q = new QueryImpl<>().like(dateTimeAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
}
@Test(expectedExceptions = MolgenisQueryException.class)
public void generateOneQueryRuleLikeDecimal()
{
String value = "value";
Query<Entity> q = new QueryImpl<>().like(decimalAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
}
@Test
public void generateOneQueryRuleLikeEmail()
{
String value = "e@mail.com";
Query<Entity> q = new QueryImpl<>().like(emailAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.matchQuery(emailAttrName + '.' + MappingsBuilder.FIELD_NGRAM_ANALYZED, value)
.analyzer(DEFAULT_ANALYZER);
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleLikeEnum()
{
String value = "enum0";
Query<Entity> q = new QueryImpl<>().like(enumAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.matchQuery(enumAttrName + '.' + MappingsBuilder.FIELD_NGRAM_ANALYZED, value)
.analyzer(DEFAULT_ANALYZER);
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test(expectedExceptions = UnsupportedOperationException.class)
public void generateOneQueryRuleLikeHtml()
{
String value = "<h1>html</h1>";
Query<Entity> q = new QueryImpl<>().like(htmlAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
}
@Test
public void generateOneQueryRuleLikeHyperlink()
{
String value = "http://www.website.com/";
Query<Entity> q = new QueryImpl<>().like(hyperlinkAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.matchQuery(hyperlinkAttrName + '.' + MappingsBuilder.FIELD_NGRAM_ANALYZED, value)
.analyzer(DEFAULT_ANALYZER);
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test(expectedExceptions = MolgenisQueryException.class)
public void generateOneQueryRuleLikeInt()
{
String value = "value";
Query<Entity> q = new QueryImpl<>().like(intAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
}
@Test(expectedExceptions = MolgenisQueryException.class)
public void generateOneQueryRuleLikeLong()
{
String value = "value";
Query<Entity> q = new QueryImpl<>().like(longAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
}
@Test(expectedExceptions = UnsupportedOperationException.class)
public void generateOneQueryRuleLikeMref()
{
String value = "value";
Query<Entity> q = new QueryImpl<>().like(mrefAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
}
@Test(expectedExceptions = UnsupportedOperationException.class)
public void generateOneQueryRuleLikeScript()
{
String value = "int a = 1;";
Query<Entity> q = new QueryImpl<>().like(scriptAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
}
@Test
public void generateOneQueryRuleLikeString()
{
String value = "value";
Query<Entity> q = new QueryImpl<>().like(stringAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.matchQuery(stringAttrName + '.' + MappingsBuilder.FIELD_NGRAM_ANALYZED, value)
.analyzer(DEFAULT_ANALYZER);
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test(expectedExceptions = UnsupportedOperationException.class)
public void generateOneQueryRuleLikeText()
{
String value = "some long text";
Query<Entity> q = new QueryImpl<>().like(textAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
}
@Test(expectedExceptions = UnsupportedOperationException.class)
public void generateOneQueryRuleLikeXref()
{
String value = "value";
Query<Entity> q = new QueryImpl<>().like(xrefAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
}
@Test
public void generateOneQueryRuleEqualsBoolNull()
{
Boolean value = null;
Query<Entity> q = new QueryImpl<>().eq(boolAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.missingFilter(boolAttrName).existence(true).nullValue(true));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
// FIXME add test for ref entity where id attribute is int
// FIXME add test where value is entity
@Test
public void generateOneQueryRuleEqualsCategoricalNull()
{
String value = null;
Query<Entity> q = new QueryImpl<>().eq(categoricalAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders
.notFilter(FilterBuilders.nestedFilter(categoricalAttrName, FilterBuilders
.existsFilter(categoricalAttrName + ".xid." + MappingsBuilder.FIELD_NOT_ANALYZED))));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test(expectedExceptions = MolgenisQueryException.class)
public void generateOneQueryRuleEqualsCompoundNull()
{
Object value = null;
Query<Entity> q = new QueryImpl<>().eq(compoundAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
}
@Test
public void generateOneQueryRuleEqualsCompoundPartStringNull()
{
String value = null;
Query<Entity> q = new QueryImpl<>().eq(compoundPart0AttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.missingFilter(compoundPart0AttrName).existence(true).nullValue(true));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleEqualsDateNull() throws ParseException
{
Date value = null;
Query<Entity> q = new QueryImpl<>().eq(dateAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.missingFilter(dateAttrName).existence(true).nullValue(true));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleEqualsDateTimeNull() throws ParseException
{
Date value = null;
Query<Entity> q = new QueryImpl<>().eq(dateTimeAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.missingFilter(dateTimeAttrName).existence(true).nullValue(true));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleEqualsDecimalNull()
{
Double value = null;
Query<Entity> q = new QueryImpl<>().eq(decimalAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.missingFilter(decimalAttrName).existence(true).nullValue(true));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleEqualsEmailNull()
{
String value = null;
Query<Entity> q = new QueryImpl<>().eq(emailAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.missingFilter(emailAttrName).existence(true).nullValue(true));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleEqualsEnumNull()
{
String value = null;
Query<Entity> q = new QueryImpl<>().eq(enumAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.missingFilter(enumAttrName).existence(true).nullValue(true));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleEqualsHtmlNull()
{
String value = null;
Query<Entity> q = new QueryImpl<>().eq(htmlAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.missingFilter(htmlAttrName).existence(true).nullValue(true));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleEqualsHyperlinkNull()
{
String value = null;
Query<Entity> q = new QueryImpl<>().eq(hyperlinkAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.missingFilter(hyperlinkAttrName).existence(true).nullValue(true));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleEqualsIntNull()
{
Integer value = null;
Query<Entity> q = new QueryImpl<>().eq(intAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.missingFilter(intAttrName).existence(true).nullValue(true));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleEqualsLongNull()
{
Long value = null;
Query<Entity> q = new QueryImpl<>().eq(longAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.missingFilter(longAttrName).existence(true).nullValue(true));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
// TODO enable when implemented in QueryGenerator (see note in QueryGenerator)
// @Test
// public void generateOneQueryRuleEqualsMrefNull()
// {
// }
@Test
public void generateOneQueryRuleEqualsScriptNull()
{
String value = null;
Query<Entity> q = new QueryImpl<>().eq(scriptAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.missingFilter(scriptAttrName).existence(true).nullValue(true));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleEqualsStringNull()
{
String value = null;
Query<Entity> q = new QueryImpl<>().eq(stringAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.missingFilter(stringAttrName).existence(true).nullValue(true));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleEqualsTextNull()
{
String value = null;
Query<Entity> q = new QueryImpl<>().eq(textAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.missingFilter(textAttrName).existence(true).nullValue(true));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
// FIXME add test for ref entity where id attribute is int
// FIXME add test where value is entity
@Test
public void generateOneQueryRuleEqualsXrefNull()
{
String value = null;
Query<Entity> q = new QueryImpl<>().eq(xrefAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders
.notFilter(FilterBuilders.nestedFilter(xrefAttrName,
FilterBuilders.existsFilter(xrefAttrName + ".xid." + MappingsBuilder.FIELD_NOT_ANALYZED))));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleNotEqualsBoolNull()
{
Boolean value = null;
Query<Entity> q = new QueryImpl<>().not().eq(boolAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.missingFilter(boolAttrName).existence(true).nullValue(true)));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
// FIXME add test for ref entity where id attribute is int
// FIXME add test where value is entity
@Test
public void generateOneQueryRuleNotEqualsCategoricalNull()
{
String value = null;
Query<Entity> q = new QueryImpl<>().not().eq(categoricalAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.notFilter(FilterBuilders
.nestedFilter(categoricalAttrName, FilterBuilders
.existsFilter(categoricalAttrName + ".xid." + MappingsBuilder.FIELD_NOT_ANALYZED)))));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test(expectedExceptions = MolgenisQueryException.class)
public void generateOneQueryRuleNotEqualsCompoundNull()
{
Object value = null;
Query<Entity> q = new QueryImpl<>().not().eq(compoundAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
}
@Test
public void generateOneQueryRuleNotEqualsCompoundPartStringNull()
{
String value = null;
Query<Entity> q = new QueryImpl<>().not().eq(compoundPart0AttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.missingFilter(compoundPart0AttrName).existence(true).nullValue(true)));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleNotEqualsDateNull() throws ParseException
{
Date value = null;
Query<Entity> q = new QueryImpl<>().not().eq(dateAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.missingFilter(dateAttrName).existence(true).nullValue(true)));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleNotEqualsDateTimeNull() throws ParseException
{
Date value = null;
Query<Entity> q = new QueryImpl<>().not().eq(dateTimeAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.missingFilter(dateTimeAttrName).existence(true).nullValue(true)));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleNotEqualsDecimalNull()
{
Double value = null;
Query<Entity> q = new QueryImpl<>().not().eq(decimalAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.missingFilter(decimalAttrName).existence(true).nullValue(true)));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleNotEqualsEmailNull()
{
String value = null;
Query<Entity> q = new QueryImpl<>().not().eq(emailAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.missingFilter(emailAttrName).existence(true).nullValue(true)));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleNotEqualsEnumNull()
{
String value = null;
Query<Entity> q = new QueryImpl<>().not().eq(enumAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.missingFilter(enumAttrName).existence(true).nullValue(true)));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleNotEqualsHtmlNull()
{
String value = null;
Query<Entity> q = new QueryImpl<>().not().eq(htmlAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.missingFilter(htmlAttrName).existence(true).nullValue(true)));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleNotEqualsHyperlinkNull()
{
String value = null;
Query<Entity> q = new QueryImpl<>().not().eq(hyperlinkAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.missingFilter(hyperlinkAttrName).existence(true).nullValue(true)));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleNotEqualsIntNull()
{
Integer value = null;
Query<Entity> q = new QueryImpl<>().not().eq(intAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.missingFilter(intAttrName).existence(true).nullValue(true)));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleNotEqualsLongNull()
{
Long value = null;
Query<Entity> q = new QueryImpl<>().not().eq(longAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.missingFilter(longAttrName).existence(true).nullValue(true)));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
// TODO enable when implemented in QueryGenerator (see note in QueryGenerator)
// @Test
// public void generateOneQueryRuleNotEqualsMrefNull()
// {
// }
@Test
public void generateOneQueryRuleNotEqualsScriptNull()
{
String value = null;
Query<Entity> q = new QueryImpl<>().not().eq(scriptAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.missingFilter(scriptAttrName).existence(true).nullValue(true)));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleNotEqualsStringNull()
{
String value = null;
Query<Entity> q = new QueryImpl<>().not().eq(stringAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.missingFilter(stringAttrName).existence(true).nullValue(true)));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleNotEqualsTextNull()
{
String value = null;
Query<Entity> q = new QueryImpl<>().not().eq(textAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.missingFilter(textAttrName).existence(true).nullValue(true)));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
// FIXME add test for ref entity where id attribute is int
// FIXME add test where value is entity
@Test
public void generateOneQueryRuleNotEqualsXrefNull()
{
String value = null;
Query<Entity> q = new QueryImpl<>().not().eq(xrefAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.notFilter(FilterBuilders
.nestedFilter(xrefAttrName, FilterBuilders
.existsFilter(xrefAttrName + ".xid." + MappingsBuilder.FIELD_NOT_ANALYZED)))));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleEqualsBool()
{
Boolean value = Boolean.TRUE;
Query<Entity> q = new QueryImpl<>().eq(boolAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.termFilter(boolAttrName, value));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
// FIXME add test for ref entity where id attribute is int
// FIXME add test where value is entity
@Test
public void generateOneQueryRuleEqualsCategorical()
{
String value = "id";
Query<Entity> q = new QueryImpl<>().eq(categoricalAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders
.nestedFilter(categoricalAttrName, FilterBuilders
.termFilter(categoricalAttrName + ".xid." + MappingsBuilder.FIELD_NOT_ANALYZED, value)));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test(expectedExceptions = MolgenisQueryException.class)
public void generateOneQueryRuleEqualsCompound()
{
Object value = "value";
Query<Entity> q = new QueryImpl<>().eq(compoundAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
}
@Test
public void generateOneQueryRuleEqualsCompoundPartString()
{
String value = "value";
Query<Entity> q = new QueryImpl<>().eq(compoundPart0AttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.termFilter(compoundPart0AttrName + '.' + MappingsBuilder.FIELD_NOT_ANALYZED, value));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleEqualsDate() throws ParseException
{
Date value = MolgenisDateFormat.getDateFormat().parse("2015-01-15");
Query<Entity> q = new QueryImpl<>().eq(dateAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.termFilter(dateAttrName, "2015-01-15"));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleEqualsDateTime() throws ParseException
{
Date value = MolgenisDateFormat.getDateTimeFormat().parse("2015-05-22T11:12:13+0500");
Query<Entity> q = new QueryImpl<>().eq(dateTimeAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.termFilter(dateTimeAttrName, MolgenisDateFormat.getDateTimeFormat().format(value)));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleEqualsDecimal()
{
Double value = Double.valueOf(1.23);
Query<Entity> q = new QueryImpl<>().eq(decimalAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.termFilter(decimalAttrName, value));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleEqualsEmail()
{
String value = "e@mail.com";
Query<Entity> q = new QueryImpl<>().eq(emailAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.termFilter(emailAttrName + '.' + MappingsBuilder.FIELD_NOT_ANALYZED, value));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleEqualsEnum()
{
String value = "enum0";
Query<Entity> q = new QueryImpl<>().eq(enumAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.termFilter(enumAttrName + '.' + MappingsBuilder.FIELD_NOT_ANALYZED, value));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleEqualsHtml()
{
String value = "<h1>html</h1>";
Query<Entity> q = new QueryImpl<>().eq(htmlAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.termFilter(htmlAttrName + '.' + MappingsBuilder.FIELD_NOT_ANALYZED, value));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleEqualsHyperlink()
{
String value = "http://www.website.com/";
Query<Entity> q = new QueryImpl<>().eq(hyperlinkAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.termFilter(hyperlinkAttrName + '.' + MappingsBuilder.FIELD_NOT_ANALYZED, value));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleEqualsInt()
{
Integer value = Integer.valueOf(1);
Query<Entity> q = new QueryImpl<>().eq(intAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.termFilter(intAttrName, value));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleEqualsLong()
{
Long value = Long.valueOf(1);
Query<Entity> q = new QueryImpl<>().eq(longAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.termFilter(longAttrName, value));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
// TODO enable when implemented in QueryGenerator (see note in QueryGenerator)
// @Test
// public void generateOneQueryRuleEqualsMref()
// {
// }
@Test
public void generateOneQueryRuleEqualsScript()
{
String value = "int a = 1;";
Query<Entity> q = new QueryImpl<>().eq(scriptAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.termFilter(scriptAttrName + '.' + MappingsBuilder.FIELD_NOT_ANALYZED, value));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleEqualsString()
{
String value = "value";
Query<Entity> q = new QueryImpl<>().eq(stringAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.termFilter(stringAttrName + '.' + MappingsBuilder.FIELD_NOT_ANALYZED, value));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleEqualsText()
{
String value = "some long text";
Query<Entity> q = new QueryImpl<>().eq(textAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.termFilter(textAttrName + '.' + MappingsBuilder.FIELD_NOT_ANALYZED, value));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
// FIXME add test for ref entity where id attribute is int
// FIXME add test where value is entity
@Test
public void generateOneQueryRuleEqualsXref()
{
String value = "id";
Query<Entity> q = new QueryImpl<>().eq(xrefAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders
.nestedFilter(xrefAttrName,
FilterBuilders.termFilter(xrefAttrName + ".xid." + MappingsBuilder.FIELD_NOT_ANALYZED, value)));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleNotEqualsBool()
{
Boolean value = Boolean.TRUE;
Query<Entity> q = new QueryImpl<>().not().eq(boolAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.termFilter(boolAttrName, value)));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
// FIXME add test for ref entity where id attribute is int
// FIXME add test where value is entity
@Test
public void generateOneQueryRuleNotEqualsCategorical()
{
String value = "id";
Query<Entity> q = new QueryImpl<>().not().eq(categoricalAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.nestedFilter(categoricalAttrName,
FilterBuilders.termFilter(categoricalAttrName + ".xid." + MappingsBuilder.FIELD_NOT_ANALYZED,
value))));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test(expectedExceptions = MolgenisQueryException.class)
public void generateOneQueryRuleNotEqualsCompound()
{
Object value = "value";
Query<Entity> q = new QueryImpl<>().not().eq(compoundAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
}
@Test
public void generateOneQueryRuleNotEqualsCompoundPartString()
{
String value = "value";
Query<Entity> q = new QueryImpl<>().not().eq(compoundPart0AttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders
.termFilter(compoundPart0AttrName + '.' + MappingsBuilder.FIELD_NOT_ANALYZED, value)));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleNotEqualsDate() throws ParseException
{
Date value = MolgenisDateFormat.getDateFormat().parse("2015-05-22");
Query<Entity> q = new QueryImpl<>().not().eq(dateAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.termFilter(dateAttrName, MolgenisDateFormat.getDateFormat().format(value))));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleNotEqualsDateTime() throws ParseException
{
Date value = MolgenisDateFormat.getDateTimeFormat().parse("2015-05-22T11:12:13+0500");
Query<Entity> q = new QueryImpl<>().not().eq(dateTimeAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders
.termFilter(dateTimeAttrName, MolgenisDateFormat.getDateTimeFormat().format(value))));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleNotEqualsDecimal()
{
Double value = Double.valueOf(1.23);
Query<Entity> q = new QueryImpl<>().not().eq(decimalAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.termFilter(decimalAttrName, value)));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleNotEqualsEmail()
{
String value = "e@mail.com";
Query<Entity> q = new QueryImpl<>().not().eq(emailAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.termFilter(emailAttrName + '.' + MappingsBuilder.FIELD_NOT_ANALYZED, value)));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleNotEqualsEnum()
{
String value = "enum0";
Query<Entity> q = new QueryImpl<>().not().eq(enumAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.termFilter(enumAttrName + '.' + MappingsBuilder.FIELD_NOT_ANALYZED, value)));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleNotEqualsHtml()
{
String value = "<h1>html</h1>";
Query<Entity> q = new QueryImpl<>().not().eq(htmlAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.termFilter(htmlAttrName + '.' + MappingsBuilder.FIELD_NOT_ANALYZED, value)));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleNotEqualsHyperlink()
{
String value = "http://www.website.com/";
Query<Entity> q = new QueryImpl<>().not().eq(hyperlinkAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders
.termFilter(hyperlinkAttrName + '.' + MappingsBuilder.FIELD_NOT_ANALYZED, value)));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleNotEqualsInt()
{
Integer value = Integer.valueOf(1);
Query<Entity> q = new QueryImpl<>().not().eq(intAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.termFilter(intAttrName, value)));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleNotEqualsLong()
{
Long value = Long.valueOf(1);
Query<Entity> q = new QueryImpl<>().not().eq(longAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.termFilter(longAttrName, value)));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
// TODO enable when implemented in QueryGenerator (see note in QueryGenerator)
// @Test
// public void generateOneQueryRuleNotEqualsMref()
// {
// }
@Test
public void generateOneQueryRuleNotEqualsScript()
{
String value = "int a = 1;";
Query<Entity> q = new QueryImpl<>().not().eq(scriptAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.termFilter(scriptAttrName + '.' + MappingsBuilder.FIELD_NOT_ANALYZED, value)));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleNotEqualsString()
{
String value = "value";
Query<Entity> q = new QueryImpl<>().not().eq(stringAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.termFilter(stringAttrName + '.' + MappingsBuilder.FIELD_NOT_ANALYZED, value)));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleNotEqualsText()
{
String value = "some long text";
Query<Entity> q = new QueryImpl<>().not().eq(textAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.termFilter(textAttrName + '.' + MappingsBuilder.FIELD_NOT_ANALYZED, value)));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
// FIXME add test for ref entity where id attribute is int
// FIXME add test where value is entity
@Test
public void generateOneQueryRuleNotEqualsXref()
{
String value = "id";
Query<Entity> q = new QueryImpl<>().not().eq(xrefAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.boolQuery().mustNot(QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.nestedFilter(xrefAttrName, FilterBuilders
.termFilter(xrefAttrName + ".xid." + MappingsBuilder.FIELD_NOT_ANALYZED, value))));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleRangeInt()
{
Integer low = Integer.valueOf(3);
Integer high = Integer.valueOf(9);
Query<Entity> q = new QueryImpl<>().rng(intAttrName, low, high);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.rangeFilter(intAttrName).gte(3).lte(9));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleRangeLong()
{
Long low = Long.valueOf(3);
Long high = Long.valueOf(9);
Query<Entity> q = new QueryImpl<>().rng(longAttrName, low, high);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.rangeFilter(longAttrName).gte(3).lte(9));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleSearchAllFields()
{
String value = "my text";
Query<Entity> q = new QueryImpl<>().search(value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.matchPhraseQuery("_all", value).slop(10);
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test(expectedExceptions = MolgenisQueryException.class)
public void generateOneQueryRuleSearchOneFieldBool()
{
String value = "value";
Query<Entity> q = new QueryImpl<>().search(boolAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
}
@Test
public void generateOneQueryRuleSearchOneFieldCategorical()
{
String value = "text";
Query<Entity> q = new QueryImpl<>().search(categoricalAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.nestedQuery(categoricalAttrName, QueryBuilders.matchQuery(categoricalAttrName + "._all", value));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test(expectedExceptions = MolgenisQueryException.class)
public void generateOneQueryRuleSearchOneFieldCompound()
{
String value = "value";
Query<Entity> q = new QueryImpl<>().search(compoundAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
}
@Test
public void generateOneQueryRuleSearchOneFieldCompoundPartString()
{
String value = "value";
Query<Entity> q = new QueryImpl<>().search(compoundPart0AttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.matchQuery(compoundPart0AttrName, value);
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleSearchOneFieldDate() throws ParseException
{
String value = MolgenisDateFormat.getDateFormat().parse("2015-05-22").toString();
Query<Entity> q = new QueryImpl<>().search(dateAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.matchQuery(dateAttrName, value);
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleSearchOneFieldDateTime() throws ParseException
{
String value = MolgenisDateFormat.getDateFormat().parse("2015-05-22T11:12:13+0500").toString();
Query<Entity> q = new QueryImpl<>().search(dateTimeAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.matchQuery(dateTimeAttrName, value);
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleSearchOneFieldDecimal()
{
String value = Double.valueOf(1.23).toString();
Query<Entity> q = new QueryImpl<>().search(decimalAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.matchQuery(decimalAttrName, value);
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleSearchOneFieldEmail()
{
String value = "e@mail.com";
Query<Entity> q = new QueryImpl<>().search(emailAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.matchQuery(emailAttrName, value);
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleSearchOneFieldEnum()
{
String value = "enum0";
Query<Entity> q = new QueryImpl<>().search(enumAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.matchQuery(enumAttrName, value);
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleSearchOneFieldHtml()
{
String value = "<h1>html</h1>";
Query<Entity> q = new QueryImpl<>().search(htmlAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.matchQuery(htmlAttrName, value);
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleSearchOneFieldHyperlink()
{
String value = "http://www.website.com/";
Query<Entity> q = new QueryImpl<>().search(hyperlinkAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.matchQuery(hyperlinkAttrName, value);
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleSearchOneFieldInt()
{
String value = Integer.valueOf(1).toString();
Query<Entity> q = new QueryImpl<>().search(intAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.matchQuery(intAttrName, value);
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleSearchOneFieldLong()
{
String value = Long.valueOf(1).toString();
Query<Entity> q = new QueryImpl<>().search(longAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.matchQuery(longAttrName, value);
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleSearchOneFieldMref()
{
String value = "value";
Query<Entity> q = new QueryImpl<>().search(mrefAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.nestedQuery(mrefAttrName, QueryBuilders.matchQuery(mrefAttrName + "._all", value));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleSearchOneFieldScript()
{
String value = "int a = 1;";
Query<Entity> q = new QueryImpl<>().search(scriptAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.matchQuery(scriptAttrName, value);
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleSearchOneFieldString()
{
String value = "value";
Query<Entity> q = new QueryImpl<>().search(stringAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.matchQuery(stringAttrName, value);
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleSearchOneFieldText()
{
String value = "some long text";
Query<Entity> q = new QueryImpl<>().search(textAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders.matchQuery(textAttrName, value);
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateOneQueryRuleSearchOneFieldXref()
{
String value = "text";
Query<Entity> q = new QueryImpl<>().search(xrefAttrName, value);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
QueryBuilder expectedQuery = QueryBuilders
.nestedQuery(xrefAttrName, QueryBuilders.matchQuery(xrefAttrName + "._all", value));
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
@Test
public void generateMultipleQueryRule()
{
// query: a or (b and c)
Boolean booleanValue = Boolean.TRUE;
String stringValue = "str";
Integer intValue = 1;
Query<Entity> q = new QueryImpl<>().eq(boolAttrName, booleanValue).or().nest().eq(stringAttrName, stringValue)
.and().eq(intAttrName, intValue).unnest();
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
FilteredQueryBuilder booleanQuery = QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.termFilter(boolAttrName, booleanValue));
QueryBuilder stringQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.termFilter(stringAttrName + '.' + MappingsBuilder.FIELD_NOT_ANALYZED, stringValue));
QueryBuilder intQuery = QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.termFilter(intAttrName, intValue));
BoolQueryBuilder stringIntQuery = QueryBuilders.boolQuery().must(stringQuery).must(intQuery);
QueryBuilder expectedQuery = QueryBuilders.boolQuery().should(booleanQuery).should(stringIntQuery)
.minimumNumberShouldMatch(1);
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
// regression test for https://github.com/molgenis/molgenis/issues/2326
@Test
public void generateMultipleQueryRuleMultipleNotClauses()
{
// query: a or (b and c)
Boolean booleanValue = Boolean.TRUE;
String stringValue = "str";
Integer intValue = 1;
Query<Entity> q = new QueryImpl<>().eq(boolAttrName, booleanValue).and().not().eq(stringAttrName, stringValue)
.and().not().eq(intAttrName, intValue);
new QueryGenerator().generate(searchRequestBuilder, q, entityType);
ArgumentCaptor<QueryBuilder> captor = ArgumentCaptor.forClass(QueryBuilder.class);
verify(searchRequestBuilder).setQuery(captor.capture());
FilteredQueryBuilder booleanQuery = QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.termFilter(boolAttrName, booleanValue));
QueryBuilder stringQuery = QueryBuilders.filteredQuery(QueryBuilders.matchAllQuery(),
FilterBuilders.termFilter(stringAttrName + '.' + MappingsBuilder.FIELD_NOT_ANALYZED, stringValue));
QueryBuilder intQuery = QueryBuilders
.filteredQuery(QueryBuilders.matchAllQuery(), FilterBuilders.termFilter(intAttrName, intValue));
QueryBuilder expectedQuery = QueryBuilders.boolQuery().must(booleanQuery).mustNot(stringQuery)
.mustNot(intQuery);
assertQueryBuilderEquals(captor.getValue(), expectedQuery);
}
private void assertQueryBuilderEquals(QueryBuilder actual, QueryBuilder expected)
{
// QueryBuilder classes do not implement equals
assertEquals(actual.toString().replaceAll("\\s", ""), expected.toString().replaceAll("\\s", ""));
}
}