package edu.stanford.sulair.dlss.dor.admin;
import static org.junit.Assert.assertEquals;
import java.io.ByteArrayInputStream;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import org.custommonkey.xmlunit.Diff;
import org.custommonkey.xmlunit.XMLAssert;
import org.junit.Test;
import edu.stanford.sulair.dlss.dor.AbstractXmlMarhallingTest;
public class WorkflowTests extends AbstractXmlMarhallingTest {
@Test
public void setDruidsForAllProcesses(){
Workflow gwf = new Workflow();
Process p = new Process();
p.setName("p1");
gwf.addProcess(p);
p = new Process();
p.setName("p2");
gwf.addProcess(p);
gwf.initilizeProcesses("dor", "dr:123", null);
List<Process> procs = gwf.getProcesses();
for(Process p2: procs){
assertEquals("dr:123", p2.getDruid());
assertEquals("dor", p2.getRepository());
}
}
@Test
public void dumpGwfXml() throws Exception {
JAXBContext jaxbContext = JAXBContext
.newInstance(edu.stanford.sulair.dlss.dor.admin.Workflow.class);
Process p = new Process();
p.setName("download");
p.setStatus("waiting");
Calendar c = Calendar.getInstance();
c.set(2008, 10, 15, 13, 30, 0);
p.setDatetime(c.getTime());
p.setDatastream("GoogleScannedWF");
p.setDruid("dr:123");
p.setId(5);
p.setAttempts(1);
p.setElapsed(1.1);
p.setLifecycle("accessioning-started");
p.setRepository("dor");
Workflow gwf = new Workflow();
gwf.setId("GoogleScannedWF");
gwf.setObjectId("druid:1234");
gwf.setRepository("dor");
gwf.addProcess(p);
p = new Process();
p.setName("conversion");
p.setStatus("done");
p.setDatetime(c.getTime());
p.setDatastream("GoogleScannedWF");
p.setDruid("dr:123");
p.setId(5);
p.setAttempts(1);
p.setElapsed(1.2);
p.setRepository("dor");
gwf.addProcess(p);
String xml = marshall(jaxbContext, gwf);
System.out.println(xml);
String expected = "<workflow id=\"GoogleScannedWF\" objectId=\"druid:1234\" repository=\"dor\"><process name=\"download\" status=\"waiting\" datetime=\"2008-11-15T13:30:00-0800\" attempts=\"1\" lifecycle=\"accessioning-started\" elapsed=\"1.1\"/>" +
"<process name=\"conversion\" status=\"done\" datetime=\"2008-11-15T13:30:00-0800\" attempts=\"1\" elapsed=\"1.2\"/></workflow>";
XMLAssert.assertXMLEqual(expected, xml);
Diff diff = new Diff(xml, expected);
XMLAssert.assertXMLIdentical(diff, true);
}
@Test
public void unMarshallGwfXml() throws JAXBException, Exception {
String xml = "<workflow id=\"GoogleScannedWF\" objectId=\"druid:1234\" repository=\"dor\"><process name=\"download\" status=\"waiting\" datetime=\"2008-11-15T13:30:00-0800\" attempts=\"1\" lifecycle=\"downloaded\" /></workflow>";
JAXBContext jaxbContext = JAXBContext
.newInstance(edu.stanford.sulair.dlss.dor.admin.Workflow.class);
Unmarshaller um = jaxbContext.createUnmarshaller();
ByteArrayInputStream bis = new ByteArrayInputStream(xml.getBytes());
Workflow gwf = (Workflow) um.unmarshal(bis);
Process p = gwf.getProcesses().get(0);
assertEquals("download", p.getName());
assertEquals("waiting", p.getStatus());
//assertEquals("GoogleScannedWF", p.getDatastream());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
Date d = sdf.parse("2008-11-15T13:30:00-0800");
assertEquals(0, d.compareTo(p.getDatetime()));
assertEquals(1, p.getAttempts());
assertEquals("downloaded", p.getLifecycle());
assertEquals("druid:1234", gwf.getObjectId());
assertEquals("dor", gwf.getRepository());
}
}