/*
* Copyright (c) 2009 Lockheed Martin Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.eurekastreams.server.service.actions.strategies.directory;
import static org.junit.Assert.*;
import java.util.ArrayList;
import java.util.List;
import org.apache.lucene.search.Sort;
import org.hibernate.search.jpa.FullTextQuery;
import org.jmock.Expectations;
import org.jmock.Mockery;
import org.jmock.integration.junit4.JUnit4Mockery;
import org.jmock.lib.legacy.ClassImposteriser;
import org.junit.Test;
import org.eurekastreams.commons.search.ProjectionSearchRequestBuilder;
import org.eurekastreams.server.domain.PagedSet;
import org.eurekastreams.server.domain.ResourceSortCriteria;
import org.eurekastreams.server.search.modelview.PersonModelView;
/**
* Test fixture for OrgChildrenGetter strategy.
*/
public class OrgChildrenGetterTest
{
/**
* Context for building mock objects.
*/
private final Mockery context = new JUnit4Mockery()
{
{
setImposteriser(ClassImposteriser.INSTANCE);
}
};
/**
* Projection search request builder to use.
*/
private final ProjectionSearchRequestBuilder searchRequestBuilder = context
.mock(ProjectionSearchRequestBuilder.class);
/**
* The SortFieldBuilder to use.
*/
private final SortFieldBuilder sortFieldBuilder = context.mock(SortFieldBuilder.class);
/**
* Query builder.
*/
private final DirectorySearchLuceneQueryBuilder queryBuilder = context
.mock(DirectorySearchLuceneQueryBuilder.class);
/**
* The resource sort criteria to use.
*/
private final ResourceSortCriteria sortCriteria = context.mock(ResourceSortCriteria.class);
/**
* Test getOrgChildren() not recursive.
*/
@Test
public void testGetOrgChildrenNonRecursive()
{
final FullTextQuery query = context.mock(FullTextQuery.class);
final String searchText = "foo";
final Sort sort = context.mock(Sort.class);
final int from = 5;
final int to = 9;
final int total = 99;
final List<PersonModelView> resultList = new ArrayList<PersonModelView>();
final String nativeQuery = "foobar";
OrgChildrenGetter<PersonModelView> sut = new OrgChildrenGetter<PersonModelView>(queryBuilder,
searchRequestBuilder, sortFieldBuilder, false);
context.checking(new Expectations()
{
{
one(queryBuilder).buildNativeQuery(searchText, "", "", 8);
will(returnValue(nativeQuery));
one(searchRequestBuilder).buildQueryFromNativeSearchString(nativeQuery);
will(returnValue(query));
one(sortFieldBuilder).getSort(sortCriteria);
will(returnValue(sort));
one(query).setSort(sort);
one(searchRequestBuilder).setPaging(query, from, to);
one(query).getResultList();
will(returnValue(resultList));
one(query).getResultSize();
will(returnValue(total));
}
});
PagedSet<PersonModelView> results = sut.getOrgChildren(searchText, from, to, sortCriteria, 8);
assertEquals(from, results.getFromIndex());
assertEquals(to, results.getToIndex());
assertEquals(total, results.getTotal());
assertSame(resultList, results.getPagedSet());
context.assertIsSatisfied();
}
/**
* Test getOrgChildren() recursive.
*/
@Test
public void testGetOrgChildrenRecursive()
{
final FullTextQuery query = context.mock(FullTextQuery.class);
final String searchText = "foo";
final Sort sort = context.mock(Sort.class);
final int from = 5;
final int to = 9;
final int total = 99;
final List<PersonModelView> resultList = new ArrayList<PersonModelView>();
final String nativeQuery = "foobar";
OrgChildrenGetter<PersonModelView> sut = new OrgChildrenGetter<PersonModelView>(queryBuilder,
searchRequestBuilder, sortFieldBuilder, true);
context.checking(new Expectations()
{
{
one(queryBuilder).buildNativeQuery(searchText, "", searchText, 9);
will(returnValue(nativeQuery));
one(searchRequestBuilder).buildQueryFromNativeSearchString(nativeQuery);
will(returnValue(query));
one(sortFieldBuilder).getSort(sortCriteria);
will(returnValue(sort));
one(query).setSort(sort);
one(searchRequestBuilder).setPaging(query, from, to);
one(query).getResultList();
will(returnValue(resultList));
one(query).getResultSize();
will(returnValue(total));
}
});
PagedSet<PersonModelView> results = sut.getOrgChildren(searchText, from, to, sortCriteria, 9);
assertEquals(from, results.getFromIndex());
assertEquals(to, results.getToIndex());
assertEquals(total, results.getTotal());
assertSame(resultList, results.getPagedSet());
context.assertIsSatisfied();
}
}