package org.apache.hise;
import java.util.Date;
import java.util.List;
import org.apache.hise.TaskCreationHelper.TaskType;
import org.apache.hise.dao.GenericHumanRole;
import org.apache.hise.dao.HISEDao;
import org.apache.hise.dao.Job;
import org.apache.hise.dao.OrgEntity;
import org.apache.hise.dao.Task;
import org.apache.hise.dao.TaskQuery;
import org.junit.Assert;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.TransactionCallback;
import org.springframework.transaction.support.TransactionTemplate;
@ContextConfiguration(locations = "classpath:/dao.xml")
public class DaoTest extends AbstractJUnit4SpringContextTests {
@Autowired
private HISEDao hiseDao;
@Autowired
private JpaTransactionManager transactionManager;
private TaskCreationHelper taskHelper = new TaskCreationHelper();
private void cleanup() throws Exception {
hiseDao.clearAllRecords(OrgEntity.class);
hiseDao.clearAllRecords(Task.class);
hiseDao.clearAllRecords(Job.class);
}
@Test
public void testDao() throws Exception {
TransactionTemplate tt = new TransactionTemplate(transactionManager);
Long tid = taskHelper.addTaskInTransaction(TaskType.TASK1, tt, hiseDao);
Assert.assertNotNull(tid);
}
@Test
public void testUserTasks() throws Exception {
TransactionTemplate tt = new TransactionTemplate(transactionManager);
taskHelper.addTaskInTransaction(TaskType.TASK1, tt, hiseDao);
tt.execute(new TransactionCallback() {
public Object doInTransaction(TransactionStatus arg0) {
try {
TaskQuery query = new TaskQuery();
query.setUser(TaskCreationHelper.TASK1_OWNER);
List<Task> r = hiseDao.getUserTasks(query);
Assert.assertEquals(TaskCreationHelper.TASK1_DEFINITION_KEY, r.get(0).getTaskDefinitionKey());
return null;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
});
}
@Test
public void testUserTasks2() throws Exception {
TransactionTemplate tt = new TransactionTemplate(transactionManager);
tt.execute(new TransactionCallback() {
public Object doInTransaction(TransactionStatus arg0) {
try{
cleanup();
taskHelper.addTask2(hiseDao);
TaskQuery query = new TaskQuery();
query.setUser(TaskCreationHelper.TASK2_ASSIGNED_USER);
query.setGenericHumanRole(GenericHumanRole.POTENTIALOWNERS);
List<Task> r = hiseDao.getUserTasks(query);
query.getUserGroups().add(TaskCreationHelper.TASK2_ASSIGNED_USER_GROUP);
r = hiseDao.getUserTasks(query);
Assert.assertEquals(TaskCreationHelper.TASK2_DEFINITION_KEY, r.get(0).getTaskDefinitionKey());
return null;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
});
}
@Test
public void testInputs() throws Exception {
TransactionTemplate tt = new TransactionTemplate(transactionManager);
final Long tid = taskHelper.addTaskInTransaction(TaskType.TASK1, tt, hiseDao);
tt.execute(new TransactionCallback() {
public Object doInTransaction(TransactionStatus arg0) {
try {
Task task = hiseDao.find(Task.class, tid);
Assert.assertTrue(task.getInput().get(TaskCreationHelper.TASK1_INPUT_KEY).getMessage().equals(TaskCreationHelper.TASK1_INPUT_VALUE));
} catch (Exception e) {
throw new RuntimeException(e);
}
return null;
}
});
}
@Test
public void testGroupQuery() throws Exception {
TransactionTemplate tt = new TransactionTemplate(transactionManager);
taskHelper.addTaskInTransaction(TaskType.TASK3, tt, hiseDao);
tt.execute(new TransactionCallback() {
public Object doInTransaction(TransactionStatus arg0) {
try {
TaskQuery query = new TaskQuery();
query.setUser(TaskCreationHelper.TASK3_ASSIGNED_USER);
query.getUserGroups().add(TaskCreationHelper.TASK3_ASSIGNED_GROUP);
query.setGenericHumanRole(GenericHumanRole.POTENTIALOWNERS);
List<Task> r = hiseDao.getUserTasks(query);
Assert.assertEquals(TaskCreationHelper.TASK3_DEFINITION_KEY, r.get(0).getTaskDefinitionKey());
} catch (Exception e) {
throw new RuntimeException(e);
}
return null;
}
});
}
@Test
public void testJobs() throws Exception {
TransactionTemplate tt = new TransactionTemplate(transactionManager);
tt.execute(new TransactionCallback() {
public Object doInTransaction(TransactionStatus arg0) {
try {
cleanup();
Job j = new Job();
j.setFire(new Date(1213L));
j.setAction("abc");
hiseDao.persist(j);
List<Job> r = hiseDao.listJobs(new Date(1214L), 12);
Assert.assertEquals("abc", r.get(0).getAction());
} catch (Exception e) {
throw new RuntimeException(e);
}
return null;
}
});
}
@Test
public void testDeadlines() throws Exception {
TransactionTemplate tt = new TransactionTemplate(transactionManager);
final Long tid = (Long) tt.execute(new TransactionCallback() {
public Object doInTransaction(TransactionStatus arg0) {
try {
cleanup();
Task t = hiseDao.find(Task.class, taskHelper.addTask(hiseDao));
{
Job j = new Job();
j.setFire(new Date(1213L));
j.setTask(t);
j.setAction("abc");
hiseDao.persist(j);
t.getDeadlines().add(j);
}
{
Job j = new Job();
j.setFire(new Date(1213L));
j.setTask(t);
j.setAction("abc2");
hiseDao.persist(j);
t.getDeadlines().add(j);
}
return t.getId();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
});
Integer s = (Integer) tt.execute(new TransactionCallback() {
public Object doInTransaction(TransactionStatus arg0) {
try {
Task t = hiseDao.find(Task.class, tid);
return t.getDeadlines().size();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
});
Assert.assertEquals(new Integer(2), s);
}
}