/** * 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.publication.youtube; import static org.easymock.EasyMock.anyObject; import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.expectLastCall; import static org.easymock.EasyMock.replay; import org.opencastproject.job.api.JobImpl; import org.opencastproject.mediapackage.MediaPackage; import org.opencastproject.mediapackage.MediaPackageBuilderFactory; import org.opencastproject.publication.youtube.auth.ClientCredentials; import org.opencastproject.security.api.OrganizationDirectoryService; import org.opencastproject.security.api.SecurityService; import org.opencastproject.security.api.UserDirectoryService; import org.opencastproject.serviceregistry.api.HostRegistration; import org.opencastproject.serviceregistry.api.HostRegistrationInMemory; import org.opencastproject.serviceregistry.api.ServiceRegistry; import org.opencastproject.workspace.api.Workspace; import com.google.api.services.youtube.model.Playlist; import com.google.api.services.youtube.model.PlaylistItem; import com.google.api.services.youtube.model.Video; import org.apache.commons.io.FileUtils; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; import java.io.File; import java.io.IOException; import java.util.Dictionary; import java.util.LinkedList; import java.util.List; import java.util.Properties; public class YouTubeV3PublicationServiceImplTest { private YouTubeV3PublicationServiceImpl service; private YouTubeAPIVersion3Service youTubeService; private OrganizationDirectoryService orgDirectory; private SecurityService security; private ServiceRegistry registry; private UserDirectoryService userDirectoryService; private Workspace workspace; @Rule public TemporaryFolder testFolder = new TemporaryFolder(); @Before public void before() throws Exception { youTubeService = createMock(YouTubeAPIVersion3Service.class); youTubeService.initialize(anyObject(ClientCredentials.class)); expectLastCall(); orgDirectory = createMock(OrganizationDirectoryService.class); security = createMock(SecurityService.class); registry = createMock(ServiceRegistry.class); List<HostRegistration> hosts = new LinkedList<HostRegistration>(); HostRegistration host = new HostRegistrationInMemory("localhost", "localhost", 1.0F, 1, 1024L); hosts.add(host); expect(registry.getHostRegistrations()).andReturn(hosts).anyTimes(); userDirectoryService = createMock(UserDirectoryService.class); workspace = createMock(Workspace.class); // service = new YouTubeV3PublicationServiceImpl(youTubeService); service.setOrganizationDirectoryService(orgDirectory); service.setSecurityService(security); service.setServiceRegistry(registry); service.setUserDirectoryService(userDirectoryService); service.setWorkspace(workspace); } @Test public void testPublishNewPlaylist() throws Exception { final File baseDir = new File(this.getClass().getResource("/mediapackage").toURI()); final String xml = FileUtils.readFileToString(new File(baseDir, "manifest.xml")); final MediaPackage mediaPackage = MediaPackageBuilderFactory.newInstance().newMediaPackageBuilder() .loadFromXml(xml); // expect(youTubeService.getMyPlaylistByTitle(mediaPackage.getTitle())).andReturn(null).once(); expect(youTubeService.createPlaylist(mediaPackage.getSeriesTitle(), null, mediaPackage.getSeries())) .andReturn(new Playlist()).once(); expect(youTubeService.addVideoToMyChannel(anyObject(VideoUpload.class))).andReturn(new Video()).once(); expect(youTubeService.addPlaylistItem(anyObject(String.class), anyObject(String.class))) .andReturn(new PlaylistItem()).once(); expect(registry.createJob(anyObject(String.class), anyObject(String.class), anyObject(List.class), anyObject(Float.class))).andReturn(new JobImpl()).once(); replay(youTubeService, orgDirectory, security, registry, userDirectoryService, workspace); service.updated(getServiceProperties()); service.publish(mediaPackage, mediaPackage.getTracks()[0]); } private Dictionary getServiceProperties() throws IOException { final Properties p = new Properties(); YouTubeUtils.put(p, YouTubeKey.credentialDatastore, "credentialDatastore"); YouTubeUtils.put(p, YouTubeKey.scopes, "foo"); final String absolutePath = UnitTestUtils.getMockClientSecretsFile("clientId", testFolder.newFile("client-secrets-youtube-v3.json")).getAbsolutePath(); YouTubeUtils.put(p, YouTubeKey.clientSecretsV3, absolutePath); YouTubeUtils.put(p, YouTubeKey.dataStore, "dataStore"); YouTubeUtils.put(p, YouTubeKey.keywords, "foo"); YouTubeUtils.put(p, YouTubeKey.defaultPlaylist, "foo"); YouTubeUtils.put(p, YouTubeKey.makeVideosPrivate, "true"); // maxFieldLength is optional so we skip return p; } }