From 15cc3bbcd88eb478477e99683afef2af606fd9bc Mon Sep 17 00:00:00 2001
From: Joze RIHTARSIC <joze.RIHTARSIC@ext.ec.europa.eu>
Date: Fri, 13 May 2022 11:40:18 +0200
Subject: [PATCH] Add unit tests

---
 .../smp/config/PropertyUpdateListener.java    |  2 -
 .../smp/services/PayloadValidatorService.java |  3 -
 .../config/PropertyUpdateListenerTest.java    | 49 +++++++++++
 .../services/PayloadValidatorServiceTest.java | 82 +++++++++++++++++++
 4 files changed, 131 insertions(+), 5 deletions(-)
 create mode 100644 smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/config/PropertyUpdateListenerTest.java
 create mode 100644 smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/PayloadValidatorServiceTest.java

diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/config/PropertyUpdateListener.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/config/PropertyUpdateListener.java
index 15e57c403..2e6914f93 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/config/PropertyUpdateListener.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/config/PropertyUpdateListener.java
@@ -37,6 +37,4 @@ public interface PropertyUpdateListener {
     default void updateProperty(SMPPropertyEnum property, Object value) {
         updateProperties(Collections.singletonMap(property, value));
     }
-
-    ;
 }
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/PayloadValidatorService.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/PayloadValidatorService.java
index 17dc306ec..239509e48 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/PayloadValidatorService.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/services/PayloadValidatorService.java
@@ -53,7 +53,4 @@ public class PayloadValidatorService {
             throw new SMPRuntimeException(ErrorCode.INVALID_REQUEST, "Content validation failed", ExceptionUtils.getRootCauseMessage(e),e);
         }
     }
-
-    ;
-
 }
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/config/PropertyUpdateListenerTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/config/PropertyUpdateListenerTest.java
new file mode 100644
index 000000000..90dfa6071
--- /dev/null
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/config/PropertyUpdateListenerTest.java
@@ -0,0 +1,49 @@
+package eu.europa.ec.edelivery.smp.config;
+
+import eu.europa.ec.edelivery.smp.data.ui.enums.SMPPropertyEnum;
+import org.junit.Test;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mockito;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
+import static eu.europa.ec.edelivery.smp.data.ui.enums.SMPPropertyEnum.ACCESS_TOKEN_FAIL_DELAY;
+import static eu.europa.ec.edelivery.smp.data.ui.enums.SMPPropertyEnum.SMP_PROPERTY_REFRESH_CRON;
+import static org.junit.Assert.*;
+
+public class PropertyUpdateListenerTest {
+
+    PropertyUpdateListener testInstance = Mockito.spy(new PropertyUpdateListener() {
+        @Override
+        public void updateProperties(Map<SMPPropertyEnum, Object> properties) {
+        }
+
+        @Override
+        public List<SMPPropertyEnum> handledProperties() {
+            return Collections.singletonList(ACCESS_TOKEN_FAIL_DELAY);
+        }
+    });
+
+    @Test
+    public void handlesProperty() {
+        assertTrue(testInstance.handlesProperty(ACCESS_TOKEN_FAIL_DELAY));
+        assertFalse(testInstance.handlesProperty(SMP_PROPERTY_REFRESH_CRON));
+    }
+
+    @Test
+    public void updateProperty() {
+        Mockito.doNothing().when(testInstance).updateProperties(Mockito.anyMap());
+        SMPPropertyEnum property = ACCESS_TOKEN_FAIL_DELAY;
+        String testValue = "test";
+
+        testInstance.updateProperty(property, testValue);
+
+        ArgumentCaptor<Map<SMPPropertyEnum, Object>> propertyCapture = ArgumentCaptor.forClass(Map.class);
+        Mockito.verify(testInstance, Mockito.times(1)).updateProperties(propertyCapture.capture());
+        assertEquals(1, propertyCapture.getValue().size());
+        assertTrue(propertyCapture.getValue().containsKey(ACCESS_TOKEN_FAIL_DELAY));
+        assertEquals(testValue, propertyCapture.getValue().get(ACCESS_TOKEN_FAIL_DELAY));
+    }
+}
\ No newline at end of file
diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/PayloadValidatorServiceTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/PayloadValidatorServiceTest.java
new file mode 100644
index 000000000..5cdf77988
--- /dev/null
+++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/services/PayloadValidatorServiceTest.java
@@ -0,0 +1,82 @@
+package eu.europa.ec.edelivery.smp.services;
+
+import eu.europa.ec.edelivery.smp.exceptions.ErrorCode;
+import eu.europa.ec.edelivery.smp.exceptions.SMPRuntimeException;
+import eu.europa.ec.smp.spi.PayloadValidatorSpi;
+import eu.europa.ec.smp.spi.exceptions.PayloadValidatorSpiException;
+import org.hamcrest.CoreMatchers;
+import org.hamcrest.MatcherAssert;
+import org.junit.Test;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.springframework.util.MimeTypeUtils;
+
+import java.io.InputStream;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Optional;
+
+import static org.junit.Assert.*;
+
+public class PayloadValidatorServiceTest {
+
+    @Test
+    public void validateUploadedContentNoValidatorsMostNotFail() {
+        PayloadValidatorService testInstance = new PayloadValidatorService(Optional.empty());
+        InputStream inputStream = Mockito.mock(InputStream.class);
+
+        testInstance.validateUploadedContent(inputStream, MimeTypeUtils.APPLICATION_JSON.getType());
+        // no error should accrue
+    }
+
+    @Test
+    public void validateUploadedContentNoValidatorsMostNotFailEmpty() {
+        PayloadValidatorService testInstance = new PayloadValidatorService(Optional.of(Collections.emptyList()));
+        InputStream inputStream = Mockito.mock(InputStream.class);
+
+        testInstance.validateUploadedContent(inputStream, MimeTypeUtils.APPLICATION_JSON.getType());
+        // no error should accrue
+    }
+
+    @Test
+    public void validateUploadedContent() throws PayloadValidatorSpiException {
+        PayloadValidatorSpi validatorSpi1  = Mockito.mock(PayloadValidatorSpi.class);
+        PayloadValidatorSpi validatorSpi2  = Mockito.mock(PayloadValidatorSpi.class);
+        PayloadValidatorService testInstance = new PayloadValidatorService(Optional.of(Arrays.asList(validatorSpi1,validatorSpi2)));
+        InputStream inputStream = Mockito.mock(InputStream.class);
+        String mimeType = MimeTypeUtils.APPLICATION_JSON.getType();
+
+
+        testInstance.validateUploadedContent(inputStream, mimeType);
+        // no error should accrue
+        ArgumentCaptor<InputStream> streamCapture1 = ArgumentCaptor.forClass(InputStream.class);
+        ArgumentCaptor<String> mimeTypeCapture1 = ArgumentCaptor.forClass(String.class);
+        ArgumentCaptor<InputStream> streamCapture2 = ArgumentCaptor.forClass(InputStream.class);
+        ArgumentCaptor<String> mimeTypeCapture2 = ArgumentCaptor.forClass(String.class);
+        Mockito.verify(validatorSpi1, Mockito.times(1)).validatePayload(streamCapture1.capture(), mimeTypeCapture1.capture());
+        Mockito.verify(validatorSpi2,Mockito.times(1)).validatePayload(streamCapture2.capture(), mimeTypeCapture2.capture());
+
+        assertEquals(inputStream, streamCapture1.getValue());
+        assertEquals(inputStream, streamCapture2.getValue());
+        assertEquals(mimeType, mimeTypeCapture1.getValue());
+        assertEquals(mimeType, mimeTypeCapture2.getValue());
+    }
+
+    @Test
+    public void validateUploadedContentThrowException() throws PayloadValidatorSpiException {
+        PayloadValidatorSpi validatorSpi1  = Mockito.mock(PayloadValidatorSpi.class);
+        PayloadValidatorService testInstance = new PayloadValidatorService(Optional.of(Arrays.asList(validatorSpi1)));
+        InputStream inputStream = Mockito.mock(InputStream.class);
+        String mimeType = MimeTypeUtils.APPLICATION_JSON.getType();
+        PayloadValidatorSpiException spiException = new PayloadValidatorSpiException("TestError");
+        Mockito.doThrow(spiException).when(validatorSpi1).validatePayload(Mockito.any(),Mockito.any());
+
+
+        SMPRuntimeException smpRuntimeException =
+                assertThrows(SMPRuntimeException.class, () -> testInstance.validateUploadedContent(inputStream, mimeType));
+
+        assertEquals(ErrorCode.INVALID_REQUEST, smpRuntimeException.getErrorCode());
+        MatcherAssert.assertThat(smpRuntimeException.getMessage(), CoreMatchers.containsString(spiException.getMessage()));
+    }
+}
\ No newline at end of file
-- 
GitLab