From 8976f8a4d7394d17ce4381ded2d24bb1728447ae Mon Sep 17 00:00:00 2001
From: Martin Weise <martin.weise@tuwien.ac.at>
Date: Sun, 20 Nov 2022 12:00:56 +0100
Subject: [PATCH] Added Unit test

---
 .../src/test/java/at/tuwien/BaseUnitTest.java |  1 +
 .../service/ContainerServiceUnitTest.java     | 72 +++++++++++++++++++
 .../service/impl/ContainerServiceImpl.java    |  2 +-
 .../container/image/ContainerImage.java       |  1 +
 .../image/ContainerImageEnvironmentItem.java  |  1 +
 5 files changed, 76 insertions(+), 1 deletion(-)
 create mode 100644 fda-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceUnitTest.java

diff --git a/fda-container-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java b/fda-container-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java
index bca4a20283..79202e1277 100644
--- a/fda-container-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java
+++ b/fda-container-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java
@@ -144,6 +144,7 @@ public abstract class BaseUnitTest {
             .driverClass(IMAGE_1_DRIVER)
             .compiled(IMAGE_1_BUILT)
             .size(IMAGE_1_SIZE)
+            .environment(IMAGE_1_ENV)
             .defaultPort(IMAGE_1_PORT)
             .build();
 
diff --git a/fda-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceUnitTest.java b/fda-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceUnitTest.java
new file mode 100644
index 0000000000..9a1ccac5d9
--- /dev/null
+++ b/fda-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceUnitTest.java
@@ -0,0 +1,72 @@
+package at.tuwien.service;
+
+import at.tuwien.BaseUnitTest;
+import at.tuwien.api.container.ContainerCreateRequestDto;
+import at.tuwien.config.ReadyConfig;
+import at.tuwien.entities.container.Container;
+import at.tuwien.exception.ContainerAlreadyExistsException;
+import at.tuwien.exception.DockerClientException;
+import at.tuwien.exception.ImageNotFoundException;
+import at.tuwien.exception.UserNotFoundException;
+import at.tuwien.repository.jpa.ContainerRepository;
+import at.tuwien.repository.jpa.ImageRepository;
+import at.tuwien.repository.jpa.UserRepository;
+import lombok.extern.log4j.Log4j2;
+import org.apache.http.auth.BasicUserPrincipal;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+
+import java.security.Principal;
+
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+@Log4j2
+@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
+@SpringBootTest
+@ExtendWith(SpringExtension.class)
+public class ContainerServiceUnitTest extends BaseUnitTest {
+
+    @MockBean
+    private ReadyConfig readyConfig;
+
+    @Autowired
+    private ContainerRepository containerRepository;
+
+    @Autowired
+    private ImageRepository imageRepository;
+
+    @Autowired
+    private UserRepository userRepository;
+
+    @Autowired
+    private ContainerService containerService;
+
+    @BeforeEach
+    public void beforeEach() {
+        /* mock data */
+        userRepository.save(USER_1);
+        imageRepository.save(IMAGE_1);
+        containerRepository.save(CONTAINER_1);
+    }
+
+    @Test
+    public void create_nameExists_fails() {
+        final ContainerCreateRequestDto request = ContainerCreateRequestDto.builder()
+                .name(CONTAINER_1_NAME)
+                .repository(IMAGE_1_REPOSITORY)
+                .tag(IMAGE_1_TAG)
+                .build();
+        final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
+
+        /* test */
+        assertThrows(ContainerAlreadyExistsException.class, () -> {
+            containerService.create(request, principal);
+        });
+    }
+}
diff --git a/fda-container-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java b/fda-container-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java
index c5cbc523a9..eadb36f909 100644
--- a/fda-container-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java
+++ b/fda-container-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java
@@ -110,7 +110,7 @@ public class ContainerServiceImpl implements ContainerService {
                     .exec();
         } catch (ConflictException e) {
             log.error("Conflicting names {}, reason: {}", createDto.getName(), e.getMessage());
-            throw new ContainerAlreadyExistsException("Unexpected behavior", e);
+            throw new ContainerAlreadyExistsException("Conflicting names", e);
         } catch (NotFoundException e) {
             log.error("The image {}:{} not available on the container service", createDto.getRepository(),
                     createDto.getTag());
diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java
index 8704b32853..1be33c681f 100644
--- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java
+++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java
@@ -61,6 +61,7 @@ public class ContainerImage {
     @Column(nullable = false)
     private Integer defaultPort;
 
+    @ToString.Exclude
     @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
     @JoinColumn(name = "iid", insertable = false, updatable = false)
     private List<ContainerImageEnvironmentItem> environment;
diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageEnvironmentItem.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageEnvironmentItem.java
index 208c2143cd..3b0df1ac6d 100644
--- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageEnvironmentItem.java
+++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageEnvironmentItem.java
@@ -46,6 +46,7 @@ public class ContainerImageEnvironmentItem {
     @Enumerated(EnumType.STRING)
     private ContainerImageEnvironmentItemType type;
 
+    @ToString.Exclude
     @org.springframework.data.annotation.Transient
     @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
     @JoinColumns({
-- 
GitLab