response = this.client.send(
+ this.request, HttpResponse.BodyHandlers.ofString());
+ this.data = new ObjectMapper().readValue(response.body(), Object[].class);
+ return true;
+ } catch (IOException IOe) {
+ return false;
+ } catch (StreamReadException e) {
+ throw new StreamReadException("The URL leads to a website that can't be parsed");
+ }
+ }
+
+ @Override
+ public Object[] getData() {
+ return this.data;
+ }
+}
diff --git a/src/main/java/edu/group5/app/control/Wrapper.java b/src/main/java/edu/group5/app/control/Wrapper.java
index 9655c26..012ea2c 100644
--- a/src/main/java/edu/group5/app/control/Wrapper.java
+++ b/src/main/java/edu/group5/app/control/Wrapper.java
@@ -1,5 +1,11 @@
package edu.group5.app.control;
-public class Wrapper {
-
+abstract class Wrapper {
+
+ protected Wrapper() {
+ }
+
+ public abstract boolean importData() throws InterruptedException;
+
+ public abstract Object getData();
}
diff --git a/src/main/java/edu/group5/app/model/organization/Organization.java b/src/main/java/edu/group5/app/model/organization/Organization.java
index 941ed5a..be0e810 100644
--- a/src/main/java/edu/group5/app/model/organization/Organization.java
+++ b/src/main/java/edu/group5/app/model/organization/Organization.java
@@ -5,14 +5,16 @@
/**
* Represents an organization.
*
- * An organization is identified by an organization number, a name,
+ *
+ * An organization is identified by an organization number, a name,
* trust status, website URL, pre-approval status, and a textual description.
*
- *
Instances are validated on creation:
+ *
+ * Instances are validated on creation:
*
- * - orgNumber must be non-negative
- * - name and websiteURL must not be null or blank
- * - description must not be null
+ * - orgNumber must be non-negative
+ * - name and websiteURL must not be null or blank
+ * - description must not be null
*
*/
public record Organization(
@@ -21,21 +23,24 @@ public record Organization(
boolean trusted,
String websiteURL,
boolean isPreApproved,
- String description
-) {
+ String description) {
/**
* Creates a new organization.
*
- * @param orgNumber the organization number; must be non-negative
- * @param name the organization name; must not be null or blank
- * @param trusted whether the organization is trusted
- * @param websiteURL the organization's website URL; must not be null or blank
+ * @param orgNumber the organization number; must be non-negative
+ * @param name the organization name; must not be null or blank
+ * @param trusted whether the organization is trusted
+ * @param websiteURL the organization's website URL; must not be null or
+ * blank
* @param isPreApproved whether the organization is pre-approved
- * @param description a textual description of the organization; must not be null
- * @throws NullPointerException if name, websiteURL or description is null
- * @throws IllegalArgumentException if orgNumber is negative, or if name or websiteURL is blank
+ * @param description a textual description of the organization; must not be
+ * null
+ * @throws NullPointerException if name, websiteURL or description is null
+ * @throws IllegalArgumentException if orgNumber is negative, or if name or
+ * websiteURL is blank
*/
- public Organization(int orgNumber, String name, boolean trusted, String websiteURL, boolean isPreApproved, String description) {
+ public Organization(int orgNumber, String name, boolean trusted, String websiteURL, boolean isPreApproved,
+ String description) {
if (orgNumber < 0) {
throw new IllegalArgumentException("orgNumber cannot be negative");
}
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());
+ });
+ }
+
+}