/**
* Licensed to The Apereo Foundation under one or more contributor license
* agreements. See the NOTICE file distributed with this work for additional
* information regarding copyright ownership.
*
*
* The Apereo Foundation licenses this file to you under the Educational
* Community 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://opensource.org/licenses/ecl2.txt
*
* 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.opencastproject.index.service.resources.list.impl;
import org.opencastproject.index.service.exception.ListProviderException;
import org.opencastproject.index.service.resources.list.api.ResourceListProvider;
import org.opencastproject.index.service.resources.list.api.ResourceListQuery;
import org.opencastproject.index.service.resources.list.query.ResourceListQueryImpl;
import org.opencastproject.index.service.resources.list.query.StringListFilter;
import org.opencastproject.index.service.util.ListProviderUtil;
import org.opencastproject.security.api.Organization;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
public class ListProvidersServiceTest {
private static final String TEST_FILTER_NAME = "value";
private static final String TEST_SORTBY = "value";
private ListProvidersServiceImpl listProviderService;
/**
* Returns a map for the example with default filtering
*/
private ResourceListProvider getResourceListProvider(final String name, final Map<String, String> list) {
return new ResourceListProvider() {
@Override
public String[] getListNames() {
return new String[] { name };
}
@Override
public Map<String, String> getList(String listName, ResourceListQuery query, Organization organization) {
Map<String, String> filteredList = new HashMap<String, String>();
int i = 0;
for (Entry<String, String> e : list.entrySet()) {
if ((query.getOffset().isNone() || query.getOffset().get() <= i)
&& (!query.hasFilter(TEST_FILTER_NAME) || e.getValue().contains(
(String) query.getFilter(TEST_FILTER_NAME).getValue().get())))
filteredList.put(e.getKey(), e.getValue());
i++;
if ((query.getLimit().isSome() && filteredList.size() >= query.getLimit().get()))
break;
}
if (query.getSortBy().isSome() && query.getSortBy().get().equals(TEST_SORTBY)) {
return ListProviderUtil.sortMapByValue(filteredList, true);
} else {
return filteredList;
}
}
};
}
@Before
public void setUp() {
listProviderService = new ListProvidersServiceImpl();
listProviderService.activate(null);
}
@Test
public void testAddandRemove() throws ListProviderException {
final String providerName1 = "test1";
final Map<String, String> list1 = new HashMap<String, String>();
list1.put("1", "test");
list1.put("2", "test");
list1.put("3", "test");
list1.put("4", "test");
final String providerName2 = "test2";
final Map<String, String> list2 = new HashMap<String, String>();
list2.put("1", "test");
list2.put("2", "test");
list2.put("3", "test");
list2.put("4", "test");
int baseNumber = listProviderService.getAvailableProviders().size();
ResourceListQuery query = new ResourceListQueryImpl();
listProviderService.addProvider(getResourceListProvider(providerName1, list1));
listProviderService.addProvider(getResourceListProvider(providerName2, list2));
Assert.assertEquals(baseNumber + 2, listProviderService.getAvailableProviders().size());
Assert.assertTrue(listProviderService.hasProvider(providerName1));
Assert.assertTrue(listProviderService.hasProvider(providerName2));
Assert.assertEquals(list1, listProviderService.getList(providerName1, query, null, false));
Assert.assertEquals(list2, listProviderService.getList(providerName2, query, null, false));
listProviderService.removeProvider(providerName2);
Assert.assertEquals(baseNumber + 1, listProviderService.getAvailableProviders().size());
Assert.assertFalse(listProviderService.hasProvider(providerName2));
}
@Test
public void testQuery() throws ListProviderException {
ResourceListQueryImpl query = new ResourceListQueryImpl();
final String providerName1 = "test1";
final Map<String, String> list1 = new HashMap<String, String>();
list1.put("1", "x test34");
list1.put("2", "a test12");
list1.put("3", "c ok");
list1.put("4", "z essai test");
listProviderService.addProvider(getResourceListProvider(providerName1, list1));
query.setLimit(2);
query.setOffset(1);
Assert.assertEquals(2, listProviderService.getList(providerName1, query, null, false).size());
query.setLimit(1);
query.setOffset(5);
Assert.assertEquals(0, listProviderService.getList(providerName1, query, null, false).size());
query.setLimit(2);
query.setOffset(1);
Assert.assertEquals(2, listProviderService.getList(providerName1, query, null, false).size());
query.setLimit(12);
query.setOffset(0);
query.addFilter(new StringListFilter(TEST_FILTER_NAME, "test"));
Assert.assertEquals(3, listProviderService.getList(providerName1, query, null, false).size());
// query.setSortedBy(TEST_SORTBY);
// Map<String, String> list = listProviderService.getList(providerName1, query, null);
// int i = 0;
// Iterator<Entry<String, String>> iterator = list.entrySet().iterator();
// Assert.assertEquals(list1.get("2"), iterator.next().getValue());
}
}