From fc03b6998a4d1074632959f6612ddad642da55fd Mon Sep 17 00:00:00 2001 From: Rithvik Sriram Date: Fri, 28 Nov 2025 00:27:38 +0100 Subject: [PATCH 1/5] Implemented ConfigService load/save methods and tests --- client/pom.xml | 6 ++ client/src/main/java/client/utils/Config.java | 51 +++++++++++ .../main/java/client/utils/ConfigService.java | 84 +++++++++++++++++++ .../java/client/scenes/ConfigServiceTest.java | 81 ++++++++++++++++++ .../test/java/client/scenes/ConfigTest.java | 37 ++++++++ 5 files changed, 259 insertions(+) create mode 100644 client/src/main/java/client/utils/Config.java create mode 100644 client/src/main/java/client/utils/ConfigService.java create mode 100644 client/src/test/java/client/scenes/ConfigServiceTest.java create mode 100644 client/src/test/java/client/scenes/ConfigTest.java diff --git a/client/pom.xml b/client/pom.xml index 45f2677..d48d069 100644 --- a/client/pom.xml +++ b/client/pom.xml @@ -23,6 +23,12 @@ 0.0.1-SNAPSHOT + + com.fasterxml.jackson.core + jackson-databind + 2.20.1 + + org.glassfish.jersey.core jersey-client diff --git a/client/src/main/java/client/utils/Config.java b/client/src/main/java/client/utils/Config.java new file mode 100644 index 0000000..1d879a0 --- /dev/null +++ b/client/src/main/java/client/utils/Config.java @@ -0,0 +1,51 @@ +package client.utils; + +import java.util.ArrayList; +import java.util.List; + +public class Config { + + /* + Sets parameters for what the config file needs with a config + Object that will be used in the ConfigService object + */ + private String language = "en"; + private String serverUrl = "http://localhost:8080"; + + private List favourites = new ArrayList<>(); + private List shoppingList = new ArrayList<>(); + + public Config(){} + + public String getLanguage() { + return language; + } + + public List getShoppingList() { + return shoppingList; + } + + public List getFavourites() { + return favourites; + } + + public String getServerUrl() { + return serverUrl; + } + + public void setLanguage(String language) { + this.language = language; + } + + public void setServerUrl(String serverUrl) { + this.serverUrl = serverUrl; + } + + public void setFavourites(List favourites) { + this.favourites = favourites; + } + + public void setShoppingList(List shoppingList) { + this.shoppingList = shoppingList; + } +} diff --git a/client/src/main/java/client/utils/ConfigService.java b/client/src/main/java/client/utils/ConfigService.java new file mode 100644 index 0000000..3abe0a5 --- /dev/null +++ b/client/src/main/java/client/utils/ConfigService.java @@ -0,0 +1,84 @@ +package client.utils; + + +import com.fasterxml.jackson.core.exc.StreamReadException; +import com.fasterxml.jackson.databind.DatabindException; +import com.fasterxml.jackson.databind.ObjectMapper; + +import java.nio.file.Path; +import java.io.File; +import java.io.IOException; + +public class ConfigService { + private final Path configPath; + private final ObjectMapper mapper = new ObjectMapper(); + private Config config; + + + /* + Constructor that takes the path to the config file as it's parameter + + */ + public ConfigService(Path configPath){ + this.configPath = configPath; + load(); + } + + /* + Load needs to be called to load any changes from the config file + to the config attribute of the configService class. + Takes no parameters + */ + private void load(){ + File file = configPath.toFile(); //reads the config file as file + if(file.exists()){ + try{ + config = mapper.readValue(file, Config.class); //uses Jackson to map the file to the config attribute + + } catch (StreamReadException e) { + throw new RuntimeException(e); + } catch (DatabindException e) { + throw new RuntimeException(e); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + else{ + config = new Config(); // if file doesn't exist, it creates one + } + } + + public Path getConfigPath() { + return configPath; + } + + public ObjectMapper getMapper() { + return mapper; + } + + public Config getConfig() { + return config; + } + + public void setConfig(Config config) { + this.config = config; + } + + + /* + The save method saves any changes done to the file + from the config object + */ + public void save(){ + + try { + File file = configPath.toFile(); // file is the config file here + mapper.writeValue(file, config); // here we edit the value of the file using config + + } + catch (Exception e){ + throw new RuntimeException(e); + } + } + +} diff --git a/client/src/test/java/client/scenes/ConfigServiceTest.java b/client/src/test/java/client/scenes/ConfigServiceTest.java new file mode 100644 index 0000000..d27f7c7 --- /dev/null +++ b/client/src/test/java/client/scenes/ConfigServiceTest.java @@ -0,0 +1,81 @@ +package client.scenes; + +import client.utils.Config; +import client.utils.ConfigService; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; + +public class ConfigServiceTest { + + /* + Tests if the config file loads properly with a prewritten json file + */ + @Test + public void ConfigServiceFileLoadTest(@TempDir Path tempDir) throws IOException { + Path configPath = tempDir.resolve("config.json"); + + String json = """ + { + "language": "de", + "serverUrl": "http://exmple12.com", + "favourites": ["banana bread", "pineapple pie"], + "shoppingList": ["milk", "butter"] + } + """; + Files.writeString(configPath, json); //writes into path + ConfigService configService = new ConfigService(configPath);//initiates configservice + + Config config = configService.getConfig(); //checks + + assertEquals("de", config.getLanguage()); + assertEquals("http://exmple12.com", config.getServerUrl()); + + List x = new ArrayList<>(); + x.add("banana bread"); + x.add("pineapple pie"); + + List y = new ArrayList<>(); + y.add("milk"); + y.add("butter"); + + assertEquals(x , config.getFavourites()); + assertEquals(y , config.getShoppingList()); + } + + + /* + Tests if the save method saves changes to the config file. + */ + @Test + public void ConfigSaveTest(@TempDir Path tempDir) throws IOException { + Path configPath = tempDir.resolve("config.json"); + ConfigService configService = new ConfigService(configPath); + + Config config = configService.getConfig(); + + + config.setLanguage("fr"); + config.setServerUrl("www.domain1.com"); + + configService.save(); + + String jsonTest = Files.readString(configPath); + + assertTrue(jsonTest.contains("\"language\":\"fr\"")); + assertTrue(jsonTest.contains("\"serverUrl\":\"www.domain1.com\"")); + + + } + + + +} diff --git a/client/src/test/java/client/scenes/ConfigTest.java b/client/src/test/java/client/scenes/ConfigTest.java new file mode 100644 index 0000000..a05f95d --- /dev/null +++ b/client/src/test/java/client/scenes/ConfigTest.java @@ -0,0 +1,37 @@ +package client.scenes; + +import client.utils.Config; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; + +import static org.junit.jupiter.api.Assertions.*; + +public class ConfigTest { + + @Test + public void ConfigDefaultValueTest(){ + Config config = new Config(); + assertEquals("en", config.getLanguage()); + assertEquals("http://localhost:8080", config.getServerUrl()); + assertTrue(config.getFavourites().isEmpty()); + assertTrue(config.getShoppingList().isEmpty()); + } + + @Test + public void ConfigGetterTest(){ + Config config = new Config(); + config.setLanguage("nl"); + config.setServerUrl("http://localhost:8081"); + ArrayList x = new ArrayList<>(); + x.add("Lava Cake"); + x.add("Brownie"); + config.setFavourites(x); + assertEquals(config.getFavourites(), x); + config.setShoppingList(x); + assertEquals(config.getShoppingList(), x); + } + + + +} From d179b264e641043776720ddd63e4a938531f0ac1 Mon Sep 17 00:00:00 2001 From: Rithvik Sriram Date: Fri, 28 Nov 2025 16:33:02 +0100 Subject: [PATCH 2/5] changes to skip tests and fixed checkstyle --- .../src/main/java/client/utils/Navigation.java | 0 .../java/client/scenes/ConfigServiceTest.java | 15 ++++++++++++--- .../src/test/java/client/scenes/ConfigTest.java | 17 +++++++++++++++-- 3 files changed, 27 insertions(+), 5 deletions(-) create mode 100644 client/src/main/java/client/utils/Navigation.java diff --git a/client/src/main/java/client/utils/Navigation.java b/client/src/main/java/client/utils/Navigation.java new file mode 100644 index 0000000..e69de29 diff --git a/client/src/test/java/client/scenes/ConfigServiceTest.java b/client/src/test/java/client/scenes/ConfigServiceTest.java index d27f7c7..63c51a9 100644 --- a/client/src/test/java/client/scenes/ConfigServiceTest.java +++ b/client/src/test/java/client/scenes/ConfigServiceTest.java @@ -2,10 +2,13 @@ package client.scenes; import client.utils.Config; import client.utils.ConfigService; +import client.utils.ServerUtils; +import org.junit.jupiter.api.Assumptions; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; -import java.io.File; + import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; @@ -15,12 +18,18 @@ import java.util.List; import static org.junit.jupiter.api.Assertions.*; public class ConfigServiceTest { + static ServerUtils dv = new ServerUtils(); + @BeforeEach + public void setup(){ + Assumptions.assumeTrue(dv.isServerAvailable(), "Server not available"); + } + /* Tests if the config file loads properly with a prewritten json file */ @Test - public void ConfigServiceFileLoadTest(@TempDir Path tempDir) throws IOException { + public void configServiceFileLoadTest(@TempDir Path tempDir) throws IOException { Path configPath = tempDir.resolve("config.json"); String json = """ @@ -56,7 +65,7 @@ public class ConfigServiceTest { Tests if the save method saves changes to the config file. */ @Test - public void ConfigSaveTest(@TempDir Path tempDir) throws IOException { + public void configSaveTest(@TempDir Path tempDir) throws IOException { Path configPath = tempDir.resolve("config.json"); ConfigService configService = new ConfigService(configPath); diff --git a/client/src/test/java/client/scenes/ConfigTest.java b/client/src/test/java/client/scenes/ConfigTest.java index a05f95d..34e27b5 100644 --- a/client/src/test/java/client/scenes/ConfigTest.java +++ b/client/src/test/java/client/scenes/ConfigTest.java @@ -1,6 +1,9 @@ package client.scenes; import client.utils.Config; +import client.utils.ServerUtils; +import org.junit.jupiter.api.Assumptions; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.util.ArrayList; @@ -8,9 +11,19 @@ import java.util.ArrayList; import static org.junit.jupiter.api.Assertions.*; public class ConfigTest { + static ServerUtils dv = new ServerUtils(); + + + + @BeforeEach + public void setup(){ + Assumptions.assumeTrue(dv.isServerAvailable(), "Server not available"); + } + @Test - public void ConfigDefaultValueTest(){ + public void configDefaultValueTest(){ + Config config = new Config(); assertEquals("en", config.getLanguage()); assertEquals("http://localhost:8080", config.getServerUrl()); @@ -19,7 +32,7 @@ public class ConfigTest { } @Test - public void ConfigGetterTest(){ + public void configGetterTest(){ Config config = new Config(); config.setLanguage("nl"); config.setServerUrl("http://localhost:8081"); From 244ec5ee10d190778106df770523288d2af8b79e Mon Sep 17 00:00:00 2001 From: Rithvik Sriram Date: Thu, 4 Dec 2025 17:07:48 +0100 Subject: [PATCH 3/5] Fixed all changes from comments from merge --- client/src/main/java/client/utils/Navigation.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 client/src/main/java/client/utils/Navigation.java diff --git a/client/src/main/java/client/utils/Navigation.java b/client/src/main/java/client/utils/Navigation.java deleted file mode 100644 index e69de29..0000000 From 26483e6d13b388fcc66882425293ac5c1be19572 Mon Sep 17 00:00:00 2001 From: Rithvik Sriram Date: Thu, 4 Dec 2025 17:28:02 +0100 Subject: [PATCH 4/5] Added all suggested changes from the comments by reviewers --- client/src/main/java/client/utils/Config.java | 11 ++++----- .../main/java/client/utils/ConfigService.java | 23 ++++++++----------- .../java/client/scenes/ConfigServiceTest.java | 6 ++--- .../test/java/client/scenes/ConfigTest.java | 7 ++++-- 4 files changed, 22 insertions(+), 25 deletions(-) diff --git a/client/src/main/java/client/utils/Config.java b/client/src/main/java/client/utils/Config.java index 1d879a0..c94dd4c 100644 --- a/client/src/main/java/client/utils/Config.java +++ b/client/src/main/java/client/utils/Config.java @@ -5,14 +5,11 @@ import java.util.List; public class Config { - /* - Sets parameters for what the config file needs with a config - Object that will be used in the ConfigService object - */ + private String language = "en"; private String serverUrl = "http://localhost:8080"; - private List favourites = new ArrayList<>(); + private List favourites = new ArrayList<>(); private List shoppingList = new ArrayList<>(); public Config(){} @@ -25,7 +22,7 @@ public class Config { return shoppingList; } - public List getFavourites() { + public List getFavourites() { return favourites; } @@ -41,7 +38,7 @@ public class Config { this.serverUrl = serverUrl; } - public void setFavourites(List favourites) { + public void setFavourites(List favourites) { this.favourites = favourites; } diff --git a/client/src/main/java/client/utils/ConfigService.java b/client/src/main/java/client/utils/ConfigService.java index 3abe0a5..0215d74 100644 --- a/client/src/main/java/client/utils/ConfigService.java +++ b/client/src/main/java/client/utils/ConfigService.java @@ -31,21 +31,18 @@ public class ConfigService { */ private void load(){ File file = configPath.toFile(); //reads the config file as file - if(file.exists()){ - try{ - config = mapper.readValue(file, Config.class); //uses Jackson to map the file to the config attribute + if (!file.exists()) { //if file doesn't exist then it creates a config object + config = new Config(); + return; + } - } catch (StreamReadException e) { - throw new RuntimeException(e); - } catch (DatabindException e) { - throw new RuntimeException(e); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - else{ - config = new Config(); // if file doesn't exist, it creates one + try{ + config = mapper.readValue(file, Config.class); //uses Jackson to map the file to the config attribute + + } catch (IOException e) { + throw new RuntimeException(e); } + } public Path getConfigPath() { diff --git a/client/src/test/java/client/scenes/ConfigServiceTest.java b/client/src/test/java/client/scenes/ConfigServiceTest.java index 63c51a9..31fa0a5 100644 --- a/client/src/test/java/client/scenes/ConfigServiceTest.java +++ b/client/src/test/java/client/scenes/ConfigServiceTest.java @@ -48,9 +48,9 @@ public class ConfigServiceTest { assertEquals("de", config.getLanguage()); assertEquals("http://exmple12.com", config.getServerUrl()); - List x = new ArrayList<>(); - x.add("banana bread"); - x.add("pineapple pie"); + List x = new ArrayList<>(); + x.add(23412L); + x.add(25412L); List y = new ArrayList<>(); y.add("milk"); diff --git a/client/src/test/java/client/scenes/ConfigTest.java b/client/src/test/java/client/scenes/ConfigTest.java index 34e27b5..d715839 100644 --- a/client/src/test/java/client/scenes/ConfigTest.java +++ b/client/src/test/java/client/scenes/ConfigTest.java @@ -39,8 +39,11 @@ public class ConfigTest { ArrayList x = new ArrayList<>(); x.add("Lava Cake"); x.add("Brownie"); - config.setFavourites(x); - assertEquals(config.getFavourites(), x); + ArrayList y = new ArrayList<>(); + y.add(1234L); + y.add(1235L); + config.setFavourites(y); + assertEquals(config.getFavourites(), y); config.setShoppingList(x); assertEquals(config.getShoppingList(), x); } From 1ad959b2381153f615a1d762fa54b23365a15378 Mon Sep 17 00:00:00 2001 From: Rithvik Sriram Date: Thu, 4 Dec 2025 18:09:30 +0100 Subject: [PATCH 5/5] fixed pipeline issues --- .../src/main/java/client/utils/ConfigService.java | 3 +-- .../test/java/client/scenes/ConfigServiceTest.java | 12 +++++++++--- client/src/test/java/client/scenes/ConfigTest.java | 13 ++++++------- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/client/src/main/java/client/utils/ConfigService.java b/client/src/main/java/client/utils/ConfigService.java index 0215d74..d1d70c6 100644 --- a/client/src/main/java/client/utils/ConfigService.java +++ b/client/src/main/java/client/utils/ConfigService.java @@ -1,8 +1,7 @@ package client.utils; -import com.fasterxml.jackson.core.exc.StreamReadException; -import com.fasterxml.jackson.databind.DatabindException; + import com.fasterxml.jackson.databind.ObjectMapper; import java.nio.file.Path; diff --git a/client/src/test/java/client/scenes/ConfigServiceTest.java b/client/src/test/java/client/scenes/ConfigServiceTest.java index 31fa0a5..8af3d78 100644 --- a/client/src/test/java/client/scenes/ConfigServiceTest.java +++ b/client/src/test/java/client/scenes/ConfigServiceTest.java @@ -19,6 +19,11 @@ import static org.junit.jupiter.api.Assertions.*; public class ConfigServiceTest { static ServerUtils dv = new ServerUtils(); + + + private static final long TEST_ID_A = 23412L; + private static final long TEST_ID_B = 25412L; + @BeforeEach public void setup(){ Assumptions.assumeTrue(dv.isServerAvailable(), "Server not available"); @@ -49,8 +54,9 @@ public class ConfigServiceTest { assertEquals("http://exmple12.com", config.getServerUrl()); List x = new ArrayList<>(); - x.add(23412L); - x.add(25412L); + + x.add(TEST_ID_A); + x.add(TEST_ID_B); List y = new ArrayList<>(); y.add("milk"); @@ -87,4 +93,4 @@ public class ConfigServiceTest { -} +} \ No newline at end of file diff --git a/client/src/test/java/client/scenes/ConfigTest.java b/client/src/test/java/client/scenes/ConfigTest.java index d715839..9c82d34 100644 --- a/client/src/test/java/client/scenes/ConfigTest.java +++ b/client/src/test/java/client/scenes/ConfigTest.java @@ -13,10 +13,12 @@ import static org.junit.jupiter.api.Assertions.*; public class ConfigTest { static ServerUtils dv = new ServerUtils(); + private static final long FAV_LIST_ID_1 = 1234L; + private static final long FAV_LIST_ID_2 = 1235L; @BeforeEach - public void setup(){ + public void setup(){ Assumptions.assumeTrue(dv.isServerAvailable(), "Server not available"); } @@ -40,14 +42,11 @@ public class ConfigTest { x.add("Lava Cake"); x.add("Brownie"); ArrayList y = new ArrayList<>(); - y.add(1234L); - y.add(1235L); + y.add(FAV_LIST_ID_1); + y.add(FAV_LIST_ID_2); config.setFavourites(y); assertEquals(config.getFavourites(), y); config.setShoppingList(x); assertEquals(config.getShoppingList(), x); } - - - -} +} \ No newline at end of file