Merge pull request #58 from MLengl/TSK-63
TSK-63: Summary-Service/Controller/Test into Task-..
This commit is contained in:
commit
b14dd4c98a
|
@ -1,14 +0,0 @@
|
|||
package pro.taskana;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import pro.taskana.exceptions.WorkbasketNotFoundException;
|
||||
import pro.taskana.model.TaskSummary;
|
||||
|
||||
/**
|
||||
* This interface manages the summaries of some models.
|
||||
*/
|
||||
public interface SummaryService {
|
||||
|
||||
List<TaskSummary> getTaskSummariesByWorkbasketId(String workbasketId) throws WorkbasketNotFoundException;
|
||||
}
|
|
@ -8,6 +8,7 @@ import pro.taskana.model.DueWorkbasketCounter;
|
|||
import pro.taskana.model.Task;
|
||||
import pro.taskana.model.TaskState;
|
||||
import pro.taskana.model.TaskStateCounter;
|
||||
import pro.taskana.model.TaskSummary;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
@ -110,4 +111,12 @@ public interface TaskService {
|
|||
* @throws Exception if no result can be found by @{link TaskMapper}.
|
||||
*/
|
||||
List<Task> getTasksByWorkbasketIdAndState(String workbasketId, TaskState taskState) throws WorkbasketNotFoundException, NotAuthorizedException, Exception;
|
||||
|
||||
/**
|
||||
* Getting a short summary of all tasks in a specific workbasket.
|
||||
* @param workbasketId ID of workbasket where tasks are located.
|
||||
* @return TaskSummaryList with all TaskSummaries of a workbasket
|
||||
* @throws WorkbasketNotFoundException if a Workbasket can´t be located.
|
||||
*/
|
||||
List<TaskSummary> getTaskSummariesByWorkbasketId(String workbasketId) throws WorkbasketNotFoundException;
|
||||
}
|
||||
|
|
|
@ -25,13 +25,6 @@ public interface TaskanaEngine {
|
|||
*/
|
||||
ClassificationService getClassificationService();
|
||||
|
||||
/**
|
||||
* Can be used for each operation for summaries with short-infos about
|
||||
* one or more objects.
|
||||
* @return a SummaryService-BEAN
|
||||
*/
|
||||
SummaryService getSummaryService();
|
||||
|
||||
/**
|
||||
* The Taskana configuration.
|
||||
* @return the TaskanaConfiguration
|
||||
|
|
|
@ -1,54 +0,0 @@
|
|||
package pro.taskana.impl;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import pro.taskana.SummaryService;
|
||||
import pro.taskana.TaskanaEngine;
|
||||
import pro.taskana.exceptions.WorkbasketNotFoundException;
|
||||
import pro.taskana.impl.util.LoggerUtils;
|
||||
import pro.taskana.model.TaskSummary;
|
||||
import pro.taskana.model.mappings.SummaryMapper;
|
||||
|
||||
/**
|
||||
* @author mle
|
||||
* Organization of Table-Summaries with less informations.
|
||||
*/
|
||||
public class SummaryServiceImpl implements SummaryService {
|
||||
|
||||
public static final Logger LOGGER = LoggerFactory.getLogger(SummaryServiceImpl.class);
|
||||
private SummaryMapper summaryMapper;
|
||||
private TaskanaEngineImpl taskanaEngineImpl;
|
||||
|
||||
public SummaryServiceImpl(TaskanaEngine taskanaEngine, SummaryMapper summaryMapper) {
|
||||
this.summaryMapper = summaryMapper;
|
||||
this.taskanaEngineImpl = (TaskanaEngineImpl) taskanaEngine;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TaskSummary> getTaskSummariesByWorkbasketId(String workbasketId) throws WorkbasketNotFoundException {
|
||||
LOGGER.debug("entry to getTaskSummariesByWorkbasketId(workbasketId = {}", workbasketId);
|
||||
List<TaskSummary> taskSummaries = new ArrayList<>();
|
||||
taskanaEngineImpl.getWorkbasketService().getWorkbasket(workbasketId);
|
||||
try {
|
||||
taskanaEngineImpl.openConnection();
|
||||
taskSummaries = summaryMapper.findTasksummariesByWorkbasketId(workbasketId);
|
||||
} catch (Exception ex) {
|
||||
LOGGER.error("Getting TASKSUMMARY failed internally.", ex);
|
||||
} finally {
|
||||
if (taskSummaries == null) {
|
||||
taskSummaries = new ArrayList<>();
|
||||
}
|
||||
taskanaEngineImpl.returnConnection();
|
||||
if (LOGGER.isDebugEnabled()) {
|
||||
int numberOfResultObjects = taskSummaries.size();
|
||||
LOGGER.debug("exit from getTaskSummariesByWorkbasketId(workbasketId). Returning {} resulting Objects: {} ",
|
||||
numberOfResultObjects, LoggerUtils.listToString(taskSummaries));
|
||||
}
|
||||
}
|
||||
return taskSummaries;
|
||||
}
|
||||
}
|
|
@ -26,6 +26,7 @@ import pro.taskana.model.ObjectReference;
|
|||
import pro.taskana.model.Task;
|
||||
import pro.taskana.model.TaskState;
|
||||
import pro.taskana.model.TaskStateCounter;
|
||||
import pro.taskana.model.TaskSummary;
|
||||
import pro.taskana.model.WorkbasketAuthorization;
|
||||
import pro.taskana.model.mappings.ObjectReferenceMapper;
|
||||
import pro.taskana.model.mappings.TaskMapper;
|
||||
|
@ -344,4 +345,28 @@ public class TaskServiceImpl implements TaskService {
|
|||
task.setPrimaryObjRef(objectReference);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<TaskSummary> getTaskSummariesByWorkbasketId(String workbasketId) throws WorkbasketNotFoundException {
|
||||
LOGGER.debug("entry to getTaskSummariesByWorkbasketId(workbasketId = {}", workbasketId);
|
||||
List<TaskSummary> taskSummaries = new ArrayList<>();
|
||||
taskanaEngineImpl.getWorkbasketService().getWorkbasket(workbasketId);
|
||||
try {
|
||||
taskanaEngineImpl.openConnection();
|
||||
taskSummaries = taskMapper.findTaskSummariesByWorkbasketId(workbasketId);
|
||||
} catch (Exception ex) {
|
||||
LOGGER.error("Getting TASKSUMMARY failed internally.", ex);
|
||||
} finally {
|
||||
if (taskSummaries == null) {
|
||||
taskSummaries = new ArrayList<>();
|
||||
}
|
||||
taskanaEngineImpl.returnConnection();
|
||||
if (LOGGER.isDebugEnabled()) {
|
||||
int numberOfResultObjects = taskSummaries.size();
|
||||
LOGGER.debug("exit from getTaskSummariesByWorkbasketId(workbasketId). Returning {} resulting Objects: {} ",
|
||||
numberOfResultObjects, LoggerUtils.listToString(taskSummaries));
|
||||
}
|
||||
}
|
||||
return taskSummaries;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,7 +15,6 @@ import org.slf4j.Logger;
|
|||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import pro.taskana.ClassificationService;
|
||||
import pro.taskana.SummaryService;
|
||||
import pro.taskana.TaskService;
|
||||
import pro.taskana.TaskanaEngine;
|
||||
import pro.taskana.WorkbasketService;
|
||||
|
@ -27,7 +26,6 @@ import pro.taskana.model.mappings.ClassificationMapper;
|
|||
import pro.taskana.model.mappings.DistributionTargetMapper;
|
||||
import pro.taskana.model.mappings.ObjectReferenceMapper;
|
||||
import pro.taskana.model.mappings.QueryMapper;
|
||||
import pro.taskana.model.mappings.SummaryMapper;
|
||||
import pro.taskana.model.mappings.TaskMapper;
|
||||
import pro.taskana.model.mappings.WorkbasketAccessMapper;
|
||||
import pro.taskana.model.mappings.WorkbasketMapper;
|
||||
|
@ -70,13 +68,6 @@ public class TaskanaEngineImpl implements TaskanaEngine {
|
|||
return workbasketServiceImpl;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SummaryService getSummaryService() {
|
||||
SqlSession session = this.sessionManager;
|
||||
SummaryServiceImpl summaryServiceImpl = new SummaryServiceImpl(this, session.getMapper(SummaryMapper.class));
|
||||
return summaryServiceImpl;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ClassificationService getClassificationService() {
|
||||
SqlSession session = this.sessionManager;
|
||||
|
@ -225,7 +216,6 @@ public class TaskanaEngineImpl implements TaskanaEngine {
|
|||
configuration.addMapper(WorkbasketAccessMapper.class);
|
||||
configuration.addMapper(ObjectReferenceMapper.class);
|
||||
configuration.addMapper(QueryMapper.class);
|
||||
configuration.addMapper(SummaryMapper.class);
|
||||
configuration.getTypeHandlerRegistry().register(MapTypeHandler.class);
|
||||
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(configuration);
|
||||
SqlSessionManager sessionManager = SqlSessionManager.newInstance(sessionFactory);
|
||||
|
|
|
@ -1,32 +0,0 @@
|
|||
package pro.taskana.model.mappings;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.apache.ibatis.annotations.Result;
|
||||
import org.apache.ibatis.annotations.Results;
|
||||
import org.apache.ibatis.annotations.Select;
|
||||
|
||||
import pro.taskana.model.TaskSummary;
|
||||
|
||||
/**
|
||||
* This interface is the myBatis mapping of short summaries.
|
||||
*/
|
||||
public interface SummaryMapper {
|
||||
|
||||
@Select("SELECT TASK.ID AS taskId, TASK.NAME AS taskName, TASK.WORKBASKETID AS workId, TASK.CLASSIFICATION_ID AS classificationId, "
|
||||
+ "WORKBASKET.NAME AS workName, CLASSIFICATION.NAME AS classificationName "
|
||||
+ "FROM TASK "
|
||||
+ "LEFT JOIN WORKBASKET ON WORKBASKET.ID = TASK.WORKBASKETID "
|
||||
+ "LEFT JOIN CLASSIFICATION ON CLASSIFICATION.ID = TASK.CLASSIFICATION_ID "
|
||||
+ "WHERE TASK.WORKBASKETID = #{workbasketId}")
|
||||
@Results({
|
||||
@Result(property = "taskId", column = "taskId"),
|
||||
@Result(property = "taskName", column = "taskName"),
|
||||
@Result(property = "workbasketId", column = "workId"),
|
||||
@Result(property = "workbasketName", column = "workName"),
|
||||
@Result(property = "classificationId", column = "classificationId"),
|
||||
@Result(property = "classificationName", column = "classificationName")
|
||||
})
|
||||
List<TaskSummary> findTasksummariesByWorkbasketId(@Param("workbasketId") String workbasketId);
|
||||
}
|
|
@ -133,4 +133,20 @@ public interface TaskMapper {
|
|||
@Result(property = "custom10", column = "CUSTOM_10")
|
||||
})
|
||||
List<Task> findTasksByWorkbasketIdAndState(@Param("workbasketId") String workbasketId, @Param("taskState") TaskState taskState);
|
||||
|
||||
@Select("SELECT TASK.ID AS taskId, TASK.NAME AS taskName, TASK.WORKBASKETID AS workId, TASK.CLASSIFICATION_ID AS classificationId, "
|
||||
+ "WORKBASKET.NAME AS workName, CLASSIFICATION.NAME AS classificationName "
|
||||
+ "FROM TASK "
|
||||
+ "LEFT JOIN WORKBASKET ON WORKBASKET.ID = TASK.WORKBASKETID "
|
||||
+ "LEFT JOIN CLASSIFICATION ON CLASSIFICATION.ID = TASK.CLASSIFICATION_ID "
|
||||
+ "WHERE TASK.WORKBASKETID = #{workbasketId}")
|
||||
@Results({
|
||||
@Result(property = "taskId", column = "taskId"),
|
||||
@Result(property = "taskName", column = "taskName"),
|
||||
@Result(property = "workbasketId", column = "workId"),
|
||||
@Result(property = "workbasketName", column = "workName"),
|
||||
@Result(property = "classificationId", column = "classificationId"),
|
||||
@Result(property = "classificationName", column = "classificationName")
|
||||
})
|
||||
List<TaskSummary> findTaskSummariesByWorkbasketId(@Param("workbasketId") String workbasketId);
|
||||
}
|
||||
|
|
|
@ -1,115 +0,0 @@
|
|||
package pro.taskana.impl;
|
||||
|
||||
import org.apache.ibatis.session.SqlSession;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.MockitoJUnitRunner;
|
||||
import pro.taskana.exceptions.WorkbasketNotFoundException;
|
||||
import pro.taskana.model.TaskSummary;
|
||||
import pro.taskana.model.Workbasket;
|
||||
import pro.taskana.model.mappings.SummaryMapper;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.equalTo;
|
||||
import static org.junit.Assert.assertThat;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
/**
|
||||
* Testing the {@link SummaryServiceImpl} component.
|
||||
* Mocks are initialized before each Method by @Runner-Annotation.
|
||||
*/
|
||||
@RunWith(MockitoJUnitRunner.class)
|
||||
public class SummaryServiceImplTest {
|
||||
|
||||
@InjectMocks
|
||||
private SummaryServiceImpl cut;
|
||||
|
||||
@Mock
|
||||
private SummaryMapper summaryMapperMock;
|
||||
|
||||
@Mock
|
||||
private TaskanaEngineImpl taskanaEngineImplMock;
|
||||
|
||||
@Mock
|
||||
private SqlSession sqlSessionMock;
|
||||
|
||||
@Mock
|
||||
private WorkbasketServiceImpl workbasketServiceMock;
|
||||
|
||||
@Test
|
||||
public void testGetTaskSummariesByWorkbasketIdWithInternalException() throws WorkbasketNotFoundException {
|
||||
// given - set behaviour and expected result
|
||||
String workbasketId = "1";
|
||||
List<TaskSummary> expectedResultList = new ArrayList<>();
|
||||
doNothing().when(taskanaEngineImplMock).openConnection();
|
||||
doThrow(new IllegalArgumentException("Invalid ID: " + workbasketId)).when(summaryMapperMock).findTasksummariesByWorkbasketId(workbasketId);
|
||||
doNothing().when(taskanaEngineImplMock).returnConnection();
|
||||
doReturn(workbasketServiceMock).when(taskanaEngineImplMock).getWorkbasketService();
|
||||
doReturn(new Workbasket()).when(workbasketServiceMock).getWorkbasket(any());
|
||||
|
||||
// when - make the call
|
||||
List<TaskSummary> actualResultList = cut.getTaskSummariesByWorkbasketId(workbasketId);
|
||||
|
||||
// then - verify external communications and assert result
|
||||
verify(taskanaEngineImplMock, times(1)).openConnection();
|
||||
verify(summaryMapperMock, times(1)).findTasksummariesByWorkbasketId(workbasketId);
|
||||
verify(taskanaEngineImplMock, times(1)).returnConnection();
|
||||
verify(taskanaEngineImplMock, times(1)).getWorkbasketService();
|
||||
verify(workbasketServiceMock, times(1)).getWorkbasket(any());
|
||||
|
||||
verifyNoMoreInteractions(summaryMapperMock, taskanaEngineImplMock, sqlSessionMock,
|
||||
workbasketServiceMock);
|
||||
assertThat(actualResultList, equalTo(expectedResultList));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetTaskSummariesByWorkbasketIdGettingResults() throws WorkbasketNotFoundException {
|
||||
String workbasketId = "1";
|
||||
List<TaskSummary> expectedResultList = Arrays.asList(new TaskSummary(), new TaskSummary());
|
||||
doNothing().when(taskanaEngineImplMock).openConnection();
|
||||
doNothing().when(taskanaEngineImplMock).returnConnection();
|
||||
doReturn(workbasketServiceMock).when(taskanaEngineImplMock).getWorkbasketService();
|
||||
doReturn(new Workbasket()).when(workbasketServiceMock).getWorkbasket(any());
|
||||
doReturn(expectedResultList).when(summaryMapperMock).findTasksummariesByWorkbasketId(workbasketId);
|
||||
|
||||
List<TaskSummary> actualResultList = cut.getTaskSummariesByWorkbasketId(workbasketId);
|
||||
|
||||
verify(taskanaEngineImplMock, times(1)).getWorkbasketService();
|
||||
verify(workbasketServiceMock, times(1)).getWorkbasket(any());
|
||||
verify(taskanaEngineImplMock, times(1)).openConnection();
|
||||
verify(summaryMapperMock, times(1)).findTasksummariesByWorkbasketId(workbasketId);
|
||||
verify(taskanaEngineImplMock, times(1)).returnConnection();
|
||||
verifyNoMoreInteractions(summaryMapperMock, taskanaEngineImplMock, sqlSessionMock, workbasketServiceMock);
|
||||
assertThat(actualResultList, equalTo(expectedResultList));
|
||||
assertThat(actualResultList.size(), equalTo(expectedResultList.size()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetTaskSummariesByWorkbasketIdGettingNull() throws WorkbasketNotFoundException {
|
||||
String workbasketId = "1";
|
||||
List<TaskSummary> expectedResultList = new ArrayList<>();
|
||||
doNothing().when(taskanaEngineImplMock).openConnection();
|
||||
doNothing().when(taskanaEngineImplMock).returnConnection();
|
||||
doReturn(null).when(summaryMapperMock).findTasksummariesByWorkbasketId(workbasketId);
|
||||
doReturn(workbasketServiceMock).when(taskanaEngineImplMock).getWorkbasketService();
|
||||
doReturn(new Workbasket()).when(workbasketServiceMock).getWorkbasket(any());
|
||||
|
||||
List<TaskSummary> actualResultList = cut.getTaskSummariesByWorkbasketId(workbasketId);
|
||||
|
||||
verify(taskanaEngineImplMock, times(1)).openConnection();
|
||||
verify(summaryMapperMock, times(1)).findTasksummariesByWorkbasketId(workbasketId);
|
||||
verify(taskanaEngineImplMock, times(1)).returnConnection();
|
||||
verify(taskanaEngineImplMock, times(1)).getWorkbasketService();
|
||||
verify(workbasketServiceMock, times(1)).getWorkbasket(any());
|
||||
verifyNoMoreInteractions(summaryMapperMock, taskanaEngineImplMock, sqlSessionMock,
|
||||
workbasketServiceMock);
|
||||
|
||||
assertThat(actualResultList, equalTo(expectedResultList));
|
||||
assertThat(actualResultList.size(), equalTo(expectedResultList.size()));
|
||||
}
|
||||
}
|
|
@ -44,6 +44,7 @@ import pro.taskana.model.ObjectReference;
|
|||
import pro.taskana.model.Task;
|
||||
import pro.taskana.model.TaskState;
|
||||
import pro.taskana.model.TaskStateCounter;
|
||||
import pro.taskana.model.TaskSummary;
|
||||
import pro.taskana.model.Workbasket;
|
||||
import pro.taskana.model.WorkbasketAuthorization;
|
||||
import pro.taskana.model.mappings.ObjectReferenceMapper;
|
||||
|
@ -672,6 +673,76 @@ public class TaskServiceImplTest {
|
|||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetTaskSummariesByWorkbasketIdWithInternalException() throws WorkbasketNotFoundException {
|
||||
// given - set behaviour and expected result
|
||||
String workbasketId = "1";
|
||||
List<TaskSummary> expectedResultList = new ArrayList<>();
|
||||
doNothing().when(taskanaEngineImpl).openConnection();
|
||||
doThrow(new IllegalArgumentException("Invalid ID: " + workbasketId)).when(taskMapperMock).findTaskSummariesByWorkbasketId(workbasketId);
|
||||
doNothing().when(taskanaEngineImpl).returnConnection();
|
||||
doReturn(workbasketServiceMock).when(taskanaEngineImpl).getWorkbasketService();
|
||||
doReturn(new Workbasket()).when(workbasketServiceMock).getWorkbasket(any());
|
||||
|
||||
// when - make the call
|
||||
List<TaskSummary> actualResultList = cut.getTaskSummariesByWorkbasketId(workbasketId);
|
||||
|
||||
// then - verify external communications and assert result
|
||||
verify(taskanaEngineImpl, times(1)).openConnection();
|
||||
verify(taskMapperMock, times(1)).findTaskSummariesByWorkbasketId(workbasketId);
|
||||
verify(taskanaEngineImpl, times(1)).returnConnection();
|
||||
verify(taskanaEngineImpl, times(1)).getWorkbasketService();
|
||||
verify(workbasketServiceMock, times(1)).getWorkbasket(any());
|
||||
|
||||
verifyNoMoreInteractions(taskMapperMock, taskanaEngineImpl, workbasketServiceMock);
|
||||
assertThat(actualResultList, equalTo(expectedResultList));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetTaskSummariesByWorkbasketIdGettingResults() throws WorkbasketNotFoundException {
|
||||
String workbasketId = "1";
|
||||
List<TaskSummary> expectedResultList = Arrays.asList(new TaskSummary(), new TaskSummary());
|
||||
doNothing().when(taskanaEngineImpl).openConnection();
|
||||
doNothing().when(taskanaEngineImpl).returnConnection();
|
||||
doReturn(workbasketServiceMock).when(taskanaEngineImpl).getWorkbasketService();
|
||||
doReturn(new Workbasket()).when(workbasketServiceMock).getWorkbasket(any());
|
||||
doReturn(expectedResultList).when(taskMapperMock).findTaskSummariesByWorkbasketId(workbasketId);
|
||||
|
||||
List<TaskSummary> actualResultList = cut.getTaskSummariesByWorkbasketId(workbasketId);
|
||||
|
||||
verify(taskanaEngineImpl, times(1)).getWorkbasketService();
|
||||
verify(workbasketServiceMock, times(1)).getWorkbasket(any());
|
||||
verify(taskanaEngineImpl, times(1)).openConnection();
|
||||
verify(taskMapperMock, times(1)).findTaskSummariesByWorkbasketId(workbasketId);
|
||||
verify(taskanaEngineImpl, times(1)).returnConnection();
|
||||
verifyNoMoreInteractions(taskMapperMock, taskanaEngineImpl, workbasketServiceMock);
|
||||
assertThat(actualResultList, equalTo(expectedResultList));
|
||||
assertThat(actualResultList.size(), equalTo(expectedResultList.size()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetTaskSummariesByWorkbasketIdGettingNull() throws WorkbasketNotFoundException {
|
||||
String workbasketId = "1";
|
||||
List<TaskSummary> expectedResultList = new ArrayList<>();
|
||||
doNothing().when(taskanaEngineImpl).openConnection();
|
||||
doNothing().when(taskanaEngineImpl).returnConnection();
|
||||
doReturn(null).when(taskMapperMock).findTaskSummariesByWorkbasketId(workbasketId);
|
||||
doReturn(workbasketServiceMock).when(taskanaEngineImpl).getWorkbasketService();
|
||||
doReturn(new Workbasket()).when(workbasketServiceMock).getWorkbasket(any());
|
||||
|
||||
List<TaskSummary> actualResultList = cut.getTaskSummariesByWorkbasketId(workbasketId);
|
||||
|
||||
verify(taskanaEngineImpl, times(1)).openConnection();
|
||||
verify(taskMapperMock, times(1)).findTaskSummariesByWorkbasketId(workbasketId);
|
||||
verify(taskanaEngineImpl, times(1)).returnConnection();
|
||||
verify(taskanaEngineImpl, times(1)).getWorkbasketService();
|
||||
verify(workbasketServiceMock, times(1)).getWorkbasket(any());
|
||||
verifyNoMoreInteractions(taskMapperMock, taskanaEngineImpl, workbasketServiceMock);
|
||||
|
||||
assertThat(actualResultList, equalTo(expectedResultList));
|
||||
assertThat(actualResultList.size(), equalTo(expectedResultList.size()));
|
||||
}
|
||||
|
||||
private Task createUnitTestTask(String id, String name, String workbasketId) throws ClassificationAlreadyExistException {
|
||||
Task task = new Task();
|
||||
task.setId(id);
|
||||
|
|
|
@ -1,136 +0,0 @@
|
|||
package pro.taskana.impl.integration;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.equalTo;
|
||||
import static org.junit.Assert.assertThat;
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.security.auth.login.LoginException;
|
||||
import javax.sql.DataSource;
|
||||
|
||||
import org.h2.store.fs.FileUtils;
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.Before;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
|
||||
import pro.taskana.Classification;
|
||||
import pro.taskana.TaskanaEngine;
|
||||
import pro.taskana.TaskanaEngine.ConnectionManagementMode;
|
||||
import pro.taskana.configuration.TaskanaEngineConfiguration;
|
||||
import pro.taskana.exceptions.WorkbasketNotFoundException;
|
||||
import pro.taskana.impl.ClassificationServiceImpl;
|
||||
import pro.taskana.impl.SummaryServiceImpl;
|
||||
import pro.taskana.impl.TaskServiceImpl;
|
||||
import pro.taskana.impl.TaskanaEngineImpl;
|
||||
import pro.taskana.impl.WorkbasketServiceImpl;
|
||||
import pro.taskana.impl.configuration.DBCleaner;
|
||||
import pro.taskana.impl.configuration.TaskanaEngineConfigurationTest;
|
||||
import pro.taskana.model.ClassificationImpl;
|
||||
import pro.taskana.model.Task;
|
||||
import pro.taskana.model.TaskSummary;
|
||||
import pro.taskana.model.Workbasket;
|
||||
|
||||
/**
|
||||
* Testing {@link SummaryServiceImpl} with real DB-Connection and
|
||||
* real results.
|
||||
*/
|
||||
public class SummaryServiceImplIntAutoCommitTest {
|
||||
|
||||
private DataSource dataSource;
|
||||
private TaskanaEngineConfiguration taskanaEngineConfiguration;
|
||||
private TaskanaEngine taskanaEngine;
|
||||
private TaskanaEngineImpl taskanaEngineImpl;
|
||||
private WorkbasketServiceImpl workbasketServiceImpl;
|
||||
private TaskServiceImpl taskServiceImpl;
|
||||
private ClassificationServiceImpl classificationServiceImpl;
|
||||
private SummaryServiceImpl summaryServiceImp;
|
||||
private Task dummyTask;
|
||||
private Classification dummyClassification;
|
||||
private Workbasket dummyWorkbasket;
|
||||
|
||||
@BeforeClass
|
||||
public static void resetDb() throws SQLException {
|
||||
DataSource ds = TaskanaEngineConfigurationTest.getDataSource();
|
||||
DBCleaner cleaner = new DBCleaner();
|
||||
cleaner.clearDb(ds, true);
|
||||
}
|
||||
|
||||
@Before
|
||||
public void setup() throws FileNotFoundException, SQLException, LoginException {
|
||||
dataSource = TaskanaEngineConfigurationTest.getDataSource();
|
||||
taskanaEngineConfiguration = new TaskanaEngineConfiguration(dataSource, false, false);
|
||||
taskanaEngine = taskanaEngineConfiguration.buildTaskanaEngine();
|
||||
taskanaEngineImpl = (TaskanaEngineImpl) taskanaEngine;
|
||||
taskanaEngineImpl.setConnectionManagementMode(ConnectionManagementMode.AUTOCOMMIT);
|
||||
|
||||
workbasketServiceImpl = (WorkbasketServiceImpl) taskanaEngine.getWorkbasketService();
|
||||
taskServiceImpl = (TaskServiceImpl) taskanaEngine.getTaskService();
|
||||
classificationServiceImpl = (ClassificationServiceImpl) taskanaEngine.getClassificationService();
|
||||
summaryServiceImp = (SummaryServiceImpl) taskanaEngine.getSummaryService();
|
||||
|
||||
DBCleaner cleaner = new DBCleaner();
|
||||
cleaner.clearDb(dataSource, false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnTaskSummaryListWithValues() throws Exception {
|
||||
|
||||
generateDummyData();
|
||||
|
||||
List<TaskSummary> expectedTaskSumamries = new ArrayList<>();
|
||||
TaskSummary taskSummary = new TaskSummary();
|
||||
taskSummary.setTaskId(dummyTask.getId());
|
||||
taskSummary.setTaskName(dummyTask.getName());
|
||||
taskSummary.setWorkbasketId(dummyWorkbasket.getId());
|
||||
taskSummary.setWorkbasketName(dummyWorkbasket.getName());
|
||||
taskSummary.setClassificationId(dummyClassification.getId());
|
||||
taskSummary.setClassificationName(dummyClassification.getName());
|
||||
expectedTaskSumamries.add(taskSummary);
|
||||
|
||||
List<TaskSummary> actualTaskSumamryResult = summaryServiceImp.getTaskSummariesByWorkbasketId(dummyWorkbasket.getId());
|
||||
|
||||
assertThat(actualTaskSumamryResult.size(), equalTo(expectedTaskSumamries.size()));
|
||||
}
|
||||
|
||||
@Test(expected = WorkbasketNotFoundException.class)
|
||||
public void shouldThrowWorkbasketNotFoundExceptionByNullParameter() throws WorkbasketNotFoundException {
|
||||
summaryServiceImp.getTaskSummariesByWorkbasketId(null);
|
||||
}
|
||||
|
||||
@Test(expected = WorkbasketNotFoundException.class)
|
||||
public void shouldThrowWorkbasketNotFoundExceptionByInvalidWorkbasketParameter() throws WorkbasketNotFoundException {
|
||||
Workbasket wb = new Workbasket();
|
||||
wb.setName("wb");
|
||||
workbasketServiceImpl.createWorkbasket(wb);
|
||||
summaryServiceImp.getTaskSummariesByWorkbasketId("1");
|
||||
}
|
||||
|
||||
|
||||
private void generateDummyData() throws Exception {
|
||||
dummyWorkbasket = new Workbasket();
|
||||
dummyWorkbasket.setId("1");
|
||||
dummyWorkbasket.setName("Dummy-Basket");
|
||||
dummyWorkbasket = workbasketServiceImpl.createWorkbasket(dummyWorkbasket);
|
||||
|
||||
dummyClassification = new ClassificationImpl();
|
||||
dummyClassification.setId("1");
|
||||
dummyClassification.setName("Dummy-Classification");
|
||||
classificationServiceImpl.createClassification(dummyClassification);
|
||||
|
||||
dummyTask = new Task();
|
||||
dummyTask.setId("1");
|
||||
dummyTask.setName("Dummy-Task");
|
||||
dummyTask.setClassification(dummyClassification);
|
||||
dummyTask.setWorkbasketId(dummyWorkbasket.getId());
|
||||
dummyTask = taskServiceImpl.createTask(dummyTask);
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public static void cleanUpClass() {
|
||||
FileUtils.deleteRecursive("~/data", true);
|
||||
}
|
||||
}
|
|
@ -1,7 +1,11 @@
|
|||
package pro.taskana.impl.integration;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.equalTo;
|
||||
import static org.junit.Assert.assertThat;
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.security.auth.login.LoginException;
|
||||
|
@ -20,6 +24,7 @@ import pro.taskana.ClassificationService;
|
|||
import pro.taskana.ObjectReferenceQuery;
|
||||
import pro.taskana.TaskanaEngine;
|
||||
import pro.taskana.TaskanaEngine.ConnectionManagementMode;
|
||||
import pro.taskana.WorkbasketService;
|
||||
import pro.taskana.configuration.TaskanaEngineConfiguration;
|
||||
import pro.taskana.exceptions.ClassificationAlreadyExistException;
|
||||
import pro.taskana.exceptions.ClassificationNotFoundException;
|
||||
|
@ -34,6 +39,7 @@ import pro.taskana.impl.configuration.DBCleaner;
|
|||
import pro.taskana.impl.configuration.TaskanaEngineConfigurationTest;
|
||||
import pro.taskana.model.Task;
|
||||
import pro.taskana.model.TaskState;
|
||||
import pro.taskana.model.TaskSummary;
|
||||
import pro.taskana.model.Workbasket;
|
||||
|
||||
/**
|
||||
|
@ -48,6 +54,7 @@ public class TaskServiceImplIntAutocommitTest {
|
|||
private TaskanaEngine taskanaEngine;
|
||||
private TaskanaEngineImpl taskanaEngineImpl;
|
||||
private ClassificationService classificationService;
|
||||
private WorkbasketService workbasketService;
|
||||
|
||||
@BeforeClass
|
||||
public static void resetDb() throws SQLException {
|
||||
|
@ -66,6 +73,7 @@ public class TaskServiceImplIntAutocommitTest {
|
|||
taskanaEngineImpl.setConnectionManagementMode(ConnectionManagementMode.AUTOCOMMIT);
|
||||
taskServiceImpl = (TaskServiceImpl) taskanaEngine.getTaskService();
|
||||
classificationService = taskanaEngine.getClassificationService();
|
||||
workbasketService = taskanaEngine.getWorkbasketService();
|
||||
DBCleaner cleaner = new DBCleaner();
|
||||
cleaner.clearDb(dataSource, false);
|
||||
}
|
||||
|
@ -164,6 +172,54 @@ public class TaskServiceImplIntAutocommitTest {
|
|||
Assert.assertEquals(0, results.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldReturnTaskSummaryListWithValues() throws Exception {
|
||||
|
||||
Workbasket dummyWorkbasket = new Workbasket();
|
||||
dummyWorkbasket.setId("1");
|
||||
dummyWorkbasket.setName("Dummy-Basket");
|
||||
dummyWorkbasket = workbasketService.createWorkbasket(dummyWorkbasket);
|
||||
|
||||
Classification dummyClassification = classificationService.newClassification();
|
||||
dummyClassification.setId("1");
|
||||
dummyClassification.setName("Dummy-Classification");
|
||||
classificationService.createClassification(dummyClassification);
|
||||
|
||||
Task dummyTask = new Task();
|
||||
dummyTask.setId("1");
|
||||
dummyTask.setName("Dummy-Task");
|
||||
dummyTask.setClassification(dummyClassification);
|
||||
dummyTask.setWorkbasketId(dummyWorkbasket.getId());
|
||||
dummyTask = taskServiceImpl.createTask(dummyTask);
|
||||
|
||||
List<TaskSummary> expectedTaskSumamries = new ArrayList<>();
|
||||
TaskSummary taskSummary = new TaskSummary();
|
||||
taskSummary.setTaskId(dummyTask.getId());
|
||||
taskSummary.setTaskName(dummyTask.getName());
|
||||
taskSummary.setWorkbasketId(dummyWorkbasket.getId());
|
||||
taskSummary.setWorkbasketName(dummyWorkbasket.getName());
|
||||
taskSummary.setClassificationId(dummyClassification.getId());
|
||||
taskSummary.setClassificationName(dummyClassification.getName());
|
||||
expectedTaskSumamries.add(taskSummary);
|
||||
|
||||
List<TaskSummary> actualTaskSumamryResult = taskServiceImpl.getTaskSummariesByWorkbasketId(dummyWorkbasket.getId());
|
||||
|
||||
assertThat(actualTaskSumamryResult.size(), equalTo(expectedTaskSumamries.size()));
|
||||
}
|
||||
|
||||
@Test(expected = WorkbasketNotFoundException.class)
|
||||
public void shouldThrowWorkbasketNotFoundExceptionByNullParameter() throws WorkbasketNotFoundException {
|
||||
taskServiceImpl.getTaskSummariesByWorkbasketId(null);
|
||||
}
|
||||
|
||||
@Test(expected = WorkbasketNotFoundException.class)
|
||||
public void shouldThrowWorkbasketNotFoundExceptionByInvalidWorkbasketParameter() throws WorkbasketNotFoundException {
|
||||
Workbasket wb = new Workbasket();
|
||||
wb.setName("wb");
|
||||
workbasketService.createWorkbasket(wb);
|
||||
taskServiceImpl.getTaskSummariesByWorkbasketId("1");
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public static void cleanUpClass() {
|
||||
FileUtils.deleteRecursive("~/data", true);
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
package pro.taskana.rest;
|
||||
|
||||
import com.fasterxml.jackson.databind.cfg.HandlerInstantiator;
|
||||
import java.sql.SQLException;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
|
@ -11,8 +14,10 @@ import org.springframework.context.annotation.Bean;
|
|||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
|
||||
import org.springframework.http.converter.json.SpringHandlerInstantiator;
|
||||
|
||||
import com.fasterxml.jackson.databind.cfg.HandlerInstantiator;
|
||||
|
||||
import pro.taskana.ClassificationService;
|
||||
import pro.taskana.SummaryService;
|
||||
import pro.taskana.TaskService;
|
||||
import pro.taskana.TaskanaEngine;
|
||||
import pro.taskana.WorkbasketService;
|
||||
|
@ -21,9 +26,6 @@ import pro.taskana.model.Workbasket;
|
|||
import pro.taskana.rest.serialization.WorkbasketMixIn;
|
||||
import pro.taskana.sampledata.SampleDataGenerator;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import java.sql.SQLException;
|
||||
|
||||
@SpringBootApplication
|
||||
public class RestApplication {
|
||||
|
||||
|
@ -48,11 +50,6 @@ public class RestApplication {
|
|||
return getTaskanaEngine().getWorkbasketService();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public SummaryService getSummaryService() throws Exception {
|
||||
return getTaskanaEngine().getSummaryService();
|
||||
}
|
||||
|
||||
@Bean
|
||||
@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
|
||||
public TaskanaEngine getTaskanaEngine() throws SQLException {
|
||||
|
|
|
@ -1,38 +0,0 @@
|
|||
package pro.taskana.rest;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import pro.taskana.SummaryService;
|
||||
import pro.taskana.model.TaskSummary;
|
||||
|
||||
@RestController
|
||||
@RequestMapping(path = "/v1/summary", produces = { MediaType.APPLICATION_JSON_VALUE })
|
||||
public class SummaryController {
|
||||
|
||||
@Autowired
|
||||
private SummaryService summaryService;
|
||||
|
||||
@RequestMapping(value = "/{workbasketId}/tasks", method = RequestMethod.GET)
|
||||
public ResponseEntity<List<TaskSummary>> getTasksummariesByWorkbasketId(@PathVariable(value="workbasketId") String workbasketId) {
|
||||
List<TaskSummary> taskSummaries = null;
|
||||
try {
|
||||
taskSummaries = summaryService.getTaskSummariesByWorkbasketId(workbasketId);
|
||||
return ResponseEntity.status(HttpStatus.OK).body(taskSummaries);
|
||||
} catch(Exception ex) {
|
||||
if (taskSummaries == null) {
|
||||
taskSummaries = Collections.emptyList();
|
||||
}
|
||||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
package pro.taskana.rest;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import javax.security.auth.login.LoginException;
|
||||
|
@ -24,6 +25,7 @@ import pro.taskana.exceptions.TaskNotFoundException;
|
|||
import pro.taskana.exceptions.WorkbasketNotFoundException;
|
||||
import pro.taskana.model.Task;
|
||||
import pro.taskana.model.TaskState;
|
||||
import pro.taskana.model.TaskSummary;
|
||||
import pro.taskana.rest.query.TaskFilter;
|
||||
|
||||
@RestController
|
||||
|
@ -125,4 +127,17 @@ public class TaskController {
|
|||
}
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/workbasket/{workbasketId}", method = RequestMethod.GET)
|
||||
public ResponseEntity<List<TaskSummary>> getTasksummariesByWorkbasketId(@PathVariable(value="workbasketId") String workbasketId) {
|
||||
List<TaskSummary> taskSummaries = null;
|
||||
try {
|
||||
taskSummaries = taskService.getTaskSummariesByWorkbasketId(workbasketId);
|
||||
return ResponseEntity.status(HttpStatus.OK).body(taskSummaries);
|
||||
} catch(Exception ex) {
|
||||
if (taskSummaries == null) {
|
||||
taskSummaries = Collections.emptyList();
|
||||
}
|
||||
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue