From d3dd369e440b55c28b309b76635cb925550c3970 Mon Sep 17 00:00:00 2001 From: Lucy Ciara Herud-Thomassen <86323303+LucyCiara@users.noreply.github.com> Date: Thu, 26 Feb 2026 09:47:41 +0100 Subject: [PATCH 01/15] chore: remove unnecessary folders --- .vscode/settings.json | 3 --- target/classes/edu/group5/app/App.class | Bin 543 -> 0 bytes .../classes/edu/group5/app/control/Wrapper.class | Bin 292 -> 0 bytes .../edu/group5/app/model/donation/Donation.class | Bin 309 -> 0 bytes .../app/model/organization/Organization.class | Bin 329 -> 0 bytes .../classes/edu/group5/app/model/user/User.class | Bin 289 -> 0 bytes .../classes/edu/group5/app/utils/Utilities.class | Bin 294 -> 0 bytes target/classes/edu/group5/app/view/View.class | Bin 277 -> 0 bytes .../compile/default-compile/createdFiles.lst | 1 - .../compile/default-compile/inputFiles.lst | 1 - target/test-classes/edu/group5/app/AppTest.class | Bin 503 -> 0 bytes 11 files changed, 5 deletions(-) delete mode 100644 .vscode/settings.json delete mode 100644 target/classes/edu/group5/app/App.class delete mode 100644 target/classes/edu/group5/app/control/Wrapper.class delete mode 100644 target/classes/edu/group5/app/model/donation/Donation.class delete mode 100644 target/classes/edu/group5/app/model/organization/Organization.class delete mode 100644 target/classes/edu/group5/app/model/user/User.class delete mode 100644 target/classes/edu/group5/app/utils/Utilities.class delete mode 100644 target/classes/edu/group5/app/view/View.class delete mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst delete mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst delete mode 100644 target/test-classes/edu/group5/app/AppTest.class diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index dc3b895..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "java.configuration.updateBuildConfiguration": "interactive" -} \ No newline at end of file diff --git a/target/classes/edu/group5/app/App.class b/target/classes/edu/group5/app/App.class deleted file mode 100644 index e3679e1b8be800f5bef6f802b19397fadbe36584..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 543 zcmZuu%SyvQ6g|^d9!6XH@~y3_)`eM#i;5tkxCkm#>cZ8u9paQE6VgQRvvi^0!VmDH z#G6*A#S%Do?!9x)J#+K*{qYIl0{a>=3}rD)Y&TL#cx3Z1w9mp&Lyn;|;!oW6c;MPM z{gD{N422UJ$oP~Y+iLe1a_4F&Ok`nL$fLkebYvi|6TdH_JKpyMi92e*y&jKbn*SDa z@uM6wRGt5mJEZD!88Fma56;X%H;!cBcG^7ytEgxw&-v>&RR63emm)S(Z+Lm_;K zxyx^Vwru~tTz~%nEYT0)5e8~si-R?FITNxhMP`c1nq2HGld>UvLjNScq{wA)5bN}$ zvWn1r)rGF!2#xV%OYj$FuOc+ijuD_q=q0*P@AYS@?1xNqMR-n3CiAVd+VP|4S4Vv& z43qy|%n8xP)HYKq?RLcvcQ4KuMqnHK5;&4O&l)m`I|IS=2d!@|c!*eC8$8fqjqiED M@rjAhW%baz0k+0J=l}o! diff --git a/target/classes/edu/group5/app/model/donation/Donation.class b/target/classes/edu/group5/app/model/donation/Donation.class deleted file mode 100644 index 687d00e7e82e816b337c9de3a13b0be79dc8c689..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 309 zcma)%F>b;@5JmqO8-oJ@aRV9z6xk|OqBJC_EGR(qYkLKY%&ui@?nM=eA_vH!B4!cv zG=Jv*(Tv{w{hxmUe4!u0BaBp5i%n_k;#J6^5PO@cTx8bBN?Rj7Z%qiF(BH|U6uC4T zu}F3*tq9F`ZFKcPXpARofu|D>)9hH7#OlW2g(ud| OwGX&<*%6*uJ@hV=jz&NL diff --git a/target/classes/edu/group5/app/model/organization/Organization.class b/target/classes/edu/group5/app/model/organization/Organization.class deleted file mode 100644 index af118ddfe1be2c754d3f950677451cf175401840..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 329 zcmb7pP5!g$MX ztZKHES{7SfwuJt@v8H_>^rly9LOho<8G1M!AVHrn%8k`e-LBC7nTuKzE^}9My=HF$ z{}1E##k>-3^5d-T2-(VYzSNH<+`c$eo&{S>Aa3$+NTuK;nF^^r1IhI#PCjH1A(ITx TkcBhJ!M;zVo(mC%k`YFK{nk$L diff --git a/target/classes/edu/group5/app/model/user/User.class b/target/classes/edu/group5/app/model/user/User.class deleted file mode 100644 index 950b2f7160ec2652685a7081f89e90b9a1c868d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 289 zcmaKnziz@n48}i)gh2SKJ^+FZ7&Fi?9d4yLf>n~-HG&c$A3!d{dSTSf?<&_Bs9DKeQK#5y^t zv?A0$bgruzp*EiE2>zVMBGk}qBS4+di*>G6_M9lQkx8ZqFL9B|Y$uI&`mg9$M|~j- zd+tqZ|UY#q9z#jM?a3pt|8L|>j4FuC08dolOh?uSo9%wP!&phDR KVMXXNJ@g(l06rT4 diff --git a/target/classes/edu/group5/app/utils/Utilities.class b/target/classes/edu/group5/app/utils/Utilities.class deleted file mode 100644 index 9fb7579e2b9762b92ce78ed4e63a7b77762bc6e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 294 zcmaKn!A`n9|(W*}&TQ+TskT6{9Z>F(|qWxFoc`5%5|~O4g35%4DA=U zguC>Ai)TVIuUwOxH}Y4I_w%dYRb-afgeo3<4xV{|s5U6!y=3 NB=t&?oE8QcoB)e9K-&NS diff --git a/target/classes/edu/group5/app/view/View.class b/target/classes/edu/group5/app/view/View.class deleted file mode 100644 index bc21f75c019877955f50631d6137819bf7288900..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 277 zcmZ{fJ&wXa427RVLLmH#3enL41ygOcXdA><5fq^GlQ4ooA&IgHoQrBD3J$=bR(PUq zX+HbevY-9@yFUP|(05@GhH77mL!Oq|hmct&E?Qkhz;Iy``X_mjB9_TPY{HX@3POFM z6J2}}YLjU|u$Spxd8nb;hJ!kx=j%kR%X6smoeX0|82D)<<3Q%x=>MW!9Q6-j)!&6cJ)YHseq80^kJfFl`KrproH8gOR6XxzA9!DE^>c%a2>SGmKn!-~*l HTIjt1jj%a; diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst deleted file mode 100644 index 28e9804..0000000 --- a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ /dev/null @@ -1 +0,0 @@ -edu\group5\app\App.class diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst deleted file mode 100644 index 16a5464..0000000 --- a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ /dev/null @@ -1 +0,0 @@ -C:\Users\marjo\Documents\Github\Help-Me-Help\src\main\java\edu\group5\app\App.java diff --git a/target/test-classes/edu/group5/app/AppTest.class b/target/test-classes/edu/group5/app/AppTest.class deleted file mode 100644 index 4c6649954e613037560eadfde5c4dcaf50c01019..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 503 zcmZutO-sW-6r4@dMq{)e*4lyxy;Tq9Af75h5IqG2Efu_N+oj!-?uN}qf0rl4gFnC@ zCBCEuFTK3k_vSHgXMTRaz5(2#=fPp_S@i3n zYv(d!=*F9`4;b3nT<6I&QrVj@&(h9^CMUJtW3H@RijmAD$wf+O%dOOk)Q)0pX5k{I z4^mB~6^1Oyu<$eR(L&q9KEv_mttiWcDU|{opu^zva&m$Xl{paCB{RD;z5;VyLyd&D}ZueTb6h0p~t YrI7oH=D(0nt3VSj8QdgxNUVeIAF#x0fB*mh From 8f1ffa67c8b6802e8d9da1e515aae3eca8e12b1a Mon Sep 17 00:00:00 2001 From: Lucy Ciara Herud-Thomassen <86323303+LucyCiara@users.noreply.github.com> Date: Thu, 26 Feb 2026 10:08:02 +0100 Subject: [PATCH 02/15] update[gitignore]: add .vscode/ and target/ to gitignore --- .gitignore | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.gitignore b/.gitignore index bee94ec..48a9ee7 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ *.war *.ear *.nar +target/ ############################## ## Maven @@ -37,3 +38,8 @@ out/ ############################## *.db *.DS_Store + +############################## +## VSCode +############################## +.vscode/ From 35f6a167d4f084fcfc7a16668472e2e072611f8e Mon Sep 17 00:00:00 2001 From: Lucy Ciara Herud-Thomassen <86323303+LucyCiara@users.noreply.github.com> Date: Thu, 26 Feb 2026 11:05:10 +0100 Subject: [PATCH 03/15] update: remove unnecessary workflow steps causing issues, and re-add release branches to workflow --- .github/workflows/main.yaml | 24 ++---------------------- 1 file changed, 2 insertions(+), 22 deletions(-) diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index 9ad367c..3dbf59e 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -4,6 +4,7 @@ on: push: branches: - main + - release/* workflow_dispatch: # Allows manual triggering of the workflow @@ -33,16 +34,6 @@ jobs: java-version: '25' - name: Run Tests run: mvn clean test - - name: Upload Test Results - uses: actions/upload-artifact@v3 - with: - name: surefire-reports - path: target/surefire-reports/ - - name: Upload Coverage Report - uses: actions/upload-artifact@v3 - with: - name: jacoco-report - path: target/jacoco/coverage-reports/jacoco.xml package: name: Package @@ -62,15 +53,4 @@ jobs: name: packaged-app path: target/Help-Me-Help-1.0-SNAPSHOT-jar-with-dependencies.jar - deployPages: - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - runs-on: self-hosted - steps: - - uses: actions/checkout@v3 - - name: Set up JDK - uses: actions/setup-java@v3 - with: - distribution: 'temurin' - java-version: '25' + From 76e620f7cd2582413d39aea6d37310f65f5298c9 Mon Sep 17 00:00:00 2001 From: emilfa Date: Thu, 26 Feb 2026 11:15:16 +0100 Subject: [PATCH 04/15] 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 4ff8f418b84cf89e031ec43e2b61a787127b2be4 Mon Sep 17 00:00:00 2001 From: Fredrik Marjoni Date: Thu, 26 Feb 2026 11:34:41 +0100 Subject: [PATCH 05/15] feat: add correct dependencies and plugins in pom.xml --- .vscode/settings.json | 3 + pom.xml | 161 ++++++++---------- target/classes/edu/group5/app/App.class | Bin 543 -> 543 bytes .../test-classes/edu/group5/app/AppTest.class | Bin 503 -> 503 bytes 4 files changed, 78 insertions(+), 86 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..dc3b895 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "java.configuration.updateBuildConfiguration": "interactive" +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 9be90b9..4d088c4 100644 --- a/pom.xml +++ b/pom.xml @@ -1,103 +1,92 @@ + 4.0.0 edu.group5.app Help-Me-Help 1.0-SNAPSHOT - Help-Me-Help - - http://www.example.com + https://git.ntnu.no/Group-5/Help-Me-Help - UTF-8 - 25 - + UTF-8 + 25 + 25.0.1 + 6.0.1 + - - - org.junit - junit-bom - 5.11.0 - pom - import - + + + org.junit.jupiter + junit-jupiter + ${junit.version} + test + + + + + org.openjfx + javafx-controls + ${javafx.version} + + + + + org.springframework.security + spring-security-crypto + 7.0.2 + - - - - org.junit.jupiter - junit-jupiter-api - test - - - - org.junit.jupiter - junit-jupiter-params - test - - - org.openjfx - javafx-controls - 25.0.1 - - + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.14.1 + + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.5.4 + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.4.2 + + + + edu.group5.app.App + + + + + + + + org.openjfx + javafx-maven-plugin + 0.0.8 + + edu.group5.app.App + + - - - - - - maven-clean-plugin - 3.4.0 - - - - maven-resources-plugin - 3.3.1 - - - maven-compiler-plugin - 3.13.0 - - - maven-surefire-plugin - 3.3.0 - - - maven-jar-plugin - 3.4.2 - - - maven-install-plugin - 3.1.2 - - - maven-deploy-plugin - 3.1.2 - - - - maven-site-plugin - 3.12.1 - - - maven-project-info-reports-plugin - 3.6.1 - - - org.openjfx - javafx-maven-plugin - 0.0.8 - - edu.group5.app.App - - - - - + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.12.0 + + + diff --git a/target/classes/edu/group5/app/App.class b/target/classes/edu/group5/app/App.class index c24ab2785e980a5735ae85d7eb8f51f23e9eca54..e3679e1b8be800f5bef6f802b19397fadbe36584 100644 GIT binary patch delta 295 zcmYLCJ8r^I5S%q8kLMV|pZoyhlEwu^(npa}A}CNwOFTtH4wj4+DHUgU;s9JAO(;O3 z-~eQSP<|f8d$6jlQ_T<0)bFs8IsU^ z&`(-rdOT45=f~2Fs-O5|l_0N8mgVtXUSw%6L=)=*kwgm{gjU@%%+*aX9GCsFFnTmS zrlc#-CPXHks6mlW?5Wb$s!MAL{#Blu>fTIm>HKArXL8R2xv7{P&J;)D*f{zCz1H#; z)5(t8OgaC69qe)zU=RCTam{D78Q0z*qLp{7{TsLofS2aA=O*piCBOl?ED&O*hu$C6 Ci!Dt6 diff --git a/target/test-classes/edu/group5/app/AppTest.class b/target/test-classes/edu/group5/app/AppTest.class index 7f3006a1c9f7ef09dffeff2b6cd7fb41eeb5bd4a..4c6649954e613037560eadfde5c4dcaf50c01019 100644 GIT binary patch delta 257 zcmZvWzYf7*6vfZ&A0J;^)Sp%t8WR?S(J0J~-ENPi}g{Gs$E0~DE19%~uxL-*u z?r=_S&bhzbr~cHP$Ln?nFhwAsrH4QlFjBwk5{$`a9ZBdY*)UN^Pe)6lhK4|$5N08H z=~4zZn(zp6l_XKToyEI|FMEsrJR4JIPkgRM11Scp;BClG?B?Kt;yI5ctBL^$i`D)V n*d5*oWll9zzO5>|0*yGyLBuM??0N)v4++gV=5VK delta 249 zcmYL@y$%6E6ot?1&Kkz7f7Ui6G*+Wfipnd9LNpRvOLnO}!$j#RR7BwcywG;IGn;UW zb8~X;`DQXVbA#9W@dPkODB-{r;0hiJIvV&AMU(`jLK#Ybh5>`zrfHlUmdP<@;G=c4 z5~yfD6yz5BU92~k^NjURKC#R=V1`CoB{!kXXnW%u*ww~0QWFCbbyAfdpn)bih8Crc jElY)1t8qgT3 From 1a8b908533d2571b7100f66270a5162d6c3cbc89 Mon Sep 17 00:00:00 2001 From: Lucy Ciara Herud-Thomassen Date: Thu, 26 Feb 2026 11:52:50 +0100 Subject: [PATCH 06/15] fix[pom]: remove artifacts from merge conflict that was improperly removed --- pom.xml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/pom.xml b/pom.xml index 1873d07..b0f6764 100644 --- a/pom.xml +++ b/pom.xml @@ -32,16 +32,12 @@ javafx-controls ${javafx.version} -<<<<<<< HEAD - org.springframework.security spring-security-crypto 7.0.2 -======= ->>>>>>> main From 98b995bf787af59c7f73c54b8716b1272014ca45 Mon Sep 17 00:00:00 2001 From: emilfa Date: Thu, 26 Feb 2026 11:53:56 +0100 Subject: [PATCH 07/15] 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 08/15] 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 09/15] 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 10/15] 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 11/15] 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 12/15] 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 13/15] 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 14/15] 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 15/15] 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")); } /**