package edu.stanford.sulair.dlss.dor.service; import static org.junit.Assert.*; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import java.util.ArrayList; import java.util.Date; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests; import edu.stanford.sulair.dlss.dor.admin.Workflow; import edu.stanford.sulair.dlss.dor.admin.Process; import edu.stanford.sulair.dlss.dor.dao.ProcessDao; @ContextConfiguration public class WorkflowServiceTransactionTests extends AbstractTransactionalJUnit4SpringContextTests{ @Autowired WorkflowService workflowService; @Autowired ProcessDao processDao; @Autowired private AnnotationSessionFactoryBean sessionFactory; private static boolean tablesCreated = false; @Before public void createTables() { if(!tablesCreated) { sessionFactory.createDatabaseSchema(); tablesCreated = true; } } @After public void cleanUp() { this.deleteFromTables("workflow"); } @Test public void testUpdateWorkflowStatusThrowsException(){ Process p = new Process("dr:123", "googleworkflow", "pname","done", new Date()); p.setRepository("dor"); try { workflowService.persist(p, "dor"); fail(); }catch(Exception e){ } Process p2 = processDao.findProcess("dor", "dr:123", "googleworkflow", "pname"); assertNull(p2); assertEquals(0,this.countRowsInTable("WORKFLOW")); } @Test public void persistGoogleWorkflowThrowsException(){ //Persist one process //Create google workflow //Attempt to persist workflow, throws exception //Assert first process untouched //Insert 1 process row Process p = new Process(); p.setDruid("dr:1234"); p.setDatastream("GoogleWorkflow"); p.setName("download"); p.setStatus("pending"); p.setRepository("dor"); processDao.persistProcess(p); p = processDao.findProcess("dor", "dr:1234", "GoogleWorkflow", "download" ); assertEquals(1, this.countRowsInTable("WORKFLOW")); //Create googleworkflow Process p2 = new Process(); p2.setDruid("dr:1234"); p2.setDatastream("GoogleWorkflow"); p2.setName("download"); p2.setStatus("done"); p2.setRepository("dor"); Process p3 = new Process(); p3.setDruid("dr:1234"); p3.setDatastream("GoogleWorkflow"); p3.setName("conversion"); p3.setStatus("pending"); p3.setRepository("dor"); ArrayList<Process>procs = new ArrayList<Process>(); procs.add(p2); procs.add(p3); Workflow gwf = new Workflow(); gwf.setProcesses(procs); //Persist googleworkflow try { workflowService.persist(gwf, "dor"); fail(); }catch(Exception e){} //Assert googleworkflow rows added Process p4 = processDao.findProcess("dor", "dr:1234", "GoogleWorkflow", "download"); assertEquals("pending", p4.getStatus()); //Assert existing workflow updated assertEquals(1, this.countRowsInTable("WORKFLOW")); } }