/** * 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.external.endpoint; import static com.entwinemedia.fn.data.Opt.some; import static org.easymock.EasyMock.anyObject; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.createNiceMock; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.expectLastCall; import static org.easymock.EasyMock.replay; import static org.opencastproject.index.service.util.CatalogAdapterUtil.getCatalogProperties; import org.opencastproject.external.impl.index.ExternalIndex; import org.opencastproject.index.service.api.IndexService; import org.opencastproject.index.service.catalog.adapter.MetadataList; import org.opencastproject.index.service.catalog.adapter.series.CommonSeriesCatalogUIAdapter; import org.opencastproject.index.service.impl.index.series.Series; import org.opencastproject.index.service.impl.index.series.SeriesSearchQuery; import org.opencastproject.matterhorn.search.SearchResult; import org.opencastproject.matterhorn.search.SearchResultItem; import org.opencastproject.mediapackage.MediaPackageElementFlavor; import org.opencastproject.metadata.dublincore.SeriesCatalogUIAdapter; import org.opencastproject.security.api.Organization; import org.opencastproject.security.api.Role; import org.opencastproject.security.api.SecurityService; import org.opencastproject.security.api.User; import org.opencastproject.series.api.SeriesService; import org.opencastproject.util.NotFoundException; import org.opencastproject.util.PropertiesUtil; import org.opencastproject.util.data.Arrays; import com.entwinemedia.fn.data.Opt; import org.apache.commons.io.IOUtils; import org.easymock.EasyMock; import org.junit.Ignore; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; import javax.ws.rs.Path; @Path("") @Ignore public class TestSeriesEndpoint extends SeriesEndpoint { @SuppressWarnings("unchecked") public TestSeriesEndpoint() throws Exception { // Prepare mocked organization Organization org = createNiceMock(Organization.class); expect(org.getId()).andStubReturn("opencast"); replay(org); Set<Role> roles = new HashSet<>(); Role roleStudent = createNiceMock(Role.class); expect(roleStudent.getName()).andStubReturn("ROLE_STUDENT"); roles.add(roleStudent); Role roleUser = createNiceMock(Role.class); expect(roleUser.getName()).andStubReturn("ROLE_USER_92623987_OPENCAST_ORG"); roles.add(roleUser); // Prepare mocked user User user = createNiceMock(User.class); expect(user.getOrganization()).andStubReturn(org); expect(user.getEmail()).andStubReturn("nowhere@opencast.org"); expect(user.getName()).andStubReturn("Opencast Student"); expect(user.getProvider()).andStubReturn("opencast"); expect(user.getUsername()).andStubReturn("92623987@opencast.org"); expect(user.getRoles()).andStubReturn(roles); replay(user); // Prepare mocked security service SecurityService securityService = createNiceMock(SecurityService.class); expect(securityService.getOrganization()).andStubReturn(org); expect(securityService.getUser()).andStubReturn(user); replay(securityService); Series series1 = new Series("4fd0ef66-aea5-4b7a-a62a-a4ada0eafd6f", "opencast"); series1.setTitle("Via API"); series1.setDescription("A series created over the external API"); series1.setSubject("Topic"); series1.setCreator("Gracie Walsh"); series1.setCreatedDateTime(new Date(1429175556000L)); series1.setOptOut(true); series1.addContributor("Nu'man Farooq Morcos"); series1.addContributor("Alfie Gibbons"); series1.addPublisher("Sophie Chandler"); series1.addOrganizer("Peter Feierabend"); series1.addOrganizer("Florian Naumann"); series1.addOrganizer("Niklas Vogler"); series1.setAccessPolicy(IOUtils.toString(TestSeriesEndpoint.class.getResourceAsStream("/series1-acl.json"))); SearchResultItem<Series> searchResultItem1 = EasyMock.createNiceMock(SearchResultItem.class); expect(searchResultItem1.getSource()).andStubReturn(series1); replay(searchResultItem1); SearchResultItem<Series>[] searchResultItems = Arrays.array(searchResultItem1); SearchResult<Series> searchResult = createNiceMock(SearchResult.class); expect(searchResult.getItems()).andStubReturn(searchResultItems); replay(searchResult); ExternalIndex externalIndex = createMock(ExternalIndex.class); expect(externalIndex.getByQuery(anyObject(SeriesSearchQuery.class))).andStubReturn(searchResult); replay(externalIndex); Map<String, String> series1Props = new HashMap<>(); series1Props.put("live", "false"); series1Props.put("ondemand", "true"); CommonSeriesCatalogUIAdapter commonAdapter = new CommonSeriesCatalogUIAdapter(); Properties seriesCatalogProperties = getCatalogProperties(getClass(), "/series-catalog.properties"); commonAdapter.updated(PropertiesUtil.toDictionary(seriesCatalogProperties)); List<SeriesCatalogUIAdapter> adapters = new LinkedList<>(); adapters.add(commonAdapter); IndexService indexService = createNiceMock(IndexService.class); expect(indexService.getSeries("4fd0ef66-aea5-4b7a-a62a-a4ada0eafd6f", externalIndex)).andStubReturn(some(series1)); expect(indexService.getSeries("unknown-series-id", externalIndex)).andStubReturn(Opt.<Series> none()); expect(indexService.getSeriesCatalogUIAdapters()).andStubReturn(adapters); expect(indexService.getCommonSeriesCatalogUIAdapter()).andStubReturn(commonAdapter); expect(indexService.updateAllSeriesMetadata(EasyMock.anyString(), EasyMock.anyString(), EasyMock.anyObject(ExternalIndex.class))).andStubReturn(new MetadataList()); indexService.removeCatalogByFlavor(series1, MediaPackageElementFlavor.parseFlavor("missing/series")); expectLastCall().andThrow(new NotFoundException("Missing catalog")); indexService.removeCatalogByFlavor(series1, MediaPackageElementFlavor.parseFlavor("othercatalog/series")); expectLastCall(); replay(indexService); SeriesService seriesService = createNiceMock(SeriesService.class); expect(seriesService.getSeriesProperties("4fd0ef66-aea5-4b7a-a62a-a4ada0eafd6f")).andStubReturn(series1Props); replay(seriesService); setExternalIndex(externalIndex); setIndexService(indexService); setSecurityService(securityService); setSeriesService(seriesService); } }