From 213aede752644bd126d0afe1344623764d809722 Mon Sep 17 00:00:00 2001
From: Martin Vogel <martin.vogel@sinc.de>
Date: Thu, 15 Sep 2022 15:38:59 +0200
Subject: [PATCH] refactor(config): change thrown exception on failed config
 loading to InitializationException

---
 .../client/factory/ApplicationConfigLoader.java     | 13 +++++++++----
 .../fitconnect/client/factory/ClientFactory.java    |  6 ++++--
 .../client/factory/ApplicationConfigLoaderTest.java |  2 +-
 .../client/factory/ClientFactoryTest.java           |  5 +++--
 4 files changed, 17 insertions(+), 9 deletions(-)

diff --git a/client/src/main/java/dev/fitko/fitconnect/client/factory/ApplicationConfigLoader.java b/client/src/main/java/dev/fitko/fitconnect/client/factory/ApplicationConfigLoader.java
index f51986e60..259616210 100644
--- a/client/src/main/java/dev/fitko/fitconnect/client/factory/ApplicationConfigLoader.java
+++ b/client/src/main/java/dev/fitko/fitconnect/client/factory/ApplicationConfigLoader.java
@@ -1,6 +1,7 @@
 package dev.fitko.fitconnect.client.factory;
 
 import dev.fitko.fitconnect.api.config.ApplicationConfig;
+import dev.fitko.fitconnect.api.exceptions.InitializationException;
 import org.yaml.snakeyaml.Yaml;
 import org.yaml.snakeyaml.constructor.Constructor;
 
@@ -18,16 +19,20 @@ public final class ApplicationConfigLoader {
      * @param configPath path to config file
      *
      * @return ApplicationConfig
-     * @throws IOException if the default config file could not be loaded
+     * @throws InitializationException if the config file could not be loaded
      */
-    public static ApplicationConfig loadConfig(final Path configPath) throws IOException {
-        return loadConfig(Files.readString(configPath));
+    public static ApplicationConfig loadConfig(final Path configPath) {
+        try {
+            return loadConfig(Files.readString(configPath));
+        } catch (final IOException e) {
+            throw new InitializationException(e.getMessage(), e);
+        }
     }
 
     /**
      * Load ApplicationConfig from string.
      *
-     * @param configYaml string of the yaml config file
+     * @param configYaml string content of the yaml config file
      *
      * @return ApplicationConfig
      */
diff --git a/client/src/main/java/dev/fitko/fitconnect/client/factory/ClientFactory.java b/client/src/main/java/dev/fitko/fitconnect/client/factory/ClientFactory.java
index 6a6aeb31a..8babca685 100644
--- a/client/src/main/java/dev/fitko/fitconnect/client/factory/ClientFactory.java
+++ b/client/src/main/java/dev/fitko/fitconnect/client/factory/ClientFactory.java
@@ -2,6 +2,7 @@ package dev.fitko.fitconnect.client.factory;
 
 import dev.fitko.fitconnect.api.config.ApplicationConfig;
 import dev.fitko.fitconnect.api.config.SubscriberConfig;
+import dev.fitko.fitconnect.api.exceptions.InitializationException;
 import dev.fitko.fitconnect.api.services.Sender;
 import dev.fitko.fitconnect.api.services.Subscriber;
 import dev.fitko.fitconnect.api.services.auth.OAuthService;
@@ -214,8 +215,9 @@ public final class ClientFactory {
             final ApplicationConfig applicationConfig = ApplicationConfigLoader.loadConfig(pathToConfig);
             LOGGER.info("Using sdk environment config {} with {}", applicationConfig.getCurrentEnvironment(), applicationConfig);
             return applicationConfig;
-        } catch (final IOException e) {
-            throw new IllegalStateException("Config could not be loaded, please provide a 'config.yml' in the root path or in the ENV-var 'FIT_CONNECT_CONFIG'", e);
+        } catch (final InitializationException e) {
+            LOGGER.error("Config could not be loaded, please provide a 'config.yml' in the root path or in the ENV-var 'FIT_CONNECT_CONFIG'");
+            throw e;
         }
     }
 
diff --git a/client/src/test/java/dev/fitko/fitconnect/client/factory/ApplicationConfigLoaderTest.java b/client/src/test/java/dev/fitko/fitconnect/client/factory/ApplicationConfigLoaderTest.java
index 0df1d3795..ec98d3baa 100644
--- a/client/src/test/java/dev/fitko/fitconnect/client/factory/ApplicationConfigLoaderTest.java
+++ b/client/src/test/java/dev/fitko/fitconnect/client/factory/ApplicationConfigLoaderTest.java
@@ -25,7 +25,7 @@ class ApplicationConfigLoaderTest {
 
     @Test
     void testLoadMissingConfigFile() {
-        Assertions.assertThrows(IOException.class, () -> ApplicationConfigLoader.loadConfig(Path.of("/no/path")));
+        Assertions.assertThrows(InitializationException.class, () -> ApplicationConfigLoader.loadConfig(Path.of("/no/path")));
     }
 
     @Test
diff --git a/client/src/test/java/dev/fitko/fitconnect/client/factory/ClientFactoryTest.java b/client/src/test/java/dev/fitko/fitconnect/client/factory/ClientFactoryTest.java
index 68625bc9a..b75a1e29f 100644
--- a/client/src/test/java/dev/fitko/fitconnect/client/factory/ClientFactoryTest.java
+++ b/client/src/test/java/dev/fitko/fitconnect/client/factory/ClientFactoryTest.java
@@ -6,6 +6,7 @@ import dev.fitko.fitconnect.api.config.EnvironmentName;
 import dev.fitko.fitconnect.api.config.ResourcePaths;
 import dev.fitko.fitconnect.api.config.SenderConfig;
 import dev.fitko.fitconnect.api.config.SubscriberConfig;
+import dev.fitko.fitconnect.api.exceptions.InitializationException;
 import org.junit.jupiter.api.Test;
 
 import java.util.Map;
@@ -17,8 +18,8 @@ class ClientFactoryTest {
 
     @Test
     void testMissingConfiguration() {
-        assertThrows(IllegalStateException.class, () -> ClientFactory.senderClient());
-        assertThrows(IllegalStateException.class, () -> ClientFactory.subscriberClient());
+        assertThrows(InitializationException.class, () -> ClientFactory.senderClient());
+        assertThrows(InitializationException.class, () -> ClientFactory.subscriberClient());
     }
 
     @Test
-- 
GitLab