Skip to content

Commit

Permalink
update&test[Organization]: Update JUnit tests with new features regar…
Browse files Browse the repository at this point in the history
…ding OrganizationPage
  • Loading branch information
Fredrik Marjoni committed Apr 8, 2026
1 parent a2a087b commit 456a1d6
Show file tree
Hide file tree
Showing 4 changed files with 134 additions and 26 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package edu.group5.app.model.donation;

import edu.group5.app.model.organization.OrganizationRepository;
import edu.group5.app.model.organization.OrganizationScraper;
import edu.group5.app.model.user.Customer;

import org.junit.jupiter.api.BeforeEach;
Expand All @@ -21,18 +22,20 @@ class DonationServiceTest {
private OrganizationRepository organizationRepository;
private DonationService donationService;
private Customer customer;
private OrganizationScraper scraper;

@BeforeEach
void setUp() {
scraper = new OrganizationScraper();
HashMap<String, Object> orgMap = new HashMap<>();
orgMap.put("org_number", "101");
orgMap.put("org_number", "101");
orgMap.put("name", "CharityOrg");
orgMap.put("status", "approved");
orgMap.put("status", "approved");
orgMap.put("url", "https://charity.org");
orgMap.put("is_pre_approved", true);
orgMap.put("is_pre_approved", true);

Object[] orgInput = new Object[]{ orgMap };
organizationRepository = new OrganizationRepository(orgInput);
organizationRepository = new OrganizationRepository(orgInput, scraper);

donationRepository = new DonationRepository(new ArrayList<>());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,11 @@
class OrganizationRepositoryTest {

private OrganizationRepository repository;
private OrganizationScraper scraper;

@BeforeEach
void setUp() {
scraper = new OrganizationScraper();
Object[] content = new Object[] {
Map.of(
"org_number", "1",
Expand Down Expand Up @@ -43,13 +45,13 @@ void setUp() {
"is_pre_approved", true
)
};
repository = new OrganizationRepository(content);
repository = new OrganizationRepository(content, scraper);
}

private void constructorTest(Object[] input, String expectedMessage) {
IllegalArgumentException exception = assertThrows(
IllegalArgumentException.class,
() -> new OrganizationRepository(input)
() -> new OrganizationRepository(input, scraper)
);
assertEquals(expectedMessage, exception.getMessage());
}
Expand All @@ -58,6 +60,24 @@ void constructor_ThrowsWhenContentIsNull() {
constructorTest(null, "The input cannot be null");
}

@Test
void constructor_ThrowsWhenScraperIsNull() {
Object[] content = new Object[] {
Map.of(
"org_number", "1",
"name", "Org",
"status", "approved",
"url", "org.com",
"is_pre_approved", true
)
};
IllegalArgumentException exception = assertThrows(
IllegalArgumentException.class,
() -> new OrganizationRepository(content, null)
);
assertEquals("The scraper cannot be null", exception.getMessage());
}

@Test
void getTrustedOrganizations_OnlyReturnsTrustedOrganizations() {
Map<Integer, Organization> trusted = repository.getTrustedOrganizations();
Expand Down Expand Up @@ -128,7 +148,7 @@ void testExportAllOrganizations() {

@Test
void testExportAllOrganizationsThrowsWhenRepositoryIsEmpty() {
OrganizationRepository emptyRepo = new OrganizationRepository(new Object[0]);
OrganizationRepository emptyRepo = new OrganizationRepository(new Object[0], scraper);
IllegalStateException exception = assertThrows(
IllegalStateException.class, () -> emptyRepo.export()
);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package edu.group5.app.model.organization;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;

class OrganizationScraperTest {

private OrganizationScraper scraper;

@BeforeEach
void setUp() {
scraper = new OrganizationScraper();
}

@Test
void fetchDescription_ReturnsNullWhenUrlIsNull() {
assertNull(scraper.fetchDescription(null));
}

@Test
void fetchDescription_ReturnsNullWhenUrlIsBlank() {
assertNull(scraper.fetchDescription(""));
}

@Test
void fetchDescription_ReturnsNullWhenUrlIsInvalid() {
String result = scraper.fetchDescription("https://invalid-url-that-does-not-exist-xyz123.com");
assertNull(result);
}

@Test
void fetchDescription_CachesResultOnSecondCall() {
// Mock URLs won't work, but cache still works with null returns
scraper.fetchDescription("https://example.com");
scraper.fetchDescription("https://example.com");
// If no exception thrown, cache works
assertTrue(true);
}

@Test
void fetchLogoUrl_ReturnsNullWhenUrlIsNull() {
assertNull(scraper.fetchLogoUrl(null));
}

@Test
void fetchLogoUrl_ReturnsNullWhenUrlIsBlank() {
assertNull(scraper.fetchLogoUrl(""));
}

@Test
void fetchLogoUrl_ReturnsNullWhenUrlIsInvalid() {
String result = scraper.fetchLogoUrl("https://invalid-url-that-does-not-exist-xyz123.com");
assertNull(result);
}

@Test
void fetchLogoUrl_CachesResultOnSecondCall() {
// Mock URLs won't work, but cache still works with null returns
scraper.fetchLogoUrl("https://example.com");
scraper.fetchLogoUrl("https://example.com");
// If no exception thrown, cache works
assertTrue(true);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,17 @@

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.CompletableFuture;

public class OrganizationServiceTest {
private OrganizationRepository repo;
private OrganizationService service;
private OrganizationScraper scraper;
private Object[] content;

@BeforeEach
public void setUp() {
scraper = new OrganizationScraper();
Map<String, Object> orgMap = new HashMap<>();
orgMap.put("org_number", "1");
orgMap.put("name", "Misjonsalliansen");
Expand All @@ -22,22 +25,52 @@ public void setUp() {
orgMap.put("is_pre_approved", false);

content = new Object[]{orgMap};
repo = new OrganizationRepository(content);
service = new OrganizationService(repo);
repo = new OrganizationRepository(content, scraper);
service = new OrganizationService(repo, scraper);
}

@Test
void constructor_throwsIfNull() {
void constructor_throwsIfRepositoryIsNull() {
IllegalArgumentException ex = assertThrows(IllegalArgumentException.class,
() -> new OrganizationService(null));
() -> new OrganizationService(null, scraper));
assertEquals("OrganizationRepository cannot be null", ex.getMessage());
}

@Test
void constructor_throwsIfScraperIsNull() {
IllegalArgumentException ex = assertThrows(IllegalArgumentException.class,
() -> new OrganizationService(repo, null));
assertEquals("OrganizationScraper cannot be null", ex.getMessage());
}

@Test
void testGetOrganizationRepository() {
assertEquals(repo, service.getOrganizationRepository());
}

@Test
void testGetTrustedOrganizationsWithLogos() {
Map<Integer, Organization> orgsWithLogos = service.getTrustedOrganizationsWithLogos();
assertNotNull(orgsWithLogos);
assertTrue(orgsWithLogos.containsKey(1));
Organization org = orgsWithLogos.get(1);
assertEquals(1, org.orgNumber());
assertEquals("Misjonsalliansen", org.name());
assertNotNull(org);
}

@Test
void testGetTrustedOrganizationsWithLogosAsync() throws Exception {
CompletableFuture<Map<Integer, Organization>> futureOrgs =
service.getTrustedOrganizationsWithLogosAsync();

assertNotNull(futureOrgs);
Map<Integer, Organization> orgsWithLogos = futureOrgs.get();
assertNotNull(orgsWithLogos);
assertTrue(orgsWithLogos.containsKey(1));
assertEquals("Misjonsalliansen", orgsWithLogos.get(1).name());
}

@Test
void testGetTrustedOrganizations() {
Map<Integer, Organization> trustedOrgs = service.getTrustedOrganizations();
Expand Down Expand Up @@ -67,19 +100,5 @@ void testFindByOrgName() {
assertEquals(1, org.orgNumber());
assertEquals("Misjonsalliansen", org.name());
}

@Test
void fetchLogoUrlReturnsNullWhenUrlIsNull() {
assertNull(service.fetchLogoUrl(null));
}
@Test
void fetchLogoUrlReturnsNullWhenUrlIsBlank() {
assertNull(service.fetchLogoUrl(""));
}
@Test
void fetchLogoUrlCachesResultOnSecondCall() {
String result1 = service.fetchLogoUrl("https://");
String result2 = service.fetchLogoUrl("https://");
assertEquals(result1, result2);
}
}

0 comments on commit 456a1d6

Please sign in to comment.