diff --git a/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationServiceImpl.java b/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationServiceImpl.java index d62dd2e44..c01bf059e 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationServiceImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/impl/ClassificationServiceImpl.java @@ -180,7 +180,7 @@ public class ClassificationServiceImpl implements ClassificationService { // Update classification fields used by tasks if (oldClassification.getCategory() != classificationImpl.getCategory()) { - List taskSumamries = taskanaEngine.getTaskService() + List taskSummaries = taskanaEngine.getTaskService() .createTaskQuery() .classificationIdIn(oldClassification.getId()) .list(); @@ -188,9 +188,9 @@ public class ClassificationServiceImpl implements ClassificationService { boolean categoryChanged = !(oldClassification.getCategory() == null ? classification.getCategory() == null : oldClassification.getCategory().equals(classification.getCategory())); - if (!taskSumamries.isEmpty() && categoryChanged) { + if (!taskSummaries.isEmpty() && categoryChanged) { List taskIds = new ArrayList<>(); - taskSumamries.stream().forEach(ts -> taskIds.add(ts.getTaskId())); + taskSummaries.stream().forEach(ts -> taskIds.add(ts.getTaskId())); taskMapper.updateClassificationCategoryOnChange(taskIds, classificationImpl.getCategory()); } } @@ -262,7 +262,7 @@ public class ClassificationServiceImpl implements ClassificationService { classification.setIsValidInDomain(true); } - if (classification.getServiceLevel() != null) { + if (classification.getServiceLevel() != null && !"".equals(classification.getServiceLevel())) { try { Duration.parse(classification.getServiceLevel()); } catch (Exception e) { diff --git a/lib/taskana-core/src/test/java/pro/taskana/impl/ClassificationServiceImplTest.java b/lib/taskana-core/src/test/java/pro/taskana/impl/ClassificationServiceImplTest.java index 62b76cb98..f585f9548 100644 --- a/lib/taskana-core/src/test/java/pro/taskana/impl/ClassificationServiceImplTest.java +++ b/lib/taskana-core/src/test/java/pro/taskana/impl/ClassificationServiceImplTest.java @@ -14,7 +14,9 @@ import static org.mockito.Mockito.verifyNoMoreInteractions; import java.time.Instant; import java.time.LocalDate; +import java.util.List; +import org.apache.ibatis.session.SqlSession; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -31,6 +33,7 @@ import pro.taskana.exceptions.DomainNotFoundException; import pro.taskana.exceptions.InvalidArgumentException; import pro.taskana.exceptions.NotAuthorizedException; import pro.taskana.mappings.ClassificationMapper; +import pro.taskana.mappings.JobMapper; /** * Unit Test for ClassificationServiceImpl. @@ -55,6 +58,9 @@ public class ClassificationServiceImplTest { @Mock private ClassificationQueryImpl classificationQueryImplMock; + @Mock + private SqlSession sqlSessionMock; + @Before public void setup() { doNothing().when(taskanaEngineImplMock).openConnection(); @@ -210,7 +216,8 @@ public class ClassificationServiceImplTest { classification.setParentKey("ParentKey"); ClassificationImpl parentDomainClassification = (ClassificationImpl) createDummyClassification("ParentId"); parentDomainClassification.setKey("ParentKey"); - ClassificationImpl parentMasterClassification = (ClassificationImpl) createDummyClassification("ParentIdMaster"); + ClassificationImpl parentMasterClassification = (ClassificationImpl) createDummyClassification( + "ParentIdMaster"); parentMasterClassification.setKey("ParentKey"); parentMasterClassification.setDomain(""); doReturn(null).when(classificationMapperMock).findByKeyAndDomain(classification.getKey(), @@ -268,6 +275,24 @@ public class ClassificationServiceImplTest { verifyNoMoreInteractions(classificationMapperMock, taskanaEngineImplMock, classificationQueryImplMock); } + @Test + public void testUpdateClassificationWithEmptyServiceLevel() + throws ClassificationNotFoundException, NotAuthorizedException, ConcurrencyException, InvalidArgumentException { + Instant now = Instant.now(); + Classification classification = createDummyClassification(); + ((ClassificationImpl) classification).setModified(now); + classification.setServiceLevel(""); + ClassificationImpl oldClassification = (ClassificationImpl) createDummyClassification(); + oldClassification.setModified(now); + doReturn(oldClassification).when(cutSpy).getClassification(classification.getKey(), classification.getDomain()); + doReturn(sqlSessionMock).when(taskanaEngineImplMock).getSqlSession(); + doReturn(new JobRunnerMock()).when(sqlSessionMock).getMapper(any()); + + cutSpy.updateClassification(classification); + + verify(classificationMapperMock, times(1)).update(any()); + } + @Test(expected = ClassificationNotFoundException.class) public void testUpdateClassificationParentIdNotExisting() throws ClassificationNotFoundException, NotAuthorizedException, @@ -419,4 +444,29 @@ public class ClassificationServiceImplTest { classificationImpl.setParentKey(""); return classificationImpl; } + /** + * This is the mock of a jobRunner. + */ + private class JobRunnerMock implements JobMapper { + + @Override + public void insertJob(Job job) { + + } + + @Override + public List findJobsToRun() { + return null; + } + + @Override + public void update(Job job) { + + } + + @Override + public void delete(Job job) { + + } + } }