/*
* Copyright 2015 Hewlett-Packard Development Company, L.P.
* Licensed under the MIT License (the "License"); you may not use this file except in compliance with the License.
*/
package com.hp.autonomy.frontend.find.core.web;
import com.hp.autonomy.searchcomponents.core.search.QueryRequest;
import com.hp.autonomy.searchcomponents.core.search.QueryRestrictions;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.Serializable;
import java.util.List;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
public abstract class RequestMapperTest<R extends QueryRequest<Q>, Q extends QueryRestrictions<S>, S extends Serializable> {
private RequestMapper<R> requestMapper;
protected abstract RequestMapper<R> constructRequestMapper();
protected abstract String completeJsonObject() throws IOException;
protected abstract String minimalJsonObject() throws IOException;
protected abstract void validateDatabases(final List<S> databases);
protected abstract void validate(final R queryRequest);
protected abstract void validateMinimal(final R queryRequest);
@Before
public void setUp() {
requestMapper = constructRequestMapper();
}
@Test
public void jsonToQueryRequest() throws IOException {
final String json = completeJsonObject();
final R queryRequest = requestMapper.parseQueryRequest(json);
assertNotNull(queryRequest.getQueryRestrictions());
assertThat(queryRequest.getQueryRestrictions().getQueryText(), is("Homer"));
assertThat(queryRequest.getQueryRestrictions().getFieldText(), is("MATCH{Iliad}:WORK"));
validateDatabases(queryRequest.getQueryRestrictions().getDatabases());
assertNull(queryRequest.getQueryRestrictions().getMinDate());
assertNotNull(queryRequest.getQueryRestrictions().getMaxDate());
assertThat(queryRequest.getQueryRestrictions().getMinScore(), is(5));
assertThat(queryRequest.getStart(), is(10));
assertThat(queryRequest.getMaxResults(), is(30));
assertThat(queryRequest.isHighlight(), is(true));
assertThat(queryRequest.isAutoCorrect(), is(true));
assertThat(queryRequest.getQueryType(), is(QueryRequest.QueryType.RAW));
validate(queryRequest);
}
@Test
public void minimalJsonToQueryRequest() throws IOException {
final String json = minimalJsonObject();
final R queryRequest = requestMapper.parseQueryRequest(json);
assertNotNull(queryRequest.getQueryRestrictions());
assertThat(queryRequest.getQueryRestrictions().getQueryText(), is("Homer"));
assertNull(queryRequest.getQueryRestrictions().getFieldText());
validateDatabases(queryRequest.getQueryRestrictions().getDatabases());
assertNull(queryRequest.getQueryRestrictions().getMinDate());
assertNull(queryRequest.getQueryRestrictions().getMaxDate());
assertNull(queryRequest.getQueryRestrictions().getMinScore());
assertThat(queryRequest.getStart(), is(1));
assertThat(queryRequest.getMaxResults(), is(30));
assertThat(queryRequest.isHighlight(), is(false));
assertThat(queryRequest.isAutoCorrect(), is(false));
assertThat(queryRequest.getQueryType(), is(QueryRequest.QueryType.MODIFIED));
validateMinimal(queryRequest);
}
}