Package org.fao.geonet.repository.statistic

Source Code of org.fao.geonet.repository.statistic.SearchRequestRepositoryTest

package org.fao.geonet.repository.statistic;

import org.fao.geonet.domain.ISODate;
import org.fao.geonet.domain.Pair;
import org.fao.geonet.domain.statistic.SearchRequest;
import org.fao.geonet.domain.statistic.SearchRequestParam;
import org.fao.geonet.domain.statistic.SearchRequest_;
import org.fao.geonet.repository.AbstractSpringDataTest;
import org.fao.geonet.repository.SpringDataTestSupport;
import org.fao.geonet.repository.specification.SearchRequestParamSpecs;
import org.fao.geonet.repository.specification.SearchRequestSpecs;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.domain.Specification;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Root;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;

import static org.fao.geonet.repository.specification.SearchRequestSpecs.isMoreRecentThanOrEqualTo;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

/**
* Test the SearchRequestRepository.
* <p/>
* User: Jesse
* Date: 9/29/13
* Time: 11:03 PM
*/
public class SearchRequestRepositoryTest extends AbstractSpringDataTest {

    @Autowired
    SearchRequestRepository _requestRepo;
    @Autowired
    SearchRequestParamRepository _paramRepo;

    @PersistenceContext
    EntityManager _entityManager;

    @Test
    public void testFindOne() throws Exception {
        SearchRequest searchRequest1 = newSearchRequest();
        assertTrue(searchRequest1.getParams().size() > 0);
        searchRequest1 = _requestRepo.save(searchRequest1);

        SearchRequest searchRequest2 = newSearchRequest();
        assertTrue(searchRequest2.getParams().size() > 0);
        searchRequest2 = _requestRepo.save(searchRequest2);

        _entityManager.flush();
        _entityManager.clear();

        SearchRequest found = _requestRepo.findOne(searchRequest2.getId());
        assertSameContents(searchRequest2, found);
        assertEquals(searchRequest2.getParams().size(), found.getParams().size());
        List<SearchRequestParam> params = _paramRepo.findAll(SearchRequestParamSpecs.hasService(searchRequest2.getService()));
        assertEquals(searchRequest2.getParams().size(), params.size());
    }

    @Test
    public void testSelectAllDistinctAttributes() {
        SearchRequest searchRequest1 = newSearchRequest();
        searchRequest1.setRequestDate(new ISODate("1980-10-10T00:00:00"));
        searchRequest1 = _requestRepo.save(searchRequest1);

        SearchRequest searchRequest2 = newSearchRequest();
        searchRequest2.setRequestDate(new ISODate("1980-10-10T01:11:00"));
        _requestRepo.save(searchRequest2);

        SearchRequest searchRequest3 = newSearchRequest();
        searchRequest3.setRequestDate(new ISODate("1980-10-13T01:11:00"));
        _requestRepo.save(searchRequest3);

        SearchRequest searchRequest4 = newSearchRequest();
        searchRequest4.setRequestDate(new ISODate("1980-10-10T01:11:00"));
        _requestRepo.save(searchRequest4);

        final List<ISODate> isoDates = _requestRepo.selectAllDistinctAttributes(SearchRequest_.requestDate);

        assertEquals(3, isoDates.size());
        assertTrue(isoDates.contains(searchRequest1.getRequestDate()));
        assertTrue(isoDates.contains(searchRequest2.getRequestDate()));
        assertTrue(isoDates.contains(searchRequest3.getRequestDate()));

    }

    @Test
    public void testGetSummary() {
        SearchRequest searchRequest1 = newSearchRequest();
        searchRequest1.setRequestDate(new ISODate("1980-10-10T00:00:00"));
        searchRequest1.setSimple(true);
        searchRequest1 = _requestRepo.save(searchRequest1);

        SearchRequest searchRequest2 = newSearchRequest();
        searchRequest2.setRequestDate(new ISODate("1980-10-10T01:11:00"));
        searchRequest2.setSimple(false);
        _requestRepo.save(searchRequest2);

        SearchRequest searchRequest3 = newSearchRequest();
        searchRequest3.setRequestDate(new ISODate("1980-10-13T01:11:00"));
        searchRequest3.setSimple(true);
        _requestRepo.save(searchRequest3);

        SearchRequest searchRequest4 = newSearchRequest();
        searchRequest4.setRequestDate(new ISODate("1980-11-16T01:11:00"));
        searchRequest4.setSimple(true);
        _requestRepo.save(searchRequest4);

        PathSpec<SearchRequest, Boolean> path = new PathSpec<SearchRequest, Boolean>() {
            @Override
            public Path<Boolean> getPath(Root<SearchRequest> root) {
                return root.get(SearchRequest_.simple);
            }
        };

        assertSummary(isMoreRecentThanOrEqualTo(searchRequest1.getRequestDate()), path, 3, 1);
        assertSummary(isMoreRecentThanOrEqualTo(searchRequest3.getRequestDate()), path, 2, 0);
    }

    private void assertSummary(Specification<SearchRequest> spec, PathSpec<SearchRequest, Boolean> path, int expectedTrue,
                               int expectedFalse) {
        final List<Pair<Boolean, Integer>> hitSummary = _requestRepo.getHitSummary(spec, path, org.springframework.data.domain.Sort
                .Direction.DESC);
        for (Pair<Boolean, Integer> summary : hitSummary) {
            if (summary.one()) {
                assertEquals(expectedTrue, summary.two().intValue());
            } else {
                assertEquals(expectedFalse, summary.two().intValue());
            }
        }
    }

    @Test
    public void testGetRequestDateToRequestCountBetweenByDayWithSpec() {
        SearchRequest searchRequest1 = newSearchRequest();
        searchRequest1.setRequestDate(new ISODate("1980-10-10"));
        searchRequest1 = _requestRepo.save(searchRequest1);

        SearchRequest searchRequest2 = newSearchRequest();
        searchRequest2.setRequestDate(new ISODate("1980-10-10T01:11:00"));
        _requestRepo.save(searchRequest2);

        SearchRequest searchRequest3 = newSearchRequest();
        searchRequest3.setRequestDate(new ISODate("1980-11-13T01:11:00"));
        searchRequest3 = _requestRepo.save(searchRequest3);

        SearchRequest searchRequest4 = newSearchRequest();
        searchRequest4.setRequestDate(new ISODate("1980-11-16T01:11:00"));
        searchRequest4 = _requestRepo.save(searchRequest4);

        final List<Pair<DateInterval.Day, Integer>> fullInterval = _requestRepo.getRequestDateToRequestCountBetween
                (new DateInterval.Day(), searchRequest1.getRequestDate(), searchRequest4.getRequestDate(),
                        SearchRequestSpecs.hasService(searchRequest1.getService()));
        assertEquals(1, fullInterval.size());
        assertTrue(fullInterval.contains(Pair.read(new DateInterval.Day(searchRequest1.getRequestDate()), 1)));
    }

    @Test
    public void testGetRequestDateToRequestCountBetweenByDay() {
        SearchRequest searchRequest1 = newSearchRequest();
        searchRequest1.setRequestDate(new ISODate("1980-10-10"));
        searchRequest1 = _requestRepo.save(searchRequest1);

        SearchRequest searchRequest2 = newSearchRequest();
        searchRequest2.setRequestDate(new ISODate("1980-10-10T01:11:00"));
        _requestRepo.save(searchRequest2);

        SearchRequest searchRequest3 = newSearchRequest();
        searchRequest3.setRequestDate(new ISODate("1980-11-13T01:11:00"));
        searchRequest3 = _requestRepo.save(searchRequest3);

        SearchRequest searchRequest4 = newSearchRequest();
        searchRequest4.setRequestDate(new ISODate("1980-11-16T01:11:00"));
        searchRequest4 = _requestRepo.save(searchRequest4);

        final List<Pair<DateInterval.Day, Integer>> fullInterval = _requestRepo.getRequestDateToRequestCountBetween
                (new DateInterval.Day(), searchRequest1.getRequestDate(), searchRequest4.getRequestDate());
        assertEquals(3, fullInterval.size());
        assertTrue(fullInterval.contains(Pair.read(new DateInterval.Day(searchRequest1.getRequestDate()), 2)));
        assertTrue(fullInterval.contains(Pair.read(new DateInterval.Day(searchRequest3.getRequestDate()), 1)));
        assertTrue(fullInterval.contains(Pair.read(new DateInterval.Day(searchRequest4.getRequestDate()), 1)));


        final List<Pair<DateInterval.Day, Integer>> shortInterval = _requestRepo.getRequestDateToRequestCountBetween
                (new DateInterval.Day(), searchRequest3.getRequestDate(), searchRequest4.getRequestDate());
        assertEquals(2, shortInterval.size());
        assertTrue(fullInterval.contains(Pair.read(new DateInterval.Day(searchRequest3.getRequestDate()), 1)));
        assertTrue(fullInterval.contains(Pair.read(new DateInterval.Day(searchRequest4.getRequestDate()), 1)));

        final List<Pair<DateInterval.Day, Integer>> outOfRangeInterval = _requestRepo.getRequestDateToRequestCountBetween
                (new DateInterval.Day(), new ISODate("1990-01-01"), new ISODate("1990-01-02"));
        assertEquals(0, outOfRangeInterval.size());
    }

    @Test
    public void testGetRequestDateToRequestCountBetweenByMonth() {
        SearchRequest searchRequest1 = newSearchRequest();
        searchRequest1.setRequestDate(new ISODate("1980-10-10"));
        searchRequest1 = _requestRepo.save(searchRequest1);

        SearchRequest searchRequest2 = newSearchRequest();
        searchRequest2.setRequestDate(new ISODate("1980-10-10T01:11:00"));
        _requestRepo.save(searchRequest2);

        SearchRequest searchRequest3 = newSearchRequest();
        searchRequest3.setRequestDate(new ISODate("1980-11-13T01:11:00"));
        searchRequest3 = _requestRepo.save(searchRequest3);

        SearchRequest searchRequest4 = newSearchRequest();
        searchRequest4.setRequestDate(new ISODate("1980-12-16T01:11:00"));
        searchRequest4 = _requestRepo.save(searchRequest4);

        final List<Pair<DateInterval.Month, Integer>> fullInterval = _requestRepo.getRequestDateToRequestCountBetween
                (new DateInterval.Month(), searchRequest1.getRequestDate(), searchRequest4.getRequestDate());
        assertEquals(3, fullInterval.size());
        assertTrue(fullInterval.contains(Pair.read(new DateInterval.Month(searchRequest1.getRequestDate()), 2)));
        assertTrue(fullInterval.contains(Pair.read(new DateInterval.Month(searchRequest3.getRequestDate()), 1)));
        assertTrue(fullInterval.contains(Pair.read(new DateInterval.Month(searchRequest4.getRequestDate()), 1)));


        final List<Pair<DateInterval.Month, Integer>> shortInterval = _requestRepo.getRequestDateToRequestCountBetween
                (new DateInterval.Month(), searchRequest3.getRequestDate(), searchRequest4.getRequestDate());
        assertEquals(2, shortInterval.size());
        assertTrue(fullInterval.contains(Pair.read(new DateInterval.Month(searchRequest3.getRequestDate()), 1)));
        assertTrue(fullInterval.contains(Pair.read(new DateInterval.Month(searchRequest4.getRequestDate()), 1)));

        final List<Pair<DateInterval.Month, Integer>> outOfRangeInterval = _requestRepo.getRequestDateToRequestCountBetween
                (new DateInterval.Month(), new ISODate("1990-01-01"), new ISODate("1990-01-02"));
        assertEquals(0, outOfRangeInterval.size());
    }

    @Test
    public void testGetRequestDateToRequestCountBetweenByYear() {
        SearchRequest searchRequest1 = newSearchRequest();
        searchRequest1.setRequestDate(new ISODate("1980-10-10"));
        searchRequest1 = _requestRepo.save(searchRequest1);

        SearchRequest searchRequest2 = newSearchRequest();
        searchRequest2.setRequestDate(new ISODate("1980-10-10T01:11:00"));
        _requestRepo.save(searchRequest2);

        SearchRequest searchRequest3 = newSearchRequest();
        searchRequest3.setRequestDate(new ISODate("1981-11-13T01:11:00"));
        searchRequest3 = _requestRepo.save(searchRequest3);

        SearchRequest searchRequest4 = newSearchRequest();
        searchRequest4.setRequestDate(new ISODate("1982-12-16T01:11:00"));
        searchRequest4 = _requestRepo.save(searchRequest4);

        final List<Pair<DateInterval.Year, Integer>> fullInterval = _requestRepo.getRequestDateToRequestCountBetween
                (new DateInterval.Year(), searchRequest1.getRequestDate(), searchRequest4.getRequestDate());
        assertEquals(3, fullInterval.size());
        assertTrue(fullInterval.contains(Pair.read(new DateInterval.Year(searchRequest1.getRequestDate()), 2)));
        assertTrue(fullInterval.contains(Pair.read(new DateInterval.Year(searchRequest3.getRequestDate()), 1)));
        assertTrue(fullInterval.contains(Pair.read(new DateInterval.Year(searchRequest4.getRequestDate()), 1)));


        final List<Pair<DateInterval.Year, Integer>> shortInterval = _requestRepo.getRequestDateToRequestCountBetween
                (new DateInterval.Year(), searchRequest3.getRequestDate(), searchRequest4.getRequestDate());
        assertEquals(2, shortInterval.size());
        assertTrue(fullInterval.contains(Pair.read(new DateInterval.Year(searchRequest3.getRequestDate()), 1)));
        assertTrue(fullInterval.contains(Pair.read(new DateInterval.Year(searchRequest4.getRequestDate()), 1)));

        final List<Pair<DateInterval.Year, Integer>> outOfRangeInterval = _requestRepo.getRequestDateToRequestCountBetween
                (new DateInterval.Year(), new ISODate("1990-01-01"), new ISODate("1990-01-02"));
        assertEquals(0, outOfRangeInterval.size());
    }

    @Test
    public void testGetMostRecentRequestDate() {
        SearchRequest searchRequest1 = newSearchRequest();
        searchRequest1.setRequestDate(new ISODate("1980-10-10T01:01:01"));
        _requestRepo.save(searchRequest1);

        SearchRequest searchRequest2 = newSearchRequest();
        searchRequest2.setRequestDate(new ISODate("1980-10-10T01:11:00"));
        _requestRepo.save(searchRequest2);

        SearchRequest searchRequest3 = newSearchRequest();
        searchRequest3.setRequestDate(new ISODate("1981-11-13T01:11:00"));
        _requestRepo.save(searchRequest3);

        SearchRequest searchRequest4 = newSearchRequest();
        searchRequest4.setRequestDate(new ISODate("1982-12-16T01:11:00"));
        searchRequest4 = _requestRepo.save(searchRequest4);

        assertEquals(searchRequest4.getRequestDate(), _requestRepo.getMostRecentRequestDate());
    }

    @Test
    public void testGetOldestRequestDate() {
        SearchRequest searchRequest1 = newSearchRequest();
        searchRequest1.setRequestDate(new ISODate("1980-10-10T01:01:01"));
        searchRequest1 = _requestRepo.save(searchRequest1);

        SearchRequest searchRequest2 = newSearchRequest();
        searchRequest2.setRequestDate(new ISODate("1980-10-10T01:11:00"));
        _requestRepo.save(searchRequest2);

        SearchRequest searchRequest3 = newSearchRequest();
        searchRequest3.setRequestDate(new ISODate("1981-11-13T01:11:00"));
        _requestRepo.save(searchRequest3);

        SearchRequest searchRequest4 = newSearchRequest();
        searchRequest4.setRequestDate(new ISODate("1982-12-16T01:11:00"));
        _requestRepo.save(searchRequest4);

        assertEquals(searchRequest1.getRequestDate(), _requestRepo.getOldestRequestDate());
    }

    private SearchRequest newSearchRequest() {
        final AtomicInteger inc = _inc;
        return newSearchRequest(inc);
    }

    public static SearchRequest newSearchRequest(AtomicInteger inc) {
        int val = inc.incrementAndGet();
        SearchRequest searchRequest = new SearchRequest();
        searchRequest.setSpatialFilter("spatialRequest" + val);
        searchRequest.setSortBy("sortby" + val);
        searchRequest.setSimple(val % 2 == 0);
        searchRequest.setService("service" + val);
        searchRequest.setAutogenerated(val % 2 == 1);
        searchRequest.setHits(val);
        searchRequest.setIpAddress("ip" + val);
        searchRequest.setLang("l" + val);
        searchRequest.setLuceneQuery("query" + val);
        searchRequest.setMetadataType("mdtype" + val);
        searchRequest.setRequestDate(new ISODate());
        searchRequest.addParam(SearchRequestParamRepositoryTest.newRequestParam(inc));
        searchRequest.addParam(SearchRequestParamRepositoryTest.newRequestParam(inc));

        return searchRequest;
    }


}
TOP

Related Classes of org.fao.geonet.repository.statistic.SearchRequestRepositoryTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.