blob: d2be1817f4ad75a239a4fd3dd5424b97a3b901cf [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010 SAP AG, Walldorf.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* SAP AG - initial API and implementation
*******************************************************************************/
package org.eclipse.platform.discovery.runtime.test.unit.internal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.eclipse.platform.discovery.runtime.api.IDestinationsProvider;
import org.eclipse.platform.discovery.runtime.api.ISearchDestination;
import org.eclipse.platform.discovery.runtime.api.ISearchSubdestination;
import org.eclipse.platform.discovery.runtime.internal.DestinationCategoryNotFoundException;
import org.eclipse.platform.discovery.runtime.internal.ISearchProviderActivationConfig;
import org.eclipse.platform.discovery.runtime.internal.ISearchProviderConfiguration;
import org.eclipse.platform.discovery.runtime.internal.ISubdestinationsActivationConfig;
import org.eclipse.platform.discovery.runtime.internal.IXPParsersFactory;
import org.eclipse.platform.discovery.runtime.internal.ProviderNotFoundException;
import org.eclipse.platform.discovery.runtime.internal.impl.SearchProviderConfiguration;
import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationCategoryDescription;
import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IDestinationsProviderDescription;
import org.eclipse.platform.discovery.runtime.internal.model.descriptions.IObjectTypeDescription;
import org.eclipse.platform.discovery.runtime.internal.model.descriptions.ISearchProviderDescription;
import org.eclipse.platform.discovery.runtime.internal.xp.IDestinationCategoryExtensionParser;
import org.eclipse.platform.discovery.runtime.internal.xp.IDestinationsProviderExtensionParser;
import org.eclipse.platform.discovery.runtime.internal.xp.IObjectTypeExtensionParser;
import org.eclipse.platform.discovery.runtime.internal.xp.ISearchProvidersExtensionParser;
import org.eclipse.platform.discovery.testutils.utils.jmock.Mock;
import org.eclipse.platform.discovery.testutils.utils.jmock.MockObjectTestCase;
import org.eclipse.platform.discovery.testutils.utils.model.DestProviderDescriptionBuilder;
import org.eclipse.platform.discovery.testutils.utils.model.DestinationCategoryDescriptionBuilder;
import org.eclipse.platform.discovery.testutils.utils.model.DestinationsProviderBuilder;
import org.eclipse.platform.discovery.testutils.utils.model.ObjectTypeDescriptionBuilder;
import org.eclipse.platform.discovery.testutils.utils.model.SearchDestinationBuilder;
import org.eclipse.platform.discovery.testutils.utils.model.SearchProviderDescriptionBuilder;
import org.eclipse.platform.discovery.testutils.utils.reflection.ReflectionUtils;
import org.eclipse.platform.discovery.util.internal.logging.ILogger;
import org.jmock.core.Constraint;
import org.jmock.core.Invocation;
import org.jmock.core.Stub;
import org.mockito.Mockito;
/**
* See SearchProviderConfigurationTestFixture.txt for explanations on the test fixture
*/
public class SearchProviderConfigurationTest extends MockObjectTestCase
{
private Boolean isActiveForSelection = true;
private ISearchProviderConfiguration searchProviderConfig;
private Mock<ISearchProvidersExtensionParser> searchProviderExtensionParser;
private Mock<IObjectTypeExtensionParser> objectTypeExtensionParser;
private Mock<IDestinationCategoryExtensionParser> destCategoryExtensionParser;
private Mock<IDestinationsProviderExtensionParser> destProviderExtensionParser;
private Mock<IXPParsersFactory> xpParsersFactory;
// object types
private IObjectTypeDescription objectType_1;
private IObjectTypeDescription objectType_2;
private static final String OBJECT_TYPE_ID_1 = "objecttype1";
private static final String OBJECT_TYPE_ID_2 = "objecttype2";
private static final String OBJECT_TYPE_NAME_1 = "Object 1";
private static final String OBJECT_TYPE_NAME_2 = "Object 2";
// destination categories
private IDestinationCategoryDescription destinationCategory1;
private IDestinationCategoryDescription destinationCategory2;
private IDestinationCategoryDescription destinationCategory3;
private IDestinationCategoryDescription destinationCategory4;
private final static String DESTINATION_CATEGORY_ID_1 = "destcategory1";
private final static String DESTINATION_CATEGORY_ID_2 = "destcategory2";
private final static String DESTINATION_CATEGORY_ID_3 = "destcategory3";
private final static String DESTINATION_CATEGORY_ID_4 = "destcategory4";
private final static String DESTINATION_CATEGORY_NAME_1 = "Destination category 1";
private final static String DESTINATION_CATEGORY_NAME_2 = "Destination category 2";
private final static String DESTINATION_CATEGORY_NAME_3 = "Destination category 3";
private final static String DESTINATION_CATEGORY_NAME_4 = "Destination category 4";
// destinations
private ISearchDestination searchDestination1;
private ISearchDestination searchDestination2;
private ISearchDestination searchDestination3;
private ISearchDestination searchDestination4;
private ISearchDestination searchDestination5;
private ISearchDestination searchDestination6;
private ISearchDestination searchDestination7;
private ISearchDestination searchDestination8;
private static final String SEARCH_DESTINATION_NAME_1 = "Search destination 1";
private static final String SEARCH_DESTINATION_NAME_2 = "Search destination 2";
private static final String SEARCH_DESTINATION_NAME_3 = "Search destination 3";
private static final String SEARCH_DESTINATION_NAME_4 = "Search destination 4";
private static final String SEARCH_DESTINATION_NAME_5 = "Search destination 5";
private static final String SEARCH_DESTINATION_NAME_6 = "Search destination 6";
private static final String SEARCH_DESTINATION_NAME_7 = "Search destination 7";
private static final String SEARCH_DESTINATION_NAME_8 = "Search destination 8";
// destination providers
private IDestinationsProviderDescription destinationProviderDescr1;
private IDestinationsProviderDescription destinationProviderDescr2;
private IDestinationsProviderDescription destinationProviderDescr3;
private IDestinationsProviderDescription destinationProviderDescr4;
private IDestinationsProviderDescription destinationProviderDescr5;
private IDestinationsProvider destinationProvider1;
private IDestinationsProvider destinationProvider2;
private IDestinationsProvider destinationProvider3;
private IDestinationsProvider destinationProvider4;
private IDestinationsProvider destinationProvider5;
private final static String DESTINATION_PROVIDER_ID_1 = "destinationprovider1";
private final static String DESTINATION_PROVIDER_ID_2 = "destinationprovider2";
private final static String DESTINATION_PROVIDER_ID_3 = "destinationprovider3";
private final static String DESTINATION_PROVIDER_ID_4 = "destinationprovider4";
private final static String DESTINATION_PROVIDER_ID_5 = "destinationprovider5";
// search providers
private ISearchProviderDescription provider1;
private ISearchProviderDescription provider2;
private ISearchProviderDescription provider3;
private ISearchProviderDescription provider4;
private static final String PROVIDER_ID_1 = "provider1";
private static final String PROVIDER_ID_2 = "provider2";
private static final String PROVIDER_ID_3 = "provider3";
private static final String PROVIDER_ID_4 = "provider4";
private static final String PROVIDER_NAME_1 = "Provider 1";
private static final String PROVIDER_NAME_2 = "Provider 2";
private static final String PROVIDER_NAME_3 = "Provider 3";
private static final String PROVIDER_NAME_4 = "Provider 4";
// subdestinations
private Mock<ISearchSubdestination> subdestination1;
private Mock<ISearchSubdestination> subdestination2;
private Mock<ISearchSubdestination> subdestination3;
private final static String SUBDESTINATION_ID_1 = "subdestination1";
private final static String SUBDESTINATION_ID_2 = "subdestination2";
private final static String SUBDESTINATION_ID_3 = "subdestination3";
private final static String SUBDESTINATION_NAME_1 = "Subdestination 1";
private final static String SUBDESTINATION_NAME_2 = "Subdestination 2";
private final static String SUBDESTINATION_NAME_3 = "Subdestination 3";
@Override
protected void setUp() throws Exception
{
setupObjectTypes();
setupSearchDestinations();
setupDestinationProviders();
setupDestinationCategories();
setupSearchProviders();
setupSubdestinations();
setupObjectTypesExtensionParser();
setupDestCategoryExtensionParser();
setupDestProvidersExtParser();
setupSearchProvidersExtParser();
setupParsersFactory();
searchProviderConfig = new SearchProviderConfiguration(xpParsersFactory.proxy(), createActivationConfig(), createSubdestinationsActivationConfig());
}
private void setupParsersFactory() {
xpParsersFactory = mock(IXPParsersFactory.class);
xpParsersFactory.stubs().method("createDestinationsProviderParser").will(returnValue(destProviderExtensionParser.proxy()));
xpParsersFactory.stubs().method("createDestinationsCategoryParser").will(returnValue(destCategoryExtensionParser.proxy()));
xpParsersFactory.stubs().method("createObjectTypeParser").will(returnValue(objectTypeExtensionParser.proxy()));
xpParsersFactory.stubs().method("createSearchProviderParser").will(returnValue(searchProviderExtensionParser.proxy()));
}
private void setupObjectTypes()
{
objectType_1 = new ObjectTypeDescriptionBuilder().withId(OBJECT_TYPE_ID_1).withName(OBJECT_TYPE_NAME_1).object();
objectType_2 = new ObjectTypeDescriptionBuilder().withId(OBJECT_TYPE_ID_2).withName(OBJECT_TYPE_NAME_2).object();
}
private void setupSearchDestinations()
{
searchDestination1 = stubSearchDestination(SEARCH_DESTINATION_NAME_1);
searchDestination2 = stubSearchDestination(SEARCH_DESTINATION_NAME_2);
searchDestination3 = stubSearchDestination(SEARCH_DESTINATION_NAME_3);
searchDestination4 = stubSearchDestination(SEARCH_DESTINATION_NAME_4);
searchDestination5 = stubSearchDestination(SEARCH_DESTINATION_NAME_5);
searchDestination6 = stubSearchDestination(SEARCH_DESTINATION_NAME_6);
searchDestination7 = stubSearchDestination(SEARCH_DESTINATION_NAME_7);
searchDestination8 = stubSearchDestination(SEARCH_DESTINATION_NAME_8);
}
private ISearchDestination stubSearchDestination(final String displayName)
{
return new SearchDestinationBuilder().withDisplayName(displayName).object();
}
private void setupDestinationProviders()
{
destinationProvider1 = stubDestinationsProvider(searchDestination1, searchDestination2);
destinationProviderDescr1 = stubDestinationsProviderDescription(DESTINATION_PROVIDER_ID_1, destinationProvider1);
destinationProvider2 = stubDestinationsProvider(searchDestination3);
destinationProviderDescr2 = stubDestinationsProviderDescription(DESTINATION_PROVIDER_ID_2, destinationProvider2);
destinationProvider3 = stubDestinationsProvider(searchDestination4, searchDestination5);
destinationProviderDescr3 = stubDestinationsProviderDescription(DESTINATION_PROVIDER_ID_3, destinationProvider3);
destinationProvider4 = stubDestinationsProvider(searchDestination6, searchDestination7);
destinationProviderDescr4 = stubDestinationsProviderDescription(DESTINATION_PROVIDER_ID_4, destinationProvider4);
destinationProvider5 = stubDestinationsProvider(searchDestination8);
destinationProviderDescr5 = stubDestinationsProviderDescription(DESTINATION_PROVIDER_ID_5, destinationProvider5);
}
private IDestinationsProvider stubDestinationsProvider(final ISearchDestination... destinations)
{
return new DestinationsProviderBuilder().withDestinations(destinations).object();
}
private IDestinationsProviderDescription stubDestinationsProviderDescription(final String id, final IDestinationsProvider destProviderInstance)
{
return new DestProviderDescriptionBuilder().withProvider(destProviderInstance).withId(id).object();
}
private void setupDestinationCategories()
{
destinationCategory1 = stubDestCategoryDescription(DESTINATION_CATEGORY_ID_1, DESTINATION_CATEGORY_NAME_1, DESTINATION_PROVIDER_ID_1);
destinationCategory2 = stubDestCategoryDescription(DESTINATION_CATEGORY_ID_2, DESTINATION_CATEGORY_NAME_2, DESTINATION_PROVIDER_ID_2, DESTINATION_PROVIDER_ID_3);
destinationCategory3 = stubDestCategoryDescription(DESTINATION_CATEGORY_ID_3, DESTINATION_CATEGORY_NAME_3, DESTINATION_PROVIDER_ID_4);
destinationCategory4 = stubDestCategoryDescription(DESTINATION_CATEGORY_ID_4, DESTINATION_CATEGORY_NAME_4, DESTINATION_PROVIDER_ID_5);
}
private IDestinationCategoryDescription stubDestCategoryDescription(final String id, final String displayName, final String... destProviderIds)
{
return new DestinationCategoryDescriptionBuilder().withDestinationClass(ISearchDestination.class).withDestinationProviders(destProviderIds).withId(id).withName(displayName).object();
}
private void setupSearchProviders()
{
provider1 = stubSearchProviderDescription(PROVIDER_ID_1, PROVIDER_NAME_1, true, objectType_1, destinationCategory1, destinationCategory2);
provider2 = stubSearchProviderDescription(PROVIDER_ID_2, PROVIDER_NAME_2, false, objectType_1, destinationCategory3, destinationCategory4);
provider3 = stubSearchProviderDescription(PROVIDER_ID_3, PROVIDER_NAME_3, true, objectType_1, destinationCategory2, destinationCategory3);
provider4 = stubSearchProviderDescription(PROVIDER_ID_4, PROVIDER_NAME_4, false, objectType_2, destinationCategory1, destinationCategory4);
}
private ISearchProviderDescription stubSearchProviderDescription(String id, String name, boolean supportsTextSearch, IObjectTypeDescription objectType, IDestinationCategoryDescription... categories)
{
return new SearchProviderDescriptionBuilder().supportsTextSearch(supportsTextSearch).withDestinationCategories(categories).supportsObjectType(objectType).withId(id).withName(name).object();
}
private void setupSubdestinations()
{
subdestination1 = mock(ISearchSubdestination.class, SUBDESTINATION_NAME_1);
subdestination1.stubs().method("getId").will(returnValue(SUBDESTINATION_ID_1));
subdestination1.stubs().method("getDisplayName").will(returnValue(SUBDESTINATION_NAME_1));
subdestination1.stubs().method("getDestinationCategoryId").will(returnValue(DESTINATION_CATEGORY_ID_1));
subdestination1.stubs().method("getObjectTypeId").will(returnValue(OBJECT_TYPE_ID_1));
subdestination2 = mock(ISearchSubdestination.class, SUBDESTINATION_NAME_2);
subdestination2.stubs().method("getId").will(returnValue(SUBDESTINATION_ID_2));
subdestination2.stubs().method("getDisplayName").will(returnValue(SUBDESTINATION_NAME_2));
subdestination2.stubs().method("getDestinationCategoryId").will(returnValue(DESTINATION_CATEGORY_ID_2));
subdestination2.stubs().method("getObjectTypeId").will(returnValue(OBJECT_TYPE_ID_1));
subdestination3 = mock(ISearchSubdestination.class, SUBDESTINATION_NAME_3);
subdestination3.stubs().method("getId").will(returnValue(SUBDESTINATION_ID_3));
subdestination3.stubs().method("getDisplayName").will(returnValue(SUBDESTINATION_NAME_3));
subdestination3.stubs().method("getDestinationCategoryId").will(returnValue(DESTINATION_CATEGORY_ID_2));
subdestination3.stubs().method("getObjectTypeId").will(returnValue(OBJECT_TYPE_ID_1));
}
private void setupObjectTypesExtensionParser()
{
objectTypeExtensionParser = mock(IObjectTypeExtensionParser.class);
final List<IObjectTypeDescription> objects = Arrays.asList(new IObjectTypeDescription[]{objectType_1, objectType_2});
objectTypeExtensionParser.stubs().method("readContributions").will(returnValue(objects));
}
private void setupDestCategoryExtensionParser()
{
destCategoryExtensionParser = mock(IDestinationCategoryExtensionParser.class);
final List<IDestinationCategoryDescription> categories = new ArrayList<IDestinationCategoryDescription>();
categories.addAll(Arrays.asList(new IDestinationCategoryDescription[]{destinationCategory1, destinationCategory2, destinationCategory3, destinationCategory4}));
destCategoryExtensionParser.stubs().method("readContributions").will(returnValue(categories));
}
private void setupDestProvidersExtParser()
{
destProviderExtensionParser = mock(IDestinationsProviderExtensionParser.class);
final List<IDestinationsProviderDescription> providers = new ArrayList<IDestinationsProviderDescription>();
providers.addAll(Arrays.asList(new IDestinationsProviderDescription[]{destinationProviderDescr1, destinationProviderDescr2, destinationProviderDescr3, destinationProviderDescr4, destinationProviderDescr5}));
destProviderExtensionParser.stubs().method("readContributions").will(returnValue(providers));
}
private void setupSearchProvidersExtParser()
{
searchProviderExtensionParser = mock(ISearchProvidersExtensionParser.class);
final List<ISearchProviderDescription> providers = new ArrayList<ISearchProviderDescription>();
providers.addAll(Arrays.asList(new ISearchProviderDescription[]{provider1, provider2, provider3, provider4}));
searchProviderExtensionParser.stubs().method("readContributions").will(returnValue(providers));
}
private ISearchProviderActivationConfig createActivationConfig()
{
final Mock<ISearchProviderActivationConfig> activationConfig = mock(ISearchProviderActivationConfig.class);
activationConfig.stubs().method("getActiveSearchProviderDescription").with(eq(objectType_2), or(eq(destinationCategory1), eq(destinationCategory4))).will(returnValue(provider4));
activationConfig.stubs().method("getActiveSearchProviderDescription").with(eq(objectType_2), not(or(eq(destinationCategory1), eq(destinationCategory4)))).will(throwException(new ProviderNotFoundException("Provider not found")));
activationConfig.stubs().method("getActiveSearchProviderDescription").with(eq(objectType_1), eq(destinationCategory1)).will(returnValue(provider1));
activationConfig.stubs().method("getActiveSearchProviderDescription").with(eq(objectType_1), eq(destinationCategory2)).will(returnValue(provider1));
activationConfig.stubs().method("getActiveSearchProviderDescription").with(eq(objectType_1), eq(destinationCategory3)).will(returnValue(provider3));
activationConfig.stubs().method("getActiveSearchProviderDescription").with(eq(objectType_1), eq(destinationCategory4)).will(returnValue(provider2));
return activationConfig.proxy();
}
private ISubdestinationsActivationConfig createSubdestinationsActivationConfig()
{
final Mock<ISubdestinationsActivationConfig> activationConfig = mock(ISubdestinationsActivationConfig.class);
activationConfig.stubs().method("getAvailableSearchSubdestinations").with(eq(objectType_2), ANYTHING, ANYTHING).will(returnValue(new ArrayList<ISearchSubdestination>()));
activationConfig.stubs().method("getAvailableSearchSubdestinations").with(eq(objectType_1), eq(destinationCategory1), ANYTHING).will(returnValue(Arrays.asList(new ISearchSubdestination[]{subdestination1.proxy()})));
activationConfig.stubs().method("getAvailableSearchSubdestinations").with(eq(objectType_1), eq(destinationCategory2), ANYTHING).will(returnValue(Arrays.asList(new ISearchSubdestination[]{subdestination2.proxy(), subdestination3.proxy()})));
activationConfig.stubs().method("getAvailableSearchSubdestinations").with(eq(objectType_1), eq(destinationCategory3), ANYTHING).will(returnValue(new ArrayList<ISearchSubdestination>()));
activationConfig.stubs().method("getAvailableSearchSubdestinations").with(eq(objectType_1), eq(destinationCategory4), ANYTHING).will(returnValue(new ArrayList<ISearchSubdestination>()));
activationConfig.stubs().method("isSubdestinationActive").with(eq(subdestination2.proxy()), eq(objectType_1), eq(destinationCategory2), eq(provider1)).will(checkValueForSelection());
Constraint [] constraints = {eq(objectType_1), eq(destinationCategory2), eq(provider1),eq(subdestination2.proxy()), eq(new Boolean(false))};
activationConfig.stubs().method("activateSubdestination").with(constraints).will(new Stub(){
public Object invoke(Invocation arg0) throws Throwable {
isActiveForSelection = new Boolean(false);
return null;
}
public StringBuffer describeTo(StringBuffer arg0) {
return null;
}});
return activationConfig.proxy();
}
private Stub checkValueForSelection() {
return new Stub()
{
@Override
public StringBuffer describeTo(StringBuffer buffer)
{
return buffer;
}
@Override
public Object invoke(Invocation invocation) throws Throwable
{
return isActiveForSelection;
}
};
}
public void testGetAvailableSearchProvidersDescriptionsForObjectType()
{
final List<ISearchProviderDescription> descriptions = searchProviderConfig.getAvailableSearchProviderDescriptions(objectType_1);
assertEquals("Three providers expected", 3, descriptions.size());
final List<String> ids = new ArrayList<String>();
for (ISearchProviderDescription d : descriptions)
{
assertEquals("Unexpected object type", OBJECT_TYPE_ID_1, d.getObjectType().getId());
ids.add(d.getId());
}
assertTrue("Provider 1 not returned", ids.contains(PROVIDER_ID_1));
assertTrue("Provider 2 not returned", ids.contains(PROVIDER_ID_2));
assertTrue("Provider 3 not returned", ids.contains(PROVIDER_ID_3));
final List<String> ids2 = new ArrayList<String>();
for(ISearchProviderDescription p : searchProviderConfig.getAvailableSearchProviderDescriptions(objectType_2))
{
assertEquals("Unexpected object type", OBJECT_TYPE_ID_2, p.getObjectType().getId());
ids2.add(p.getId());
}
assertEquals("One provider expected", 1, ids2.size());
assertTrue("Provider 4 not returned", ids2.contains(PROVIDER_ID_4));
}
public void testGetAvailableDestinationCategoriesForObjectType()
{
final List<String> cat1Ids = new ArrayList<String>();
for(IDestinationCategoryDescription cat : searchProviderConfig.getAvailableDestinationCategoriesForObjectType(objectType_1))
{
cat1Ids.add(cat.getId());
}
assertEquals("4 categories expected", 4, cat1Ids.size());
assertTrue("Destinationa category 1 not returned", cat1Ids.contains(DESTINATION_CATEGORY_ID_1));
assertTrue("Destinationa category 1 not returned", cat1Ids.contains(DESTINATION_CATEGORY_ID_2));
assertTrue("Destinationa category 1 not returned", cat1Ids.contains(DESTINATION_CATEGORY_ID_3));
assertTrue("Destinationa category 1 not returned", cat1Ids.contains(DESTINATION_CATEGORY_ID_4));
final List<String> cat2Ids = new ArrayList<String>();
for(IDestinationCategoryDescription cat : searchProviderConfig.getAvailableDestinationCategoriesForObjectType(objectType_2))
{
cat2Ids.add(cat.getId());
}
assertEquals("2 categories expected", 2, cat2Ids.size());
assertTrue("Destinationa category 1 not returned", cat2Ids.contains(DESTINATION_CATEGORY_ID_1));
assertTrue("Destinationa category 1 not returned", cat2Ids.contains(DESTINATION_CATEGORY_ID_4));
}
public void testGetActiveSearchProvider() throws ProviderNotFoundException
{
assertEquals(searchProviderConfig.getActiveSearchProvider(objectType_1, destinationCategory1).getId(), PROVIDER_ID_1);
assertEquals(searchProviderConfig.getActiveSearchProvider(objectType_1, destinationCategory2).getId(), PROVIDER_ID_1);
assertEquals(searchProviderConfig.getActiveSearchProvider(objectType_1, destinationCategory3).getId(), PROVIDER_ID_3);
assertEquals(searchProviderConfig.getActiveSearchProvider(objectType_1, destinationCategory4).getId(), PROVIDER_ID_2);
assertEquals(searchProviderConfig.getActiveSearchProvider(objectType_2, destinationCategory1).getId(), PROVIDER_ID_4);
assertEquals(searchProviderConfig.getActiveSearchProvider(objectType_2, destinationCategory4).getId(), PROVIDER_ID_4);
try
{
searchProviderConfig.getActiveSearchProvider(objectType_2, destinationCategory3);
fail("ProviderNotFoundException not thrown");
}
catch(ProviderNotFoundException e)
{
//expected
}
try
{
searchProviderConfig.getActiveSearchProvider(objectType_2, destinationCategory2);
fail("ProviderNotFoundException not thrown");
}
catch(ProviderNotFoundException e)
{
//expected
}
}
public void testGetObjectTypes()
{
final List<String> objectIds = new ArrayList<String>();
for(IObjectTypeDescription objectType : searchProviderConfig.getObjectTypes())
{
objectIds.add(objectType.getId());
}
assertEquals("2 objects expected", 2, objectIds.size());
assertTrue("Object 1 not returned", objectIds.contains(OBJECT_TYPE_ID_1));
assertTrue("Object 2 not returned", objectIds.contains(OBJECT_TYPE_ID_2));
}
public void testGetDestinationCategories()
{
final List<String> catIds = new ArrayList<String>();
for(IDestinationCategoryDescription cat : searchProviderConfig.getDestinationCategories())
{
catIds.add(cat.getId());
}
assertEquals("4 categories expected", 4, catIds.size());
assertTrue("Category 1 not returned", catIds.contains(DESTINATION_CATEGORY_ID_1));
assertTrue("Category 2 not returned", catIds.contains(DESTINATION_CATEGORY_ID_2));
assertTrue("Category 3 not returned", catIds.contains(DESTINATION_CATEGORY_ID_3));
assertTrue("Category 4 not returned", catIds.contains(DESTINATION_CATEGORY_ID_4));
}
public void testGetDestinationProvidersForCategory()
{
final List<IDestinationsProviderDescription> providers1 = searchProviderConfig.getDestinationProvidersForCategory(destinationCategory1);
assertEquals("One destination provider expected", 1, providers1.size());
assertTrue("Destination provider 1 not returned", providers1.contains(destinationProviderDescr1));
final List<IDestinationsProviderDescription> providers2 = searchProviderConfig.getDestinationProvidersForCategory(destinationCategory2);
assertEquals("Two destination providers expected", 2, providers2.size());
assertTrue("Destination provider 2 not returned", providers2.contains(destinationProviderDescr2));
assertTrue("Destination provider 3 not returned", providers2.contains(destinationProviderDescr3));
final List<IDestinationsProviderDescription> providers3 = searchProviderConfig.getDestinationProvidersForCategory(destinationCategory3);
assertEquals("One destination provider expected", 1, providers3.size());
assertTrue("Destination provider 4 not returned", providers3.contains(destinationProviderDescr4));
final List<IDestinationsProviderDescription> providers4 = searchProviderConfig.getDestinationProvidersForCategory(destinationCategory4);
assertEquals("One destination provider expected", 1, providers4.size());
assertTrue("Destination provider 5 not returned", providers4.contains(destinationProviderDescr5));
}
public void testGetSearchDestinations()
{
List<ISearchDestination> destinations = searchProviderConfig.getSearchDestinations(destinationCategory1, destinationProvider1);
assertEquals("Two destinations expected", 2, destinations.size());
assertTrue("Destination 1 not returned", destinations.contains(searchDestination1));
assertTrue("Destination 2 not returned", destinations.contains(searchDestination2));
destinations = searchProviderConfig.getSearchDestinations(destinationCategory2, destinationProvider2);
assertEquals("One destination expected", 1, destinations.size());
assertTrue("Destination 3 not returned", destinations.contains(searchDestination3));
destinations = searchProviderConfig.getSearchDestinations(destinationCategory2, destinationProvider3);
assertEquals("Two destinations expected", 2, destinations.size());
assertTrue("Destination 4 not returned", destinations.contains(searchDestination4));
assertTrue("Destination 5 not returned", destinations.contains(searchDestination5));
destinations = searchProviderConfig.getSearchDestinations(destinationCategory3, destinationProvider4);
assertEquals("Two destinations expected", 2, destinations.size());
assertTrue("Destination 6 not returned", destinations.contains(searchDestination6));
assertTrue("Destination 7 not returned", destinations.contains(searchDestination7));
destinations = searchProviderConfig.getSearchDestinations(destinationCategory4, destinationProvider5);
assertEquals("One destination expected", 1, destinations.size());
assertTrue("Destination 8 not returned", destinations.contains(searchDestination8));
}
@SuppressWarnings("unchecked")
public void testGetSearchDestinationsIgnoredWhenDestinationsClassNoLegal() throws SecurityException, IllegalArgumentException, NoSuchFieldException, IllegalAccessException
{
final Mock<ILogger> logger = mock(ILogger.class);
logger.expects(atLeastOnce()).method("logWarn");
ReflectionUtils.setFieldValue(searchProviderConfig, "logger", logger.proxy());
final Class<?> illegalClass = String.class;
Mockito.stub(destinationCategory1.getDestinationsClass()).toReturn((Class<ISearchDestination>) illegalClass);
assertEquals("No search destinations expected", 0, searchProviderConfig.getSearchDestinations(destinationCategory1, destinationProvider1).size());
}
public void testGetAvailableSearchSubdestinations()
{
final List<ISearchSubdestination> subdest1 = searchProviderConfig.getAvailableSearchSubdestinations(objectType_1, destinationCategory1, provider1);
assertEquals("One subdestination expected", 1, subdest1.size());
assertTrue("Subdestination 1 not returned", subdest1.contains(subdestination1.proxy()));
final List<ISearchSubdestination> subdest2 = searchProviderConfig.getAvailableSearchSubdestinations(objectType_1, destinationCategory2, provider1);
assertEquals("Two subdestination expected", 2, subdest2.size());
assertTrue("Subdestination 2 not returned", subdest2.contains(subdestination2.proxy()));
assertTrue("Subdestination 3 not returned", subdest2.contains(subdestination3.proxy()));
final List<ISearchSubdestination> subdest3 = searchProviderConfig.getAvailableSearchSubdestinations(objectType_1, destinationCategory3, provider2);
assertEquals("No subdestination expected", 0, subdest3.size());
}
public void testGetActiveSearchSubdestinations()
{
final List<ISearchSubdestination> subdest2 = searchProviderConfig.getAvailableSearchSubdestinations(objectType_1, destinationCategory2, provider1);
assertEquals("Two subdestination expected", 2, subdest2.size());
assertTrue("Subdestination 2 not returned", subdest2.contains(subdestination2.proxy()));
assertTrue("Subdestination 3 not returned", subdest2.contains(subdestination3.proxy()));
assertTrue("Subdestination 2 not checked", searchProviderConfig.isSubdestinationActive(subdestination2.proxy(), objectType_1, destinationCategory2, provider1));
searchProviderConfig.activateSubdestination( objectType_1, destinationCategory2, provider1, subdestination2.proxy(), false);
assertFalse("Subdestination 2 is checked", searchProviderConfig.isSubdestinationActive(subdestination2.proxy(), objectType_1, destinationCategory2, provider1));
}
public void testGetDestinationCategoriesForDestination() throws DestinationCategoryNotFoundException
{
assertEquals("Destination category 1 expected for destination1", DESTINATION_CATEGORY_ID_1, searchProviderConfig.getDestinationCategoriesForDestination(searchDestination1).iterator().next().getId());
assertEquals("Destination category 1 expected for destination2", DESTINATION_CATEGORY_ID_1, searchProviderConfig.getDestinationCategoriesForDestination(searchDestination2).iterator().next().getId());
assertEquals("Destination category 2 expected for destination3", DESTINATION_CATEGORY_ID_2, searchProviderConfig.getDestinationCategoriesForDestination(searchDestination3).iterator().next().getId());
assertEquals("Destination category 2 expected for destination4", DESTINATION_CATEGORY_ID_2, searchProviderConfig.getDestinationCategoriesForDestination(searchDestination4).iterator().next().getId());
assertEquals("Destination category 2 expected for destination5", DESTINATION_CATEGORY_ID_2, searchProviderConfig.getDestinationCategoriesForDestination(searchDestination5).iterator().next().getId());
assertEquals("Destination category 3 expected for destination6", DESTINATION_CATEGORY_ID_3, searchProviderConfig.getDestinationCategoriesForDestination(searchDestination6).iterator().next().getId());
assertEquals("Destination category 3 expected for destination7", DESTINATION_CATEGORY_ID_3, searchProviderConfig.getDestinationCategoriesForDestination(searchDestination7).iterator().next().getId());
assertEquals("Destination category 4 expected for destination8", DESTINATION_CATEGORY_ID_4, searchProviderConfig.getDestinationCategoriesForDestination(searchDestination8).iterator().next().getId());
}
public void testGetAvailableDestinationProviders()
{
final List<IDestinationsProviderDescription> providers = searchProviderConfig.getAvailableDestinationProviders();
assertEquals("5 providers expected", 5, providers.size());
assertTrue("destinationProviderDescr1 not found", providers.contains(destinationProviderDescr1));
assertTrue("destinationProviderDescr2 not found", providers.contains(destinationProviderDescr2));
assertTrue("destinationProviderDescr3 not found", providers.contains(destinationProviderDescr3));
assertTrue("destinationProviderDescr4 not found", providers.contains(destinationProviderDescr4));
assertTrue("destinationProviderDescr5 not found", providers.contains(destinationProviderDescr5));
}
}