Commit 3e3a290f authored by Noel Alonso's avatar Noel Alonso
Browse files

Añade query de atlas + tests

Si se hace una query de atlas = true, solo se retornan las categorías
con hijos que tengan atlas activado.
parent 984661c2
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import org.apache.lucene.search.join.ScoreMode;
import org.elasticsearch.action.search.MultiSearchRequest;
import org.elasticsearch.action.search.MultiSearchResponse;
import org.elasticsearch.action.search.MultiSearchResponse.Item;
@@ -32,10 +33,12 @@ import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.join.query.JoinQueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.springframework.stereotype.Repository;

import es.redmic.atlasview.model.category.Category;
import es.redmic.atlasview.model.layer.Layer;
import es.redmic.elasticsearchlib.data.repository.RWDataESRepository;
import es.redmic.exception.common.ExceptionType;
import es.redmic.exception.elasticsearch.ESQueryException;
@@ -140,6 +143,29 @@ public class CategoryESRepository extends RWDataESRepository<Category, SimpleQue
		return new EventApplicationResult(true);
	}

	/**
	 * Sobrescribe a la función base por incompatibilidad de query. Función que dado
	 * un conjunto de términos, nos devuelve una query de elasticsearch. Debe estar
	 * implementado en cada repositorio para darle una funcionalidad específica y
	 * aquí estarán las funcionalidades que comparten todos los repositorios.
	 * 
	 * @param terms
	 *            Map de términos pasados por la query.
	 * @param query
	 *            QueryBuilder con la query de los términos acumulados en los
	 *            repositorios específicos.
	 * @return query de tipo terms de elasticsearch.
	 */
	@Override
	public QueryBuilder getTermQuery(Map<String, Object> terms, BoolQueryBuilder query) {

		if (terms.containsKey("atlas")) {
			query.must(JoinQueryBuilders.hasChildQuery(Layer.JOIN_INDEX_NAME,
					QueryBuilders.termQuery("atlas", Boolean.valueOf(terms.get("atlas").toString())), ScoreMode.None));
		}
		return super.getTermQuery(terms, query);
	}

	private QueryBuilder getCategoryQuery() {

		return QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery(URL_SOURCE_PROPERTY));
+88 −2
Original line number Diff line number Diff line
@@ -53,7 +53,9 @@ import org.springframework.test.web.servlet.setup.MockMvcBuilders;

import es.redmic.atlasview.AtlasViewApplication;
import es.redmic.atlasview.model.category.Category;
import es.redmic.atlasview.model.layer.Layer;
import es.redmic.atlasview.repository.category.CategoryESRepository;
import es.redmic.atlasview.repository.layer.LayerESRepository;
import es.redmic.models.es.common.query.dto.MgetDTO;
import es.redmic.models.es.common.query.dto.SimpleQueryDTO;
import es.redmic.testutils.documentation.DocumentationViewBaseTest;
@@ -74,6 +76,9 @@ public class CategoryControllerTest extends DocumentationViewBaseTest {
	@Autowired
	CategoryESRepository repository;

	@Autowired
	LayerESRepository layerRepository;

	Category category = new Category();

	@ClassRule
@@ -129,7 +134,7 @@ public class CategoryControllerTest extends DocumentationViewBaseTest {
	}

	@Test
	public void searchCategorysPost_Return200_WhenSearchIsCorrect() throws Exception {
	public void searchCategoriesPost_Return200_WhenSearchIsCorrect() throws Exception {

		SimpleQueryDTO dataQuery = new SimpleQueryDTO();
		dataQuery.setSize(1);
@@ -149,6 +154,88 @@ public class CategoryControllerTest extends DocumentationViewBaseTest {
		// @formatter:on
	}

	@Test
	public void searchCategories_NoReturnResult_WhenSearchCategoryWithChildrenAndHasNot() throws Exception {

		SimpleQueryDTO dataQuery = new SimpleQueryDTO();
		dataQuery.setSize(1);

		dataQuery.addTerm("atlas", true);

		// @formatter:off
		
		this.mockMvc
				.perform(post(CATEGORY_PATH + "/_search").content(mapper.writeValueAsString(dataQuery))
					.contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON))
				.andExpect(status().isOk())
				.andExpect(jsonPath("$.success", is(true)))
				.andExpect(jsonPath("$.body.data", notNullValue()))
				.andExpect(jsonPath("$.body.data.length()", is(0)));
		
		// @formatter:on
	}

	@Test
	public void searchCategories_NoReturnResult_WhenSearchCategoryWithChildrenAndHasButWithAtlasEqualToFalse()
			throws Exception {

		Layer layer = (Layer) JsonToBeanTestUtil.getBean("/data/model/layer/layer.json", Layer.class);
		layer.getJoinIndex().setParent(category.getId());
		layer.setAtlas(false);

		layerRepository.save(layer, category.getId());

		SimpleQueryDTO dataQuery = new SimpleQueryDTO();
		dataQuery.setSize(1);

		dataQuery.addTerm("atlas", true);

		// @formatter:off
		
		this.mockMvc
				.perform(post(CATEGORY_PATH + "/_search").content(mapper.writeValueAsString(dataQuery))
					.contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON))
				.andExpect(status().isOk())
				.andExpect(jsonPath("$.success", is(true)))
				.andExpect(jsonPath("$.body.data", notNullValue()))
				.andExpect(jsonPath("$.body.data.length()", is(0)));
		
		// @formatter:on

		layerRepository.delete(layer.getId(), category.getId());
	}

	@Test
	public void searchCategories_ReturnResult_WhenSearchCategoryWithChildrenAndAtlas() throws Exception {

		Layer layer = (Layer) JsonToBeanTestUtil.getBean("/data/model/layer/layer.json", Layer.class);
		layer.getJoinIndex().setParent(category.getId());
		layer.setAtlas(true);

		layerRepository.save(layer, category.getId());

		SimpleQueryDTO dataQuery = new SimpleQueryDTO();
		dataQuery.setSize(1);

		dataQuery.addTerm("atlas", true);

		// @formatter:off
		
		this.mockMvc
				.perform(post(CATEGORY_PATH + "/_search").content(mapper.writeValueAsString(dataQuery))
					.contentType(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON))
				.andExpect(status().isOk())
				.andExpect(jsonPath("$.success", is(true)))
				.andExpect(jsonPath("$.body.data", notNullValue()))
				.andExpect(jsonPath("$.body.data[0]", notNullValue()))
				.andExpect(jsonPath("$.body.data.length()", is(1)));
					//.andDo(getSimpleQueryFieldsDescriptor());
		
		// @formatter:on

		layerRepository.delete(layer.getId(), category.getId());
	}

	@Test
	public void searchCategorysQueryString_Return200_WhenSearchIsCorrect() throws Exception {

@@ -235,7 +322,6 @@ public class CategoryControllerTest extends DocumentationViewBaseTest {
				.andExpect(jsonPath("$.body[0]", endsWith("</b>")))
					.andDo(getSimpleQueryFieldsDescriptor());;
				
		
		// @formatter:on
	}