/*
* 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.assertEquals;
import java.util.ArrayList;
import java.util.List;
import org.apache.lucene.search.Sort;
import org.junit.Before;
import org.junit.Test;
import org.eurekastreams.server.domain.ResourceSortCriteria;
import org.eurekastreams.server.domain.ResourceSortCriterion;
import org.eurekastreams.server.domain.ResourceSortCriterion.SortDirection;
import org.eurekastreams.server.domain.ResourceSortCriterion.SortField;
/**
* Test fixture for SortFieldBuilder.
*/
public class SortFieldBuilderTest
{
/**
* The system under test.
*/
private SortFieldBuilder sut;
/**
* Setup method.
*/
@Before
public void setup()
{
sut = new SortFieldBuilder();
}
/**
* Test getSort() by date added, ascending.
*/
@Test
public void testGetSortByDateAdded()
{
List<ResourceSortCriterion> sortCrit = new ArrayList<ResourceSortCriterion>();
sortCrit.add(new ResourceSortCriterion(SortField.DATE_ADDED, SortDirection.ASCENDING));
ResourceSortCriteria criteria = new ResourceSortCriteria(sortCrit);
Sort sort = sut.getSort(criteria);
assertEquals(1, sort.getSort().length);
assertEquals("dateAdded", sort.getSort()[0].getField());
assertEquals(false, sort.getSort()[0].getReverse());
}
/**
* Test getSort() by date added, descending.
*/
@Test
public void testGetSortByDateAddedDescending()
{
List<ResourceSortCriterion> sortCrit = new ArrayList<ResourceSortCriterion>();
sortCrit.add(new ResourceSortCriterion(SortField.DATE_ADDED, SortDirection.DESCENDING));
ResourceSortCriteria criteria = new ResourceSortCriteria(sortCrit);
Sort sort = sut.getSort(criteria);
assertEquals(1, sort.getSort().length);
assertEquals("dateAdded", sort.getSort()[0].getField());
assertEquals(true, sort.getSort()[0].getReverse());
}
/**
* Test getSort() by followers count, ascending.
*/
@Test
public void testGetSortByFollowersCount()
{
List<ResourceSortCriterion> sortCrit = new ArrayList<ResourceSortCriterion>();
sortCrit.add(new ResourceSortCriterion(SortField.FOLLOWERS_COUNT, SortDirection.ASCENDING));
ResourceSortCriteria criteria = new ResourceSortCriteria(sortCrit);
Sort sort = sut.getSort(criteria);
assertEquals(1, sort.getSort().length);
assertEquals("followersCount", sort.getSort()[0].getField());
assertEquals(false, sort.getSort()[0].getReverse());
}
/**
* Test getSort() by followers count added.
*/
@Test
public void testGetSortByFollowersCountDescending()
{
List<ResourceSortCriterion> sortCrit = new ArrayList<ResourceSortCriterion>();
sortCrit.add(new ResourceSortCriterion(SortField.FOLLOWERS_COUNT, SortDirection.DESCENDING));
ResourceSortCriteria criteria = new ResourceSortCriteria(sortCrit);
Sort sort = sut.getSort(criteria);
assertEquals(1, sort.getSort().length);
assertEquals("followersCount", sort.getSort()[0].getField());
assertEquals(true, sort.getSort()[0].getReverse());
}
/**
* Test getSort() by name, ascending.
*/
@Test
public void testGetSortByName()
{
List<ResourceSortCriterion> sortCrit = new ArrayList<ResourceSortCriterion>();
sortCrit.add(new ResourceSortCriterion(SortField.NAME, SortDirection.ASCENDING));
ResourceSortCriteria criteria = new ResourceSortCriteria(sortCrit);
Sort sort = sut.getSort(criteria);
assertEquals(1, sort.getSort().length);
assertEquals("byName", sort.getSort()[0].getField());
assertEquals(false, sort.getSort()[0].getReverse());
}
/**
* Test getSort() by name, descending.
*/
@Test
public void testGetSortByNameDescending()
{
List<ResourceSortCriterion> sortCrit = new ArrayList<ResourceSortCriterion>();
sortCrit.add(new ResourceSortCriterion(SortField.NAME, SortDirection.DESCENDING));
ResourceSortCriteria criteria = new ResourceSortCriteria(sortCrit);
Sort sort = sut.getSort(criteria);
assertEquals(1, sort.getSort().length);
assertEquals("byName", sort.getSort()[0].getField());
assertEquals(true, sort.getSort()[0].getReverse());
}
/**
* Test getSort() by updates count, ascending.
*/
@Test
public void testGetSortByUpdatesCount()
{
List<ResourceSortCriterion> sortCrit = new ArrayList<ResourceSortCriterion>();
sortCrit.add(new ResourceSortCriterion(SortField.UPDATES_COUNT, SortDirection.ASCENDING));
ResourceSortCriteria criteria = new ResourceSortCriteria(sortCrit);
Sort sort = sut.getSort(criteria);
assertEquals(1, sort.getSort().length);
assertEquals("updatesCount", sort.getSort()[0].getField());
assertEquals(false, sort.getSort()[0].getReverse());
}
/**
* Test getSort() by date updates count, descending.
*/
@Test
public void testGetSortByUpdatesCountDescending()
{
List<ResourceSortCriterion> sortCrit = new ArrayList<ResourceSortCriterion>();
sortCrit.add(new ResourceSortCriterion(SortField.UPDATES_COUNT, SortDirection.DESCENDING));
ResourceSortCriteria criteria = new ResourceSortCriteria(sortCrit);
Sort sort = sut.getSort(criteria);
assertEquals(1, sort.getSort().length);
assertEquals("updatesCount", sort.getSort()[0].getField());
assertEquals(true, sort.getSort()[0].getReverse());
}
/**
* Test getSort() by name ascending, updates descending.
*/
@Test
public void testGetSortByNameAscendingAndUpdatesDescending()
{
List<ResourceSortCriterion> sortCrit = new ArrayList<ResourceSortCriterion>();
sortCrit.add(new ResourceSortCriterion(SortField.NAME, SortDirection.ASCENDING));
sortCrit.add(new ResourceSortCriterion(SortField.UPDATES_COUNT, SortDirection.DESCENDING));
ResourceSortCriteria criteria = new ResourceSortCriteria(sortCrit);
Sort sort = sut.getSort(criteria);
assertEquals(2, sort.getSort().length);
// name, ascending
assertEquals("byName", sort.getSort()[0].getField());
assertEquals(false, sort.getSort()[0].getReverse());
// updates count, descending
assertEquals("updatesCount", sort.getSort()[1].getField());
assertEquals(true, sort.getSort()[1].getReverse());
}
/**
* Test overriding the sort method with setOverridingSortCriteria.
*/
@Test
public void testGetSortByFollowersCountDescendingFromOverride()
{
// setup the override as followersCount, descending
List<ResourceSortCriterion> overridingSortCrit = new ArrayList<ResourceSortCriterion>();
overridingSortCrit.add(new ResourceSortCriterion(SortField.FOLLOWERS_COUNT, SortDirection.DESCENDING));
sut.setOverridingSortCriteria(new ResourceSortCriteria(overridingSortCrit));
// now try different input criteria - name
List<ResourceSortCriterion> sortCrit = new ArrayList<ResourceSortCriterion>();
sortCrit.add(new ResourceSortCriterion(SortField.NAME, SortDirection.ASCENDING));
ResourceSortCriteria criteria = new ResourceSortCriteria(sortCrit);
// sort should come back as followers count, descending, ignoring the input criteria
Sort sort = sut.getSort(criteria);
assertEquals(1, sort.getSort().length);
assertEquals("followersCount", sort.getSort()[0].getField());
assertEquals(true, sort.getSort()[0].getReverse());
}
}