Commit 75ac10b1 authored by Noel Alonso's avatar Noel Alonso
Browse files

Crea util para comprobar valores de la consulta

El número de sectores y divisiones de windrose debe tomar unos valores
determinados. Se debe comprobar que la consulta del cliente respeta
estos valores.

Añade test
parent 1cc68fb7
Loading
Loading
Loading
Loading
+3 −19
Original line number Diff line number Diff line
@@ -9,20 +9,18 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import es.redmic.exception.elasticsearch.ESTermQueryException;
import es.redmic.models.es.common.dto.ElasticSearchDTO;
import es.redmic.models.es.common.query.dto.AggsPropertiesDTO;
import es.redmic.models.es.common.query.dto.DataQueryDTO;
import es.redmic.timeseriesview.dto.windrose.WindRoseDataDTO;
import es.redmic.timeseriesview.repository.WindRoseESRepository;
import es.redmic.timeseriesview.utils.TimeSeriesUtils;
import es.redmic.timeseriesview.utils.WindRoseUtils;
import es.redmic.viewlib.config.MapperScanBeanItfc;

@Service
public class WindRoseESService {

	private final static Integer PARTITION_NUMBER_LIMIT = 10;

	private WindRoseESRepository repository;

	@Autowired
@@ -50,8 +48,8 @@ public class WindRoseESService {

		Long timeIntervalDefault = new Long(query.getTerms().get("timeInterval").toString());

		checkValidNumSectors(numSectors);
		checkValidPartitionNumber(partitionNumber);
		WindRoseUtils.checkValidNumSectors(numSectors);
		WindRoseUtils.checkValidPartitionNumber(partitionNumber);

		// Añade a query para comprobar que la actividad corresponde con la buscada
		query.setActivityId(activityId);
@@ -80,18 +78,4 @@ public class WindRoseESService {

		return new ElasticSearchDTO(windroseDataDTO, windroseDataDTO.getData().size());
	}

	private void checkValidNumSectors(Integer numSectors) {
		// Comprueba que numSectors sea un número válido. An = 2^(n-1)

		double x = (Math.log(numSectors) / Math.log(2));
		if ((numSectors < 2 || x > 5 || (x != (int) x)) && numSectors != 36)
			throw new ESTermQueryException("numSectors", numSectors.toString());
	}

	private void checkValidPartitionNumber(Integer partitionNumber) {

		if (partitionNumber > PARTITION_NUMBER_LIMIT || partitionNumber < 1)
			throw new ESTermQueryException("partitionNumber", partitionNumber.toString());
	}
}
 No newline at end of file
+21 −0
Original line number Diff line number Diff line
package es.redmic.timeseriesview.utils;

import es.redmic.exception.elasticsearch.ESTermQueryException;

public abstract class WindRoseUtils {

	private final static Integer PARTITION_NUMBER_LIMIT = 10;

	public static void checkValidNumSectors(Integer numSectors) {
		// Comprueba que numSectors sea múltiplo de 4 y menor o igual a 36

		if (numSectors > 36 || (numSectors % 4) != 0)
			throw new ESTermQueryException("numSectors", numSectors.toString());
	}

	public static void checkValidPartitionNumber(Integer partitionNumber) {

		if (partitionNumber > PARTITION_NUMBER_LIMIT || partitionNumber < 1)
			throw new ESTermQueryException("partitionNumber", partitionNumber.toString());
	}
}
+62 −0
Original line number Diff line number Diff line
package es.redmic.test.timeseriesview.unit.utils;

import org.junit.Test;

import es.redmic.exception.elasticsearch.ESTermQueryException;
import es.redmic.timeseriesview.utils.WindRoseUtils;

public class WindRoseUtilsTest {

	@Test(expected = ESTermQueryException.class)
	public void checkValidNumSectors_ThrowException_IfNumSectorsIsGreatThan36() {

		WindRoseUtils.checkValidNumSectors(40);
	}

	@Test(expected = ESTermQueryException.class)
	public void checkValidNumSectors_ThrowException_IfNumSectorsIsLessThan4() {

		WindRoseUtils.checkValidNumSectors(2);
	}

	@Test
	public void checkValidNumSectors_NoThrowException_IfNumSectorsIsCorrect() {

		WindRoseUtils.checkValidNumSectors(4);
		WindRoseUtils.checkValidNumSectors(8);
		WindRoseUtils.checkValidNumSectors(12);
		WindRoseUtils.checkValidNumSectors(16);
		WindRoseUtils.checkValidNumSectors(20);
		WindRoseUtils.checkValidNumSectors(24);
		WindRoseUtils.checkValidNumSectors(28);
		WindRoseUtils.checkValidNumSectors(32);
		WindRoseUtils.checkValidNumSectors(36);
	}

	@Test(expected = ESTermQueryException.class)
	public void checkValidPartitionNumber_ThrowException_IfPartitionNumberIsGreatThan10() {

		WindRoseUtils.checkValidPartitionNumber(11);
	}

	@Test(expected = ESTermQueryException.class)
	public void checkValidPartitionNumber_ThrowException_IfPartitionNumberIsLessThan1() {

		WindRoseUtils.checkValidPartitionNumber(0);
	}

	@Test
	public void checkValidPartitionNumber_NoThrowException_IfPartitionNumberIsCorrect() {

		WindRoseUtils.checkValidPartitionNumber(1);
		WindRoseUtils.checkValidPartitionNumber(2);
		WindRoseUtils.checkValidPartitionNumber(3);
		WindRoseUtils.checkValidPartitionNumber(4);
		WindRoseUtils.checkValidPartitionNumber(5);
		WindRoseUtils.checkValidPartitionNumber(6);
		WindRoseUtils.checkValidPartitionNumber(7);
		WindRoseUtils.checkValidPartitionNumber(8);
		WindRoseUtils.checkValidPartitionNumber(9);
		WindRoseUtils.checkValidPartitionNumber(10);
	}
}