From 530223bb16b0bb2ad1a241b7a09c53e76ec6fe74 Mon Sep 17 00:00:00 2001 From: emilfa Date: Thu, 26 Feb 2026 10:08:14 +0100 Subject: [PATCH 01/14] feat: created Organisation class --- .../app/model/organization/Organization.java | 42 ++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) 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 825945f..abb2f71 100644 --- a/src/main/java/edu/group5/app/model/organization/Organization.java +++ b/src/main/java/edu/group5/app/model/organization/Organization.java @@ -1,5 +1,45 @@ package edu.group5.app.model.organization; +import java.util.Objects; + public class Organization { - + private final int orgNumber; + private final String name; + private final boolean trusted; + private final String websiteURL; + private final boolean isPreApproved; + private final String description; + + public Organization(int orgNumber, String name, boolean trusted, String websiteURL, boolean isPreApproved, String description) { + this.orgNumber = orgNumber; + this.name = Objects.requireNonNull(name, "name cannot be null"); + this.trusted = trusted; + this.websiteURL = Objects.requireNonNull(websiteURL, "websiteURL cannot be null"); + this.isPreApproved = isPreApproved; + this.description = Objects.requireNonNull(description, "description cannot be null"); + } + + public int getOrgNumber() { + return orgNumber; + } + + public String getName() { + return name; + } + + public boolean isTrusted() { + return trusted; + } + + public String getWebsiteURL() { + return websiteURL; + } + + public boolean isPreApproved() { + return isPreApproved; + } + + public String getDescription() { + return description; + } } From 51a85e685c7dce635c38e1e8f835f93cf5c676b8 Mon Sep 17 00:00:00 2001 From: emilfa Date: Thu, 26 Feb 2026 10:47:33 +0100 Subject: [PATCH 02/14] feat: made Organization into a record class + error handling + javadoc --- .../app/model/organization/Organization.java | 67 ++++++++++--------- .../model/organization/OrganizationTest.java | 4 ++ 2 files changed, 40 insertions(+), 31 deletions(-) create mode 100644 src/test/java/edu/group5/app/model/organization/OrganizationTest.java 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 abb2f71..885f0ed 100644 --- a/src/main/java/edu/group5/app/model/organization/Organization.java +++ b/src/main/java/edu/group5/app/model/organization/Organization.java @@ -2,44 +2,49 @@ import java.util.Objects; -public class Organization { - private final int orgNumber; - private final String name; - private final boolean trusted; - private final String websiteURL; - private final boolean isPreApproved; - private final String description; - +/** + * Represents an organization. + * + *

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: + *

+ */ +public record Organization(int orgNumber, String name, boolean trusted, String websiteURL, boolean isPreApproved, + 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 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 + */ public Organization(int orgNumber, String name, boolean trusted, String websiteURL, boolean isPreApproved, String description) { + if (orgNumber < 0) { + throw new IllegalArgumentException("orgNumber cannot be negative"); + } this.orgNumber = orgNumber; this.name = Objects.requireNonNull(name, "name cannot be null"); this.trusted = trusted; this.websiteURL = Objects.requireNonNull(websiteURL, "websiteURL cannot be null"); this.isPreApproved = isPreApproved; this.description = Objects.requireNonNull(description, "description cannot be null"); - } - - public int getOrgNumber() { - return orgNumber; - } - - public String getName() { - return name; - } - - public boolean isTrusted() { - return trusted; - } - - public String getWebsiteURL() { - return websiteURL; - } - - public boolean isPreApproved() { - return isPreApproved; - } - public String getDescription() { - return description; + if (name.isBlank()) { + throw new IllegalArgumentException("name cannot be blank"); + } + if (websiteURL.isBlank()) { + throw new IllegalArgumentException("websiteURL cannot be blank"); + } } } diff --git a/src/test/java/edu/group5/app/model/organization/OrganizationTest.java b/src/test/java/edu/group5/app/model/organization/OrganizationTest.java new file mode 100644 index 0000000..557c0c0 --- /dev/null +++ b/src/test/java/edu/group5/app/model/organization/OrganizationTest.java @@ -0,0 +1,4 @@ +import static org.junit.jupiter.api.Assertions.*; +class OrganizationTest { + +} \ No newline at end of file From fbbdab4b439806938429819006c2d7ce8305b45e Mon Sep 17 00:00:00 2001 From: emilfa Date: Thu, 26 Feb 2026 10:48:02 +0100 Subject: [PATCH 03/14] test: made unit tests for Organization --- .../model/organization/OrganizationTest.java | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/src/test/java/edu/group5/app/model/organization/OrganizationTest.java b/src/test/java/edu/group5/app/model/organization/OrganizationTest.java index 557c0c0..3b086c3 100644 --- a/src/test/java/edu/group5/app/model/organization/OrganizationTest.java +++ b/src/test/java/edu/group5/app/model/organization/OrganizationTest.java @@ -1,4 +1,86 @@ +package edu.group5.app.model.organization; + +import org.junit.jupiter.api.Test; + import static org.junit.jupiter.api.Assertions.*; + class OrganizationTest { + @Test + void constructor_ThrowsWhenOrgNumberIsNegative() { + assertThrows(IllegalArgumentException.class, () -> {new Organization( + -1, + "Org", + true, + null, + true, + "Org description" + ); + }); + } + + @Test + void constructor_ThrowsWhenNameIsNull() { + assertThrows(NullPointerException.class, () -> {new Organization( + 1, + null, + true, + "org.com", + true, + "Org description" + ); + }); + } + + @Test + void constructor_ThrowsWhenNameIsBlank() { + assertThrows(IllegalArgumentException.class, () -> {new Organization( + 1, + "", + true, + "org.com", + true, + "Org description" + ); + }); + } + + @Test + void constructor_ThrowsWhenWebsiteURLIsNull() { + assertThrows(NullPointerException.class, () -> {new Organization( + 1, + "Org", + true, + null, + true, + "Org description" + ); + }); + } + + @Test + void constructor_ThrowsWhenWebsiteURLIsBlank() { + assertThrows(IllegalArgumentException.class, () -> {new Organization( + 1, + "Org", + true, + "", + true, + "Org description" + ); + }); + } + + @Test + void constructor_ThrowsWhenDescriptionIsNull() { + assertThrows(NullPointerException.class, () -> {new Organization( + 1, + "Org", + true, + "org.com", + true, + null + ); + }); + } } \ No newline at end of file From 76e620f7cd2582413d39aea6d37310f65f5298c9 Mon Sep 17 00:00:00 2001 From: emilfa Date: Thu, 26 Feb 2026 11:15:16 +0100 Subject: [PATCH 04/14] feat: created OrganizationRepo class --- .../model/organization/OrganizationRepo.java | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/main/java/edu/group5/app/model/organization/OrganizationRepo.java diff --git a/src/main/java/edu/group5/app/model/organization/OrganizationRepo.java b/src/main/java/edu/group5/app/model/organization/OrganizationRepo.java new file mode 100644 index 0000000..850333f --- /dev/null +++ b/src/main/java/edu/group5/app/model/organization/OrganizationRepo.java @@ -0,0 +1,39 @@ +package edu.group5.app.model.organization; + +import edu.group5.app.model.Repository; + +import java.util.HashMap; +import java.util.Objects; + +/** + * Handles business logic associated with organizations + */ +public class OrganizationRepo implements Repository { + private HashMap content; + + /** + * Creates a new Organization Repository + * + * @param content holds all current organizations + * @throws NullPointerException if content is null + */ + public OrganizationRepo(HashMap content) { + this.content = Objects.requireNonNull(content, "content cannot be null"); + } + + public HashMap getContent() { + return content; + } + + public HashMap getTrustedOrganizations() { + HashMap trustedOrgs = new HashMap<>(); + + content.forEach((orgNr, org) -> { + if (org.trusted()) { + trustedOrgs.put(orgNr, org); + } + }); + + return trustedOrgs; + } +} From 98b995bf787af59c7f73c54b8716b1272014ca45 Mon Sep 17 00:00:00 2001 From: emilfa Date: Thu, 26 Feb 2026 11:53:56 +0100 Subject: [PATCH 05/14] test: created OrganizationRepoTest class --- .../group5/app/model/organization/OrganizationRepoTest.java | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 src/test/java/edu/group5/app/model/organization/OrganizationRepoTest.java diff --git a/src/test/java/edu/group5/app/model/organization/OrganizationRepoTest.java b/src/test/java/edu/group5/app/model/organization/OrganizationRepoTest.java new file mode 100644 index 0000000..780bf8e --- /dev/null +++ b/src/test/java/edu/group5/app/model/organization/OrganizationRepoTest.java @@ -0,0 +1,4 @@ +import static org.junit.jupiter.api.Assertions.*; +class OrganizationRepoTest { + +} \ No newline at end of file From aefd5ffb8f758c8ee43d8ea4b3a5d210f0b80fb8 Mon Sep 17 00:00:00 2001 From: emilfa Date: Thu, 26 Feb 2026 11:55:04 +0100 Subject: [PATCH 06/14] feat: created abstract class Repository --- .../java/edu/group5/app/model/Repository.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/main/java/edu/group5/app/model/Repository.java diff --git a/src/main/java/edu/group5/app/model/Repository.java b/src/main/java/edu/group5/app/model/Repository.java new file mode 100644 index 0000000..d0d2792 --- /dev/null +++ b/src/main/java/edu/group5/app/model/Repository.java @@ -0,0 +1,20 @@ +package edu.group5.app.model; + +/** + * Represents a repository + */ +public abstract class Repository { + protected final Object content; + + public Repository(Object content) { + this.content = content; + } + + /** + * Gets the content of the repo + * @return content of the repo + */ + public Object getContent() { + return content; + } +} From dc7bc8f024a98a06108320789cee82ee0f772aed Mon Sep 17 00:00:00 2001 From: emilfa Date: Thu, 26 Feb 2026 11:56:16 +0100 Subject: [PATCH 07/14] feat: minor changes to OrganizationRepo --- .../app/model/organization/OrganizationRepo.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/main/java/edu/group5/app/model/organization/OrganizationRepo.java b/src/main/java/edu/group5/app/model/organization/OrganizationRepo.java index 850333f..27b128f 100644 --- a/src/main/java/edu/group5/app/model/organization/OrganizationRepo.java +++ b/src/main/java/edu/group5/app/model/organization/OrganizationRepo.java @@ -8,23 +8,24 @@ /** * Handles business logic associated with organizations */ -public class OrganizationRepo implements Repository { - private HashMap content; +public class OrganizationRepo extends Repository { + private final HashMap content; /** * Creates a new Organization Repository * - * @param content holds all current organizations + * @param content holds all current organizations in the repository * @throws NullPointerException if content is null */ public OrganizationRepo(HashMap content) { this.content = Objects.requireNonNull(content, "content cannot be null"); + super(content); } - public HashMap getContent() { - return content; - } - + /** + * Gets all trusted organizations in the repository + * @return all organizations with trusted = true + */ public HashMap getTrustedOrganizations() { HashMap trustedOrgs = new HashMap<>(); From 0523bcefcf8cc128493dc34c10901aa020ce0889 Mon Sep 17 00:00:00 2001 From: Emil-F Date: Sun, 1 Mar 2026 13:59:19 +0100 Subject: [PATCH 08/14] test: added positive test for the constructor in OrganizationTest --- ...nRepo.java => OrganizationRepository.java} | 0 .../model/organization/OrganizationTest.java | 46 +++++++++++-------- 2 files changed, 27 insertions(+), 19 deletions(-) rename src/main/java/edu/group5/app/model/organization/{OrganizationRepo.java => OrganizationRepository.java} (100%) diff --git a/src/main/java/edu/group5/app/model/organization/OrganizationRepo.java b/src/main/java/edu/group5/app/model/organization/OrganizationRepository.java similarity index 100% rename from src/main/java/edu/group5/app/model/organization/OrganizationRepo.java rename to src/main/java/edu/group5/app/model/organization/OrganizationRepository.java diff --git a/src/test/java/edu/group5/app/model/organization/OrganizationTest.java b/src/test/java/edu/group5/app/model/organization/OrganizationTest.java index 3b086c3..9568ab5 100644 --- a/src/test/java/edu/group5/app/model/organization/OrganizationTest.java +++ b/src/test/java/edu/group5/app/model/organization/OrganizationTest.java @@ -5,82 +5,90 @@ import static org.junit.jupiter.api.Assertions.*; class OrganizationTest { - + + @Test + void constructor_CreatesAnOrganizationWhenInputIsValid() { + Organization org = new Organization( + 1, + "Org", + true, + "org.com", + true, + "Org description" + ); + + assertEquals(1, org.orgNumber()); + } + @Test void constructor_ThrowsWhenOrgNumberIsNegative() { - assertThrows(IllegalArgumentException.class, () -> {new Organization( + assertThrows(IllegalArgumentException.class, () -> new Organization( -1, "Org", true, null, true, "Org description" - ); - }); + )); } @Test void constructor_ThrowsWhenNameIsNull() { - assertThrows(NullPointerException.class, () -> {new Organization( + assertThrows(NullPointerException.class, () -> new Organization( 1, null, true, "org.com", true, "Org description" - ); - }); + )); } @Test void constructor_ThrowsWhenNameIsBlank() { - assertThrows(IllegalArgumentException.class, () -> {new Organization( + assertThrows(IllegalArgumentException.class, () -> new Organization( 1, "", true, "org.com", true, "Org description" - ); - }); + )); } @Test void constructor_ThrowsWhenWebsiteURLIsNull() { - assertThrows(NullPointerException.class, () -> {new Organization( + assertThrows(NullPointerException.class, () -> new Organization( 1, "Org", true, null, true, "Org description" - ); - }); + )); } @Test void constructor_ThrowsWhenWebsiteURLIsBlank() { - assertThrows(IllegalArgumentException.class, () -> {new Organization( + assertThrows(IllegalArgumentException.class, () -> new Organization( 1, "Org", true, "", true, "Org description" - ); - }); + )); } @Test void constructor_ThrowsWhenDescriptionIsNull() { - assertThrows(NullPointerException.class, () -> {new Organization( + assertThrows(NullPointerException.class, () -> new Organization( 1, "Org", true, "org.com", true, null - ); - }); + )); } } \ No newline at end of file From ee4a9cadfc9a94dbf3c3b0c01137aaee2b724560 Mon Sep 17 00:00:00 2001 From: emilfa Date: Sun, 1 Mar 2026 14:42:00 +0100 Subject: [PATCH 09/14] test: created tests for the OrganizationRepository --- .../organization/OrganizationRepoTest.java | 4 -- .../OrganizationRepositoryTest.java | 57 +++++++++++++++++++ 2 files changed, 57 insertions(+), 4 deletions(-) delete mode 100644 src/test/java/edu/group5/app/model/organization/OrganizationRepoTest.java create mode 100644 src/test/java/edu/group5/app/model/organization/OrganizationRepositoryTest.java diff --git a/src/test/java/edu/group5/app/model/organization/OrganizationRepoTest.java b/src/test/java/edu/group5/app/model/organization/OrganizationRepoTest.java deleted file mode 100644 index 780bf8e..0000000 --- a/src/test/java/edu/group5/app/model/organization/OrganizationRepoTest.java +++ /dev/null @@ -1,4 +0,0 @@ -import static org.junit.jupiter.api.Assertions.*; -class OrganizationRepoTest { - -} \ No newline at end of file diff --git a/src/test/java/edu/group5/app/model/organization/OrganizationRepositoryTest.java b/src/test/java/edu/group5/app/model/organization/OrganizationRepositoryTest.java new file mode 100644 index 0000000..3249078 --- /dev/null +++ b/src/test/java/edu/group5/app/model/organization/OrganizationRepositoryTest.java @@ -0,0 +1,57 @@ +package edu.group5.app.model.organization; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.HashMap; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; + +class OrganizationRepositoryTest { + + private Map content; + private Organization trustedOrganization1; + private Organization trustedOrganization2; + private Organization untrustedOrganization1; + private Organization untrustedOrganization2; + private OrganizationRepository repository; + + @BeforeEach + void setUp() { + content = new HashMap<>(); + + trustedOrganization1 = + new Organization(1, "Trusted Org1", true, "org.com", true, "description"); + trustedOrganization2 = + new Organization(2, "Trusted Org2", true, "org.com", true, "description"); + untrustedOrganization1 = + new Organization(3, "Untrusted Org1", false, "org.com", true, "description"); + untrustedOrganization2 = + new Organization(4, "Untrusted Org2", false, "org.com", true, "description"); + + content.put(1, trustedOrganization1); + content.put(2, trustedOrganization2); + content.put(3, untrustedOrganization1); + content.put(4, untrustedOrganization2); + + repository = new OrganizationRepository(content); + } + + @Test + void constructor_ThrowsWhenContentIsNull() { + assertThrows(NullPointerException.class, () -> new OrganizationRepository(null)); + } + + @Test + void getTrustedOrganizations_OnlyReturnsTrustedOrganizations() { + Map trusted = repository.getTrustedOrganizations(); + + assertEquals(2, trusted.size()); + assertTrue(trusted.containsKey(1)); + assertTrue(trusted.containsKey(2)); + assertFalse(trusted.containsKey(3)); + assertFalse(trusted.containsKey(4)); + assertTrue(trusted.values().stream().allMatch(Organization::trusted)); + } +} \ No newline at end of file From e2c0f1a25e0a3b658033787603101dc9ce70b0f8 Mon Sep 17 00:00:00 2001 From: emilfa Date: Sun, 1 Mar 2026 14:42:47 +0100 Subject: [PATCH 10/14] refactor: minor changes to OrganizationRepository --- .../organization/OrganizationRepository.java | 28 +++++++++++++------ 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/src/main/java/edu/group5/app/model/organization/OrganizationRepository.java b/src/main/java/edu/group5/app/model/organization/OrganizationRepository.java index 27b128f..a9e5bb6 100644 --- a/src/main/java/edu/group5/app/model/organization/OrganizationRepository.java +++ b/src/main/java/edu/group5/app/model/organization/OrganizationRepository.java @@ -3,38 +3,48 @@ import edu.group5.app.model.Repository; import java.util.HashMap; +import java.util.Map; import java.util.Objects; /** - * Handles business logic associated with organizations + * Handles the business logic associated with organizations */ -public class OrganizationRepo extends Repository { - private final HashMap content; +public class OrganizationRepository extends Repository { + private final Map content; /** * Creates a new Organization Repository * - * @param content holds all current organizations in the repository + * @param content holds all current organizations in the repository; must not be null * @throws NullPointerException if content is null */ - public OrganizationRepo(HashMap content) { + public OrganizationRepository(Map content) { this.content = Objects.requireNonNull(content, "content cannot be null"); super(content); } + /** + * Returns the organizations within the repository. + * @return all organizations within the repository. + */ + @Override + public Map getContent() { + return content; + } + /** * Gets all trusted organizations in the repository * @return all organizations with trusted = true */ - public HashMap getTrustedOrganizations() { - HashMap trustedOrgs = new HashMap<>(); + public Map getTrustedOrganizations() { + Map trustedOrganizations = new HashMap<>(); content.forEach((orgNr, org) -> { if (org.trusted()) { - trustedOrgs.put(orgNr, org); + trustedOrganizations.put(orgNr, org); } }); - return trustedOrgs; + return trustedOrganizations; } } From 7f88fa1876e87bc9874fc3066a6212e3303dfcfd Mon Sep 17 00:00:00 2001 From: emilfa Date: Sun, 1 Mar 2026 16:04:39 +0100 Subject: [PATCH 11/14] refactor: minor changes to OrganizationRepositoryTest --- .../OrganizationRepositoryTest.java | 21 ++++++------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/src/test/java/edu/group5/app/model/organization/OrganizationRepositoryTest.java b/src/test/java/edu/group5/app/model/organization/OrganizationRepositoryTest.java index 3249078..3a3392e 100644 --- a/src/test/java/edu/group5/app/model/organization/OrganizationRepositoryTest.java +++ b/src/test/java/edu/group5/app/model/organization/OrganizationRepositoryTest.java @@ -10,25 +10,16 @@ class OrganizationRepositoryTest { - private Map content; - private Organization trustedOrganization1; - private Organization trustedOrganization2; - private Organization untrustedOrganization1; - private Organization untrustedOrganization2; private OrganizationRepository repository; @BeforeEach void setUp() { - content = new HashMap<>(); - - trustedOrganization1 = - new Organization(1, "Trusted Org1", true, "org.com", true, "description"); - trustedOrganization2 = - new Organization(2, "Trusted Org2", true, "org.com", true, "description"); - untrustedOrganization1 = - new Organization(3, "Untrusted Org1", false, "org.com", true, "description"); - untrustedOrganization2 = - new Organization(4, "Untrusted Org2", false, "org.com", true, "description"); + Map content = new HashMap<>(); + + Organization trustedOrganization1 = new Organization(1, "Trusted Org1", true, "org.com", true, "description"); + Organization trustedOrganization2 = new Organization(2, "Trusted Org2", true, "org.com", true, "description"); + Organization untrustedOrganization1 = new Organization(3, "Untrusted Org1", false, "org.com", true, "description"); + Organization untrustedOrganization2 = new Organization(4, "Untrusted Org2", false, "org.com", true, "description"); content.put(1, trustedOrganization1); content.put(2, trustedOrganization2); From 23c7524e507a0379ffd0dbfebaf3d83ccda0653e Mon Sep 17 00:00:00 2001 From: emilfa Date: Tue, 3 Mar 2026 13:39:27 +0100 Subject: [PATCH 12/14] refactor: made Repository use generics instead of Object type --- src/main/java/edu/group5/app/model/Repository.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/edu/group5/app/model/Repository.java b/src/main/java/edu/group5/app/model/Repository.java index d0d2792..6850bfe 100644 --- a/src/main/java/edu/group5/app/model/Repository.java +++ b/src/main/java/edu/group5/app/model/Repository.java @@ -1,12 +1,14 @@ package edu.group5.app.model; +import java.util.Map; + /** * Represents a repository */ -public abstract class Repository { - protected final Object content; +public abstract class Repository { + protected final Map content; - public Repository(Object content) { + public Repository(Map content) { this.content = content; } @@ -14,7 +16,7 @@ public Repository(Object content) { * Gets the content of the repo * @return content of the repo */ - public Object getContent() { + public Map getContent() { return content; } } From 662c4cee9832fb55e09a60e49ba6b18790564baa Mon Sep 17 00:00:00 2001 From: emilfa Date: Tue, 3 Mar 2026 13:40:17 +0100 Subject: [PATCH 13/14] refactor: made OrganizationRepository consistent with Repository --- .../organization/OrganizationRepository.java | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/src/main/java/edu/group5/app/model/organization/OrganizationRepository.java b/src/main/java/edu/group5/app/model/organization/OrganizationRepository.java index a9e5bb6..14a77d0 100644 --- a/src/main/java/edu/group5/app/model/organization/OrganizationRepository.java +++ b/src/main/java/edu/group5/app/model/organization/OrganizationRepository.java @@ -9,9 +9,7 @@ /** * Handles the business logic associated with organizations */ -public class OrganizationRepository extends Repository { - private final Map content; - +public class OrganizationRepository extends Repository { /** * Creates a new Organization Repository * @@ -19,17 +17,7 @@ public class OrganizationRepository extends Repository { * @throws NullPointerException if content is null */ public OrganizationRepository(Map content) { - this.content = Objects.requireNonNull(content, "content cannot be null"); - super(content); - } - - /** - * Returns the organizations within the repository. - * @return all organizations within the repository. - */ - @Override - public Map getContent() { - return content; + super(Objects.requireNonNull(content, "content cannot be null")); } /** From 81a0a4372a23fd1cc496b72b714798f6c81b87ae Mon Sep 17 00:00:00 2001 From: emilfa Date: Tue, 3 Mar 2026 13:57:54 +0100 Subject: [PATCH 14/14] refactor: made the positive test for Organization more robust --- .../app/model/organization/Organization.java | 10 +++- .../model/organization/OrganizationTest.java | 55 ++++++++++++------- 2 files changed, 43 insertions(+), 22 deletions(-) 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 885f0ed..941ed5a 100644 --- a/src/main/java/edu/group5/app/model/organization/Organization.java +++ b/src/main/java/edu/group5/app/model/organization/Organization.java @@ -15,8 +15,14 @@ *
  • description must not be null
  • * */ -public record Organization(int orgNumber, String name, boolean trusted, String websiteURL, boolean isPreApproved, - String description) { +public record Organization( + int orgNumber, + String name, + boolean trusted, + String websiteURL, + boolean isPreApproved, + String description +) { /** * Creates a new organization. * diff --git a/src/test/java/edu/group5/app/model/organization/OrganizationTest.java b/src/test/java/edu/group5/app/model/organization/OrganizationTest.java index 3b086c3..7f1b898 100644 --- a/src/test/java/edu/group5/app/model/organization/OrganizationTest.java +++ b/src/test/java/edu/group5/app/model/organization/OrganizationTest.java @@ -5,82 +5,97 @@ import static org.junit.jupiter.api.Assertions.*; class OrganizationTest { - + + @Test + void constructor_CreatesAnOrganizationWhenInputIsValid() { + Organization org = new Organization( + 1, + "Org", + true, + "org.com", + true, + "Org description" + ); + + assertAll( + () -> assertEquals(1, org.orgNumber()), + () -> assertEquals("Org", org.name()), + () -> assertTrue(org.trusted()), + () -> assertEquals("org.com", org.websiteURL()), + () -> assertTrue(org.isPreApproved()), + () -> assertEquals("Org description", org.description()) + ); + } + @Test void constructor_ThrowsWhenOrgNumberIsNegative() { - assertThrows(IllegalArgumentException.class, () -> {new Organization( + assertThrows(IllegalArgumentException.class, () -> new Organization( -1, "Org", true, - null, + "org.com", true, "Org description" - ); - }); + )); } @Test void constructor_ThrowsWhenNameIsNull() { - assertThrows(NullPointerException.class, () -> {new Organization( + assertThrows(NullPointerException.class, () -> new Organization( 1, null, true, "org.com", true, "Org description" - ); - }); + )); } @Test void constructor_ThrowsWhenNameIsBlank() { - assertThrows(IllegalArgumentException.class, () -> {new Organization( + assertThrows(IllegalArgumentException.class, () -> new Organization( 1, "", true, "org.com", true, "Org description" - ); - }); + )); } @Test void constructor_ThrowsWhenWebsiteURLIsNull() { - assertThrows(NullPointerException.class, () -> {new Organization( + assertThrows(NullPointerException.class, () -> new Organization( 1, "Org", true, null, true, "Org description" - ); - }); + )); } @Test void constructor_ThrowsWhenWebsiteURLIsBlank() { - assertThrows(IllegalArgumentException.class, () -> {new Organization( + assertThrows(IllegalArgumentException.class, () -> new Organization( 1, "Org", true, "", true, "Org description" - ); - }); + )); } @Test void constructor_ThrowsWhenDescriptionIsNull() { - assertThrows(NullPointerException.class, () -> {new Organization( + assertThrows(NullPointerException.class, () -> new Organization( 1, "Org", true, "org.com", true, null - ); - }); + )); } } \ No newline at end of file