/** * 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.email.template.impl; import org.opencastproject.job.api.Incident; import org.opencastproject.mediapackage.EName; import org.opencastproject.mediapackage.MediaPackage; import org.opencastproject.mediapackage.MediaPackageBuilder; import org.opencastproject.mediapackage.MediaPackageBuilderFactory; import org.opencastproject.metadata.dublincore.DublinCore; import org.opencastproject.metadata.dublincore.DublinCoreCatalog; import org.opencastproject.metadata.dublincore.DublinCores; import org.opencastproject.util.data.Tuple; import org.opencastproject.workflow.api.WorkflowDefinitionImpl; import org.opencastproject.workflow.api.WorkflowInstance; import org.opencastproject.workflow.api.WorkflowInstance.WorkflowState; import org.opencastproject.workflow.api.WorkflowInstanceImpl; import org.opencastproject.workflow.api.WorkflowOperationInstance; import org.opencastproject.workflow.api.WorkflowOperationInstance.OperationState; import org.opencastproject.workflow.api.WorkflowOperationInstanceImpl; import org.easymock.EasyMock; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import java.net.URI; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; public class EmailDataTest { private WorkflowInstance workflowInstance; private MediaPackage mp; private final HashMap<String, HashMap<String, String>> catalogs = new HashMap<String, HashMap<String, String>>(); private WorkflowOperationInstance failedOperation; private Incident incident1; private Incident incident2; private List<Incident> incidents; private URI uriMP; @Before public void setUp() throws Exception { MediaPackageBuilder builder = MediaPackageBuilderFactory.newInstance().newMediaPackageBuilder(); uriMP = EmailDataTest.class.getResource("/email_mediapackage.xml").toURI(); mp = builder.loadFromXml(uriMP.toURL().openStream()); URI episodeURI = EmailDataTest.class.getResource("/episode_dublincore.xml").toURI(); URI seriesURI = EmailDataTest.class.getResource("/series_dublincore.xml").toURI(); DublinCoreCatalog episodeDc = DublinCores.read(episodeURI.toURL().openStream()); catalogs.put("episode", buildCatalogHash(episodeDc)); DublinCoreCatalog seriesDc = DublinCores.read(seriesURI.toURL().openStream()); catalogs.put("series", buildCatalogHash(seriesDc)); WorkflowDefinitionImpl def = new WorkflowDefinitionImpl(); def.setId("wfdef"); Map<String, String> props = new HashMap<String, String>(); props.put("emailAddress", "user@domain.com"); // Create some incidents incident1 = EasyMock.createNiceMock(Incident.class); List<Tuple<String, String>> details = new LinkedList<Tuple<String, String>>(); Tuple<String, String> detail = new Tuple<String, String>("detail-type", "error in operation1"); details.add(detail); EasyMock.expect(incident1.getDetails()).andReturn(details); incident2 = EasyMock.createNiceMock(Incident.class); details = new LinkedList<Tuple<String, String>>(); detail = new Tuple<String, String>("detail-type", "error in operation2"); details.add(detail); EasyMock.expect(incident2.getDetails()).andReturn(details); // Link the incident and the subtree incidents = new LinkedList<Incident>(); incidents.add(incident1); incidents.add(incident2); workflowInstance = new WorkflowInstanceImpl(def, null, null, null, null, props); workflowInstance.setId(1); workflowInstance.setState(WorkflowState.RUNNING); workflowInstance.setMediaPackage(mp); failedOperation = new WorkflowOperationInstanceImpl("operation1", OperationState.FAILED); WorkflowOperationInstanceImpl operation = new WorkflowOperationInstanceImpl("email", OperationState.RUNNING); List<WorkflowOperationInstance> operationList = new ArrayList<WorkflowOperationInstance>(); operationList.add(failedOperation); operationList.add(operation); workflowInstance.setOperations(operationList); EasyMock.replay(incident1, incident2); } private HashMap<String, String> buildCatalogHash(DublinCoreCatalog dc) { HashMap<String, String> catalogHash = new HashMap<String, String>(); for (EName ename : dc.getProperties()) { String name = ename.getLocalName(); catalogHash.put(name, dc.getAsText(ename, DublinCore.LANGUAGE_ANY, EmailTemplateServiceImpl.DEFAULT_DELIMITER_FOR_MULTIPLE)); } return catalogHash; } @Test public void testToMap() throws Exception { EmailData emailData = new EmailData("data1", workflowInstance, catalogs, failedOperation, incidents); Map<String, Object> map = emailData.toMap(); Object catalogs = map.get("catalogs"); Assert.assertNotNull(catalogs); Assert.assertTrue(catalogs instanceof HashMap); Object catalogHash = ((HashMap) catalogs).get("episode"); Assert.assertNotNull(catalogHash); Assert.assertTrue(catalogHash instanceof HashMap); Assert.assertEquals("Test Media Package", ((HashMap) catalogHash).get("title")); catalogHash = ((HashMap) catalogs).get("series"); Assert.assertNotNull(catalogHash); Assert.assertTrue(catalogHash instanceof HashMap); Assert.assertEquals("20140119997", ((HashMap) catalogHash).get("identifier")); Object mp = map.get("mediaPackage"); Assert.assertNotNull(mp); Assert.assertTrue(mp instanceof MediaPackage); Assert.assertEquals("Test Media Package", ((MediaPackage) mp).getTitle()); Object wf = map.get("workflow"); Assert.assertNotNull(wf); Assert.assertTrue(wf instanceof WorkflowInstance); Assert.assertEquals(1, ((WorkflowInstance) wf).getId()); Object wfConf = map.get("workflowConfig"); Assert.assertNotNull(wfConf); Assert.assertTrue(wfConf instanceof Map); Assert.assertEquals("user@domain.com", ((Map) wfConf).get("emailAddress")); Object op = map.get("failedOperation"); Assert.assertNotNull(op); Assert.assertTrue(op instanceof WorkflowOperationInstance); Assert.assertEquals("operation1", ((WorkflowOperationInstance) op).getTemplate()); Object inc = map.get("incident"); Assert.assertNotNull(inc); Assert.assertTrue(inc instanceof List); Assert.assertEquals(2, ((List) inc).size()); Assert.assertTrue(((List) inc).contains(incident1)); Assert.assertTrue(((List) inc).contains(incident2)); } }