From fecaec92bff03ceeaaeba8e3457534ae38da1151 Mon Sep 17 00:00:00 2001 From: Lucy Ciara Herud-Thomassen <86323303+LucyCiara@users.noreply.github.com> Date: Tue, 3 Mar 2026 17:32:55 +0100 Subject: [PATCH 1/2] test[OrgAPIWrapper]: add tests for OrgAPIWrapper --- pom.xml | 1 - src/main/java/edu/group5/app/App.java | 11 ++++- .../edu/group5/app/control/OrgAPIWrapper.java | 40 ++++++++++++------- .../java/edu/group5/app/control/Wrapper.java | 2 +- 4 files changed, 37 insertions(+), 17 deletions(-) diff --git a/pom.xml b/pom.xml index d78f0c3..3941344 100644 --- a/pom.xml +++ b/pom.xml @@ -47,7 +47,6 @@ compile - diff --git a/src/main/java/edu/group5/app/App.java b/src/main/java/edu/group5/app/App.java index 4f4364f..5886cd4 100644 --- a/src/main/java/edu/group5/app/App.java +++ b/src/main/java/edu/group5/app/App.java @@ -1,15 +1,24 @@ package edu.group5.app; +import java.util.HashMap; + import edu.group5.app.control.OrgAPIWrapper; +import tools.jackson.core.type.TypeReference; +import tools.jackson.databind.ObjectMapper; /** * Hello world! */ public class App { - public static void main(String[] args) { + public static void main(String[] args) throws InterruptedException { OrgAPIWrapper orgWrap = new OrgAPIWrapper("https://app.innsamlingskontrollen.no/api/public/v1/all"); System.out.println(); System.out.println(); orgWrap.importData(); + Object[] imports = orgWrap.getData(); + ObjectMapper objectMapper = new ObjectMapper(); + HashMap map = objectMapper.convertValue(imports[0], new TypeReference>() { + }); + System.out.println(map.get("org_number")); } } diff --git a/src/main/java/edu/group5/app/control/OrgAPIWrapper.java b/src/main/java/edu/group5/app/control/OrgAPIWrapper.java index 9123c69..f8bc7ab 100644 --- a/src/main/java/edu/group5/app/control/OrgAPIWrapper.java +++ b/src/main/java/edu/group5/app/control/OrgAPIWrapper.java @@ -1,37 +1,49 @@ package edu.group5.app.control; +import java.io.IOException; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; +import tools.jackson.core.exc.StreamReadException; import tools.jackson.databind.ObjectMapper; public class OrgAPIWrapper extends Wrapper { - private String urlString; private Object[] data; + private HttpClient client; + private HttpRequest request; public OrgAPIWrapper(String urlString) { - this.urlString = urlString; + if (urlString == null) { + throw new IllegalArgumentException("url can't be null"); + } else if (urlString.isBlank()) { + throw new IllegalArgumentException("url can't be blank"); + } + try { + URI uri = URI.create(urlString); + this.client = HttpClient.newHttpClient(); + this.request = HttpRequest.newBuilder() + .uri(uri) + .GET() + .build(); + } catch (IllegalArgumentException IAe) { + throw new IllegalArgumentException("url has to be valid"); + } + } @Override - public boolean importData() { - URI uri = URI.create(this.urlString); - HttpClient client = HttpClient.newHttpClient(); - HttpRequest request = HttpRequest.newBuilder() - .uri(uri) - .GET() - .build(); - + public boolean importData() throws InterruptedException { try { - HttpResponse response = client.send( - request, HttpResponse.BodyHandlers.ofString()); + HttpResponse response = this.client.send( + this.request, HttpResponse.BodyHandlers.ofString()); this.data = new ObjectMapper().readValue(response.body(), Object[].class); return true; - } catch (Exception e) { - e.printStackTrace(); + } catch (IOException IOe) { return false; + } catch (StreamReadException e) { + throw new StreamReadException("The URL leads to a website that can't be parsed"); } } diff --git a/src/main/java/edu/group5/app/control/Wrapper.java b/src/main/java/edu/group5/app/control/Wrapper.java index e8a8365..012ea2c 100644 --- a/src/main/java/edu/group5/app/control/Wrapper.java +++ b/src/main/java/edu/group5/app/control/Wrapper.java @@ -5,7 +5,7 @@ abstract class Wrapper { protected Wrapper() { } - public abstract boolean importData(); + public abstract boolean importData() throws InterruptedException; public abstract Object getData(); } From 59be68d8a208e0aecfb91a0572688d1fe529ce12 Mon Sep 17 00:00:00 2001 From: Lucy Ciara Herud-Thomassen <86323303+LucyCiara@users.noreply.github.com> Date: Tue, 3 Mar 2026 17:33:30 +0100 Subject: [PATCH 2/2] test[OrgAPIWrapper]: add tests for OrgAPIWrapper --- .../group5/app/control/OrgAPIWrapperTest.java | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 src/test/java/edu/group5/app/control/OrgAPIWrapperTest.java diff --git a/src/test/java/edu/group5/app/control/OrgAPIWrapperTest.java b/src/test/java/edu/group5/app/control/OrgAPIWrapperTest.java new file mode 100644 index 0000000..6f22c85 --- /dev/null +++ b/src/test/java/edu/group5/app/control/OrgAPIWrapperTest.java @@ -0,0 +1,74 @@ +package edu.group5.app.control; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import tools.jackson.core.exc.StreamReadException; + +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.lang.IllegalArgumentException; + +public class OrgAPIWrapperTest { + String testURL; + String wrongURL; + String wrongURL2; + + @BeforeEach + void init() { + this.testURL = "https://app.innsamlingskontrollen.no/api/public/v1/all"; + this.wrongURL = "This is not a URL"; + this.wrongURL2 = "https://www.google.com"; + } + + @Test + public void nullURLThrowsException() { + IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, + () -> new OrgAPIWrapper(null)); + assertEquals("url can't be null", exception.getMessage()); + } + + @Test + public void emptyURLThrowsException() { + IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> new OrgAPIWrapper("")); + assertEquals("url can't be blank", exception.getMessage()); + } + + @Test + public void faultyURLThrowsException() { + IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, + () -> new OrgAPIWrapper(this.wrongURL)); + assertEquals("url has to be valid", exception.getMessage()); + } + + // @Test + // public void noConnectionReturnsFalseImport() { + // assertDoesNotThrow(() -> { + // OrgAPIWrapper api = new OrgAPIWrapper(this.testURL); + // assertFalse(api.importData()); + // }); + // } + + @Test + public void importsNonEmptyData() { + assertDoesNotThrow(() -> { + OrgAPIWrapper api = new OrgAPIWrapper(testURL); + assertTrue(api.importData()); + assertFalse(api.getData().length == 0); + }); + } + + @Test + public void nonParseableSiteThrowsExceptionWhenImporting() { + assertDoesNotThrow(() -> { + OrgAPIWrapper api = new OrgAPIWrapper(this.wrongURL2); + StreamReadException exception = assertThrows(StreamReadException.class, () -> api.importData()); + assertEquals("The URL leads to a website that can't be parsed", exception.getMessage()); + }); + } + +}