diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/search/sort/SearchResultSorterByScoreTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/search/sort/SearchResultSorterByScoreTest.java index e6fe7effa673fa1c4f10b6de8d4e4552b21ffac9..7f760920166972e0d61a6ac5c7990ea74ea2eb0b 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/search/sort/SearchResultSorterByScoreTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/search/sort/SearchResultSorterByScoreTest.java @@ -1,17 +1,17 @@ package ch.systemsx.cisd.openbis.generic.server.business.search.sort; +import static ch.systemsx.cisd.openbis.generic.server.business.search.sort.SearchResultSorterTestHelper.assertEntities; +import static ch.systemsx.cisd.openbis.generic.server.business.search.sort.SearchResultSorterTestHelper.createEntity; +import static ch.systemsx.cisd.openbis.generic.server.business.search.sort.SearchResultSorterTestHelper.getAnyFieldCriterion; +import static ch.systemsx.cisd.openbis.generic.server.business.search.sort.SearchResultSorterTestHelper.sort; + import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; import java.util.List; -import java.util.Map; import org.testng.AssertJUnit; import org.testng.annotations.Test; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchCriteria; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchCriterion; -import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchField; +import ch.systemsx.cisd.openbis.generic.server.business.search.sort.SearchResultSorterTestHelper.EntitySearchResult; /** * Test Class for SearchResultSorterByScore. @@ -22,198 +22,77 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchField; public class SearchResultSorterByScoreTest extends AssertJUnit { - private class EntitySearchResult implements IEntitySearchResult - { - private final String code; - - private final String typeCode; - - private final Map<String, String> properties; - - public EntitySearchResult( - String code, - String typeCode, - Map<String, String> properties) - { - this.code = code; - this.typeCode = typeCode; - this.properties = properties; - } - - public String getCode() - { - return code; - } - - public String getTypeCode() - { - return typeCode; - } - - public Map<String, String> getProperties() - { - return properties; - } - - } - @Test - public void testCode() + public void testCriteriaAnyCode() { - // // Entities Setup - // List<EntitySearchResult> entities = new ArrayList<EntitySearchResult>(); - entities.add(createSample("CODE_2", "TYPE_2")); - entities.add(createSample("CODE_1", "TYPE_1")); - entities.add(createSample("CODE_3", "TYPE_3")); - entities.add(createSample("CODE", "TYPE")); - - DetailedSearchCriteria criteria = new DetailedSearchCriteria(); - List<DetailedSearchCriterion> criterions = new ArrayList<DetailedSearchCriterion>(); - criteria.setCriteria(criterions); + entities.add(createEntity("CODE_2", "TYPE_2")); + entities.add(createEntity("CODE_1", "TYPE_1")); + entities.add(createEntity("CODE_3", "TYPE_3")); + entities.add(createEntity("CODE", "TYPE")); // Test hit only code - criterions.add(new DetailedSearchCriterion(DetailedSearchField.createAnyField(Arrays.asList("ANY")), "CODE")); + sort(entities, getAnyFieldCriterion("CODE")); - // - // Run algorithm - // - SearchResultSorterByScore sorter = new SearchResultSorterByScore(); - sorter.sort(entities, criteria); - - // // Verify results - // - assertEquals("CODE", entities.get(0).getCode()); - assertEquals("CODE_1", entities.get(1).getCode()); - assertEquals("CODE_2", entities.get(2).getCode()); - assertEquals("CODE_3", entities.get(3).getCode()); + assertEntities(entities, "CODE", "CODE_1", "CODE_2", "CODE_3"); } @Test - public void testTypeCode() + public void testCriteriaAnyTypeCode() { - // // Entities Setup - // List<EntitySearchResult> entities = new ArrayList<EntitySearchResult>(); - entities.add(createSample("CODE_2", "TYPE_2")); - entities.add(createSample("CODE_1", "TYPE_1")); - entities.add(createSample("CODE_3", "TYPE_3")); - entities.add(createSample("CODE", "TYPE")); - - DetailedSearchCriteria criteria = new DetailedSearchCriteria(); - List<DetailedSearchCriterion> criterions = new ArrayList<DetailedSearchCriterion>(); - criteria.setCriteria(criterions); - - // Test hit only code - criterions.add(new DetailedSearchCriterion(DetailedSearchField.createAnyField(Arrays.asList("ANY")), "TYPE")); + entities.add(createEntity("CODE_2", "TYPE_2")); + entities.add(createEntity("CODE_1", "TYPE_1")); + entities.add(createEntity("CODE_3", "TYPE_3")); + entities.add(createEntity("CODE", "TYPE")); - // - // Run algorithm - // - SearchResultSorterByScore sorter = new SearchResultSorterByScore(); - sorter.sort(entities, criteria); + // Test hit only type code + sort(entities, getAnyFieldCriterion("TYPE")); - // // Verify results - // - assertEquals("CODE", entities.get(0).getCode()); - assertEquals("CODE_1", entities.get(1).getCode()); - assertEquals("CODE_2", entities.get(2).getCode()); - assertEquals("CODE_3", entities.get(3).getCode()); + assertEntities(entities, "CODE", "CODE_1", "CODE_2", "CODE_3"); } @Test - public void testProperties() + public void testCriteriaAnyProperties() { - // // Entities Setup - // List<EntitySearchResult> entities = new ArrayList<EntitySearchResult>(); - entities.add(createSample("CODE_2", "TYPE_2", "ABC_1", "ABC_2")); - entities.add(createSample("CODE_1", "TYPE_1", "ABC_1")); - entities.add(createSample("CODE_3", "TYPE_3", "ABC_1", "ABC_2", "ABC_3")); - entities.add(createSample("CODE_4", "TYPE_4", "ABC")); - - DetailedSearchCriteria criteria = new DetailedSearchCriteria(); - List<DetailedSearchCriterion> criterions = new ArrayList<DetailedSearchCriterion>(); - criteria.setCriteria(criterions); + entities.add(createEntity("CODE_2", "TYPE_2", "ABC_1", "ABC_2")); + entities.add(createEntity("CODE_1", "TYPE_1", "ABC_1")); + entities.add(createEntity("CODE_3", "TYPE_3", "ABC_1", "ABC_2", "ABC_3")); + entities.add(createEntity("CODE_4", "TYPE_4", "ABC")); // Test hit only properties, partial and exact - criterions.add(new DetailedSearchCriterion(DetailedSearchField.createAnyField(Arrays.asList("ANY")), "ABC")); - - // - // Run algorithm - // - SearchResultSorterByScore sorter = new SearchResultSorterByScore(); - sorter.sort(entities, criteria); + sort(entities, getAnyFieldCriterion("ABC")); - // // Verify results - // - assertEquals("CODE_4", entities.get(0).getCode()); - assertEquals("CODE_3", entities.get(1).getCode()); - assertEquals("CODE_2", entities.get(2).getCode()); - assertEquals("CODE_1", entities.get(3).getCode()); + assertEntities(entities, "CODE_4", "CODE_3", "CODE_2", "CODE_1"); } @Test - public void testAll() + public void testCriteriaAnyAll() { - // // Entities Setup - // List<EntitySearchResult> entities = new ArrayList<EntitySearchResult>(); - entities.add(createSample("CODE_2", "TYPE_2", "ABC_1", "ABC_2")); - entities.add(createSample("CODE_1", "TYPE_1", "ABC_1")); - entities.add(createSample("CODE_3", "TYPE_3", "ABC_1", "ABC_2", "ABC_3")); - entities.add(createSample("CODE_4", "TYPE_4", "TYU")); - entities.add(createSample("CODE_5", "TYPE_5", "XYZ")); - entities.add(createSample("CODE_6", "TYPE_6", "666")); - - DetailedSearchCriteria criteria = new DetailedSearchCriteria(); - - List<DetailedSearchCriterion> criterions = new ArrayList<DetailedSearchCriterion>(); - // Test hit only type - criterions.add(new DetailedSearchCriterion(DetailedSearchField.createAnyField(Arrays.asList("ANY")), "TYPE_6")); - // Test hit only properties - criterions.add(new DetailedSearchCriterion(DetailedSearchField.createAnyField(Arrays.asList("ANY")), "ABC")); - // Test hit only code - criterions.add(new DetailedSearchCriterion(DetailedSearchField.createAnyField(Arrays.asList("ANY")), "CODE_4")); - // Test hit property and code - criterions.add(new DetailedSearchCriterion(DetailedSearchField.createAnyField(Arrays.asList("ANY")), "CODE_5")); - criterions.add(new DetailedSearchCriterion(DetailedSearchField.createAnyField(Arrays.asList("ANY")), "XYZ")); - criteria.setCriteria(criterions); - - // - // Run algorithm - // - SearchResultSorterByScore sorter = new SearchResultSorterByScore(); - sorter.sort(entities, criteria); - - // - // Verify results - // - assertEquals("CODE_5", entities.get(0).getCode()); - assertEquals("CODE_4", entities.get(1).getCode()); - assertEquals("CODE_6", entities.get(2).getCode()); - assertEquals("CODE_3", entities.get(3).getCode()); - assertEquals("CODE_2", entities.get(4).getCode()); - assertEquals("CODE_1", entities.get(5).getCode()); - } + entities.add(createEntity("CODE_2", "TYPE_2", "ABC_1", "ABC_2")); + entities.add(createEntity("CODE_1", "TYPE_1", "ABC_1")); + entities.add(createEntity("CODE_3", "TYPE_3", "ABC_1", "ABC_2", "ABC_3")); + entities.add(createEntity("CODE_4", "TYPE_4", "TYU")); + entities.add(createEntity("CODE_5", "TYPE_5", "XYZ")); + entities.add(createEntity("CODE_6", "TYPE_6", "666")); + + sort(entities, + getAnyFieldCriterion("TYPE_6"), // Test hit only type + getAnyFieldCriterion("ABC"), // Test hit only properties + getAnyFieldCriterion("CODE_4"), // Test hit only code + getAnyFieldCriterion("CODE_5"), // Test hit property and code + getAnyFieldCriterion("XYZ")); - private EntitySearchResult createSample(String code, String typeCode, String... propertyValues) - { - Map<String, String> properties = new HashMap<String, String>(); - int propertyIndex = 1; - for (String propertyValue : propertyValues) - { - properties.put("PROP_" + propertyIndex, propertyValue); - propertyIndex++; - } - - return new EntitySearchResult(code, typeCode, properties); + // Verify results + assertEntities(entities, "CODE_5", "CODE_4", "CODE_6", "CODE_3", "CODE_2", "CODE_1"); } } diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/search/sort/SearchResultSorterTestHelper.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/search/sort/SearchResultSorterTestHelper.java new file mode 100644 index 0000000000000000000000000000000000000000..bf32faa1c214a80f5c98bc7a7206de46099e203b --- /dev/null +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/search/sort/SearchResultSorterTestHelper.java @@ -0,0 +1,95 @@ +package ch.systemsx.cisd.openbis.generic.server.business.search.sort; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import junit.framework.Assert; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchCriteria; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchCriterion; +import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchField; + +public class SearchResultSorterTestHelper +{ + public static class EntitySearchResult implements IEntitySearchResult + { + private final String code; + + private final String typeCode; + + private final Map<String, String> properties; + + public EntitySearchResult( + String code, + String typeCode, + Map<String, String> properties) + { + this.code = code; + this.typeCode = typeCode; + this.properties = properties; + } + + public String getCode() + { + return code; + } + + public String getTypeCode() + { + return typeCode; + } + + public Map<String, String> getProperties() + { + return properties; + } + + } + + public static DetailedSearchCriterion getAnyFieldCriterion(String value) + { + return new DetailedSearchCriterion(DetailedSearchField.createAnyField(Arrays.asList("ANY")), value); + } + + public static EntitySearchResult createEntity(String code, String typeCode, String... propertyValues) + { + Map<String, String> properties = new HashMap<String, String>(); + int propertyIndex = 1; + for (String propertyValue : propertyValues) + { + properties.put("PROP_" + propertyIndex, propertyValue); + propertyIndex++; + } + + return new EntitySearchResult(code, typeCode, properties); + } + + public static void sort(List<EntitySearchResult> entities, DetailedSearchCriterion... searchCriterions) + { + DetailedSearchCriteria criteria = new DetailedSearchCriteria(); + List<DetailedSearchCriterion> criterions = new ArrayList<DetailedSearchCriterion>(); + criteria.setCriteria(criterions); + + for (DetailedSearchCriterion searchCriterion : searchCriterions) + { + criterions.add(searchCriterion); + } + + SearchResultSorterByScore sorter = new SearchResultSorterByScore(); + sorter.sort(entities, criteria); + } + + public static void assertEntities(List<EntitySearchResult> actualEntities, String... expectedCodes) + { + List<String> actualCodes = new ArrayList<String>(); + + for (EntitySearchResult actualEntity : actualEntities) + { + actualCodes.add(actualEntity.getCode()); + } + + Assert.assertEquals(Arrays.asList(expectedCodes), actualCodes); + } +}