From abfa07ce6a6934307f3331f9560aae3c6b6c9314 Mon Sep 17 00:00:00 2001 From: tge20 <72377965+tge20@users.noreply.github.com> Date: Mon, 25 Jan 2021 16:49:17 +0100 Subject: [PATCH] TSK-1115: Validate that Service Level is not negative (#1454) --- .../internal/ClassificationServiceImpl.java | 17 ++++++++++++----- .../CreateClassificationAccTest.java | 11 +++++++++++ 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/lib/taskana-core/src/main/java/pro/taskana/classification/internal/ClassificationServiceImpl.java b/lib/taskana-core/src/main/java/pro/taskana/classification/internal/ClassificationServiceImpl.java index dc281ea3d..c814cb904 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/classification/internal/ClassificationServiceImpl.java +++ b/lib/taskana-core/src/main/java/pro/taskana/classification/internal/ClassificationServiceImpl.java @@ -315,9 +315,10 @@ public class ClassificationServiceImpl implements ClassificationService { } private static void validateServiceLevel(String serviceLevel) throws InvalidArgumentException { - try { - Duration.parse(serviceLevel); + Duration duration; + try { + duration = Duration.parse(serviceLevel); } catch (Exception e) { throw new InvalidArgumentException( String.format( @@ -328,10 +329,16 @@ public class ClassificationServiceImpl implements ClassificationService { serviceLevel), e.getCause()); } - // check that the duration is based on format PnD, i.e. it must start with a P, end with a D - String serviceLevelLower = serviceLevel.toLowerCase(); - if (!serviceLevelLower.startsWith("p") || !serviceLevelLower.endsWith("d")) { + if (duration.isNegative()) { + throw new InvalidArgumentException( + String.format( + "Invalid service level %s. Taskana does not support a negative service level.", + serviceLevel)); + } + + // check that the duration is based on format PnD, i.e. it must start with a P, end with a D + if (!serviceLevel.toLowerCase().startsWith("p") || !serviceLevel.toLowerCase().endsWith("d")) { throw new InvalidArgumentException( String.format( "Invalid service level %s. Taskana only supports service " diff --git a/lib/taskana-core/src/test/java/acceptance/classification/CreateClassificationAccTest.java b/lib/taskana-core/src/test/java/acceptance/classification/CreateClassificationAccTest.java index f08ef406b..a34b08764 100644 --- a/lib/taskana-core/src/test/java/acceptance/classification/CreateClassificationAccTest.java +++ b/lib/taskana-core/src/test/java/acceptance/classification/CreateClassificationAccTest.java @@ -165,6 +165,17 @@ class CreateClassificationAccTest extends AbstractAccTest { .isInstanceOf(InvalidArgumentException.class); } + @WithAccessId(user = "businessadmin") + @Test + void should_ThrowException_When_TryingToCreateClassificationWithNegativeServiceLevel() { + Classification classification = + CLASSIFICATION_SERVICE.newClassification("someKey234", "DOMAIN_A", "TASK"); + classification.setServiceLevel("P-1D"); + + assertThatThrownBy(() -> CLASSIFICATION_SERVICE.createClassification(classification)) + .isInstanceOf(InvalidArgumentException.class); + } + @WithAccessId(user = "businessadmin") @Test void testCreateClassificationWithInvalidValues() {