diff --git a/src/main/java/edu/group5/app/model/organization/OrganizationScraper.java b/src/main/java/edu/group5/app/model/organization/OrganizationScraper.java index fdeec82..ad93736 100644 --- a/src/main/java/edu/group5/app/model/organization/OrganizationScraper.java +++ b/src/main/java/edu/group5/app/model/organization/OrganizationScraper.java @@ -31,7 +31,7 @@ public class OrganizationScraper { * @return the description text, or null if not found or pageUrl is invalid */ public String fetchDescription(String pageUrl) { - if (descriptionCache.containsKey(pageUrl)) { + if (pageUrl != null && descriptionCache.containsKey(pageUrl)) { return descriptionCache.get(pageUrl); } @@ -80,7 +80,7 @@ public String fetchDescription(String pageUrl) { * @return the absolute logo URL, or null if not found or pageUrl is invalid */ public String fetchLogoUrl(String pageUrl) { - if (logoCache.containsKey(pageUrl)) { + if (pageUrl != null && logoCache.containsKey(pageUrl)) { return logoCache.get(pageUrl); } diff --git a/src/main/java/edu/group5/app/model/user/UserService.java b/src/main/java/edu/group5/app/model/user/UserService.java index 9d215d0..6bee483 100644 --- a/src/main/java/edu/group5/app/model/user/UserService.java +++ b/src/main/java/edu/group5/app/model/user/UserService.java @@ -51,8 +51,7 @@ public boolean registerUser(String role, String firstName, String lastName, firstName == null || firstName.trim().isEmpty() || lastName == null || lastName.trim().isEmpty() || email == null || email.trim().isEmpty() || - passwordHash == null || passwordHash.trim().isEmpty() || - this.getUserByEmail(email) != null) { + passwordHash == null || passwordHash.trim().isEmpty()) { return false; } User user; @@ -95,7 +94,9 @@ public User login(String email, char[] password) { * @return the User object if found, null otherwise */ public User getUserByEmail(String email) { - ParameterValidator.stringChecker(email, "email"); + if (email == null || email.trim().isEmpty()) { + return null; + } return this.userRepository.findUserByEmail(email); } } diff --git a/src/test/java/edu/group5/app/model/donation/DonationRepositoryTest.java b/src/test/java/edu/group5/app/model/donation/DonationRepositoryTest.java index ce81b2a..82140a7 100644 --- a/src/test/java/edu/group5/app/model/donation/DonationRepositoryTest.java +++ b/src/test/java/edu/group5/app/model/donation/DonationRepositoryTest.java @@ -33,7 +33,7 @@ void setUp() { void constructorThrowsIfNullList() { IllegalArgumentException ex = assertThrows(IllegalArgumentException.class, () -> new DonationRepository(null)); - assertEquals("The list of rows cannot be null", ex.getMessage()); + assertEquals("List of donation rows can't be null", ex.getMessage()); } @Test @@ -88,7 +88,7 @@ void addContentDuplicateIdFails() { void addContentNullThrows() { IllegalArgumentException ex = assertThrows(IllegalArgumentException.class, () -> repo.addContent(null)); - assertEquals("Donation cannot be null", ex.getMessage()); + assertEquals("Donation can't be null", ex.getMessage()); } @Test @@ -102,7 +102,7 @@ void getDonationByIdSuccessfully() { void getDonationByIdThrowsIfNegative() { IllegalArgumentException ex = assertThrows(IllegalArgumentException.class, () -> repo.getDonationById(0)); - assertEquals("Donation ID must be positive", ex.getMessage()); + assertEquals("Donation ID must be a positive integer", ex.getMessage()); } @Test @@ -182,7 +182,7 @@ void filterByOrganizationNoMatch() { void filterByOrganizationThrowsIfNegative() { IllegalArgumentException ex = assertThrows(IllegalArgumentException.class, () -> repo.filterByOrganization(0)); - assertEquals("Organization number must be positive", ex.getMessage()); + assertEquals("Organization number must be a positive integer", ex.getMessage()); } @Test @@ -261,7 +261,7 @@ void filterByUserIdNoMatch() { void filterByUserIdThrowsIfNegative() { IllegalArgumentException ex = assertThrows(IllegalArgumentException.class, () -> repo.filterByUser(0)); - assertEquals("User ID must be positive", ex.getMessage()); + assertEquals("User ID must be a positive integer", ex.getMessage()); } @Test diff --git a/src/test/java/edu/group5/app/model/donation/DonationServiceTest.java b/src/test/java/edu/group5/app/model/donation/DonationServiceTest.java index f57b559..58bd170 100644 --- a/src/test/java/edu/group5/app/model/donation/DonationServiceTest.java +++ b/src/test/java/edu/group5/app/model/donation/DonationServiceTest.java @@ -50,7 +50,7 @@ void testConstructorThrowsIfDonationRepositoryIsNull() { IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> { new DonationService(null, organizationRepository); }); - assertEquals("DonationRepository cannot be null", exception.getMessage()); + assertEquals("DonationRepository can't be null", exception.getMessage()); } @Test @@ -58,7 +58,7 @@ void testConstructorThrowsIfOrganizationRepositoryIsNull() { IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> { new DonationService(donationRepository, null); }); - assertEquals("OrganizationRepository cannot be null", exception.getMessage()); + assertEquals("OrganizationRepository can't be null", exception.getMessage()); } @Test 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 8906395..a5eab05 100644 --- a/src/test/java/edu/group5/app/model/organization/OrganizationRepositoryTest.java +++ b/src/test/java/edu/group5/app/model/organization/OrganizationRepositoryTest.java @@ -1,157 +1,157 @@ -package edu.group5.app.model.organization; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - -import java.util.Map; - -import static org.junit.jupiter.api.Assertions.*; - -class OrganizationRepositoryTest { - - private OrganizationRepository repository; - private OrganizationScraper scraper; - - @BeforeEach - void setUp() { - scraper = new OrganizationScraper(); - Object[] content = new Object[] { - Map.of( - "org_number", "1", - "name", "Trusted Org1", - "status", "approved", - "url", "org.com", - "is_pre_approved", true - ), - Map.of( - "org_number", "2", - "name", "Trusted Org2", - "status", "approved", - "url", "org.com", - "is_pre_approved", true - ), - Map.of( - "org_number", "3", - "name", "Untrusted Org1", - "status", "pending", - "url", "org.com", - "is_pre_approved", true - ), - Map.of( - "org_number", "4", - "name", "Untrusted Org2", - "status", "pending", - "url", "org.com", - "is_pre_approved", true - ) - }; - repository = new OrganizationRepository(content, scraper); - } - - private void constructorTest(Object[] input, String expectedMessage) { - IllegalArgumentException exception = assertThrows( - IllegalArgumentException.class, - () -> new OrganizationRepository(input, scraper) - ); - assertEquals(expectedMessage, exception.getMessage()); - } - @Test - 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 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)); - } - - @Test - void testFindByOrgNumberReturnsOrganization() { - assertEquals(new Organization(1, "Trusted Org1", true, - "org.com", true, "Information about Trusted Org1", null), - repository.findByOrgNumber(1)); - } - - @Test - void testFindByOrgNumberIfOrgNumberIsIllegal() { - IllegalArgumentException exception = assertThrows( - IllegalArgumentException.class, - () -> repository.findByOrgNumber(-1)); - assertEquals("The Organization number must be a positive integer", exception.getMessage()); - } - - @Test - void testFindByOrgNumberIfOrgNumberNotFound() { - assertNull(repository.findByOrgNumber(999)); - } - - @Test - void testFindByOrgNameReturnsOrganization() { - assertEquals(new Organization(1, "Trusted Org1", true, - "org.com", true, "Information about Trusted Org1", null), - repository.findByOrgName("Trusted Org1")); - } - - @Test - void testFindByOrgNameIfNameIsIllegalThrowsException() { - IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, - () -> repository.findByOrgName(null)); - assertEquals("The name cannot be null", exception.getMessage()); - - IllegalArgumentException exception2 = assertThrows(IllegalArgumentException.class, - () -> repository.findByOrgName("")); - assertEquals("The name cannot be null", exception2.getMessage()); - } - - @Test - void testFindByOrgNameIfNameNotFound() { - assertNull(repository.findByOrgName("Nonexistent Org")); - } - - @Test - void testFindByOrgNameIsCaseInsensitive() { - assertEquals(new Organization(1, "Trusted Org1", true, - "org.com", true, "Information about Trusted Org1", null), - repository.findByOrgName("trusted org1")); - } - - @Test - void testExportAllOrganizations() { - Object[] allOrgs = repository.export(); - assertEquals(4, allOrgs.length); - } - - @Test - void testExportAllOrganizationsThrowsWhenRepositoryIsEmpty() { - OrganizationRepository emptyRepo = new OrganizationRepository(new Object[0], scraper); - IllegalStateException exception = assertThrows( - IllegalStateException.class, () -> emptyRepo.export() - ); - assertEquals("The repository is empty", exception.getMessage()); - } +package edu.group5.app.model.organization; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.*; + +class OrganizationRepositoryTest { + + private OrganizationRepository repository; + private OrganizationScraper scraper; + + @BeforeEach + void setUp() { + scraper = new OrganizationScraper(); + Object[] content = new Object[] { + Map.of( + "org_number", "1", + "name", "Trusted Org1", + "status", "approved", + "url", "org.com", + "is_pre_approved", true + ), + Map.of( + "org_number", "2", + "name", "Trusted Org2", + "status", "approved", + "url", "org.com", + "is_pre_approved", true + ), + Map.of( + "org_number", "3", + "name", "Untrusted Org1", + "status", "pending", + "url", "org.com", + "is_pre_approved", true + ), + Map.of( + "org_number", "4", + "name", "Untrusted Org2", + "status", "pending", + "url", "org.com", + "is_pre_approved", true + ) + }; + repository = new OrganizationRepository(content, scraper); + } + + private void constructorTest(Object[] input, String expectedMessage) { + IllegalArgumentException exception = assertThrows( + IllegalArgumentException.class, + () -> new OrganizationRepository(input, scraper) + ); + assertEquals(expectedMessage, exception.getMessage()); + } + @Test + void constructor_ThrowsWhenContentIsNull() { + constructorTest(null, "Input data can't 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("Scraper can't be null", exception.getMessage()); + } + + @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)); + } + + @Test + void testFindByOrgNumberReturnsOrganization() { + assertEquals(new Organization(1, "Trusted Org1", true, + "org.com", true, "Information about Trusted Org1", null), + repository.findByOrgNumber(1)); + } + + @Test + void testFindByOrgNumberIfOrgNumberIsIllegal() { + IllegalArgumentException exception = assertThrows( + IllegalArgumentException.class, + () -> repository.findByOrgNumber(-1)); + assertEquals("Organization number must be a positive integer", exception.getMessage()); + } + + @Test + void testFindByOrgNumberIfOrgNumberNotFound() { + assertNull(repository.findByOrgNumber(999)); + } + + @Test + void testFindByOrgNameReturnsOrganization() { + assertEquals(new Organization(1, "Trusted Org1", true, + "org.com", true, "Information about Trusted Org1", null), + repository.findByOrgName("Trusted Org1")); + } + + @Test + void testFindByOrgNameIfNameIsIllegalThrowsException() { + IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, + () -> repository.findByOrgName(null)); + assertEquals("Organization name can't be null", exception.getMessage()); + + IllegalArgumentException exception2 = assertThrows(IllegalArgumentException.class, + () -> repository.findByOrgName("")); + assertEquals("Organization name can't be blank", exception2.getMessage()); + } + + @Test + void testFindByOrgNameIfNameNotFound() { + assertNull(repository.findByOrgName("Nonexistent Org")); + } + + @Test + void testFindByOrgNameIsCaseInsensitive() { + assertEquals(new Organization(1, "Trusted Org1", true, + "org.com", true, "Information about Trusted Org1", null), + repository.findByOrgName("trusted org1")); + } + + @Test + void testExportAllOrganizations() { + Object[] allOrgs = repository.export(); + assertEquals(4, allOrgs.length); + } + + @Test + void testExportAllOrganizationsThrowsWhenRepositoryIsEmpty() { + OrganizationRepository emptyRepo = new OrganizationRepository(new Object[0], scraper); + IllegalStateException exception = assertThrows( + IllegalStateException.class, () -> emptyRepo.export() + ); + assertEquals("The repository is empty", exception.getMessage()); + } } \ No newline at end of file diff --git a/src/test/java/edu/group5/app/model/organization/OrganizationServiceTest.java b/src/test/java/edu/group5/app/model/organization/OrganizationServiceTest.java index 78f3e1a..3765bf5 100644 --- a/src/test/java/edu/group5/app/model/organization/OrganizationServiceTest.java +++ b/src/test/java/edu/group5/app/model/organization/OrganizationServiceTest.java @@ -33,14 +33,14 @@ public void setUp() { void constructor_throwsIfRepositoryIsNull() { IllegalArgumentException ex = assertThrows(IllegalArgumentException.class, () -> new OrganizationService(null, scraper)); - assertEquals("OrganizationRepository cannot be null", ex.getMessage()); + assertEquals("OrganizationRepository can't be null", ex.getMessage()); } @Test void constructor_throwsIfScraperIsNull() { IllegalArgumentException ex = assertThrows(IllegalArgumentException.class, () -> new OrganizationService(repo, null)); - assertEquals("OrganizationScraper cannot be null", ex.getMessage()); + assertEquals("Scraper can't be null", ex.getMessage()); } @Test diff --git a/src/test/java/edu/group5/app/model/user/CustomerTest.java b/src/test/java/edu/group5/app/model/user/CustomerTest.java index 7c96438..147343f 100644 --- a/src/test/java/edu/group5/app/model/user/CustomerTest.java +++ b/src/test/java/edu/group5/app/model/user/CustomerTest.java @@ -59,55 +59,55 @@ void testInstanceOfCustomer() { @Test void constructorWithNegativeUserIdThrowsException() { constructorTest(-1, testFirstName, testLastName, - testEmail, testPasswordHash, "User ID must be positive"); + testEmail, testPasswordHash, "User ID must be a positive integer"); } @Test void constructorWithNullFirstNameThrowsException() { constructorTest(testUserId, null, testLastName, - testEmail, testPasswordHash, "First name cannot be null or empty"); + testEmail, testPasswordHash, "First name can't be null"); } @Test void constructorWithEmptyFirstNameThrowsException() { constructorTest(testUserId, "", testLastName, - testEmail, testPasswordHash, "First name cannot be null or empty"); + testEmail, testPasswordHash, "First name can't be blank"); } @Test void constructorWithNullLastNameThrowsException() { constructorTest(testUserId, testFirstName, null, - testEmail, testPasswordHash, "Last name cannot be null or empty"); + testEmail, testPasswordHash, "Last name can't be null"); } @Test void constructorWithEmptyLastNameThrowsException() { - constructorTest(testUserId, testFirstName, - "", testEmail, testPasswordHash, "Last name cannot be null or empty"); + constructorTest(testUserId, testFirstName, + "", testEmail, testPasswordHash, "Last name can't be blank"); } @Test void constructorWithNullEmailThrowsException() { constructorTest(testUserId, testFirstName, testLastName, - null, testPasswordHash, "Email cannot be null or empty"); + null, testPasswordHash, "Email can't be null"); } @Test void constructorWithEmptyEmailThrowsException() { constructorTest(testUserId, testFirstName, testLastName, - "", testPasswordHash, "Email cannot be null or empty"); + "", testPasswordHash, "Email can't be blank"); } @Test void constructorWithNullPasswordHashThrowsException() { constructorTest(testUserId, testFirstName, testLastName, - testEmail, null, "Password hash cannot be null or empty"); + testEmail, null, "Password hash can't be null"); } @Test void constructorWithEmptyPasswordHashThrowsException() { constructorTest(testUserId, testFirstName, testLastName, - testEmail, "", "Password hash cannot be null or empty"); + testEmail, "", "Password hash can't be blank"); } diff --git a/src/test/java/edu/group5/app/model/user/UserRepositoryTest.java b/src/test/java/edu/group5/app/model/user/UserRepositoryTest.java index eaf2c2c..fd13b13 100644 --- a/src/test/java/edu/group5/app/model/user/UserRepositoryTest.java +++ b/src/test/java/edu/group5/app/model/user/UserRepositoryTest.java @@ -27,7 +27,7 @@ void setUp() { void constructorThrowsIfNull() { IllegalArgumentException ex = assertThrows(IllegalArgumentException.class, () -> new UserRepository(null)); - assertEquals("The list of rows cannot be null", ex.getMessage()); + assertEquals("List of User rows can't be null", ex.getMessage()); } @Test @@ -77,7 +77,7 @@ void addContentSuccessfully() { void addContentNullThrows() { IllegalArgumentException ex = assertThrows(IllegalArgumentException.class, () -> repo.addContent(null)); - assertEquals("User cannot be null", ex.getMessage()); + assertEquals("User can't be null", ex.getMessage()); } @Test @@ -101,11 +101,11 @@ void findUserByEmailReturnsNullIfNotFound() { void findUserByEmailThrowsIfNullOrEmpty() { IllegalArgumentException ex1 = assertThrows(IllegalArgumentException.class, () -> repo.findUserByEmail(null)); - assertEquals("Email cannot be null or empty", ex1.getMessage()); + assertEquals("Email can't be null", ex1.getMessage()); IllegalArgumentException ex2 = assertThrows(IllegalArgumentException.class, () -> repo.findUserByEmail(" ")); - assertEquals("Email cannot be null or empty", ex2.getMessage()); + assertEquals("Email can't be blank", ex2.getMessage()); } @Test @@ -123,7 +123,7 @@ void getUserByIdReturnsNullIfNotFound() { void getUserByIdThrowsIfNonPositive() { IllegalArgumentException ex = assertThrows(IllegalArgumentException.class, () -> repo.getUserById(0)); - assertEquals("User ID must be positive", ex.getMessage()); + assertEquals("User ID must be a positive integer", ex.getMessage()); } diff --git a/src/test/java/edu/group5/app/model/user/UserServiceTest.java b/src/test/java/edu/group5/app/model/user/UserServiceTest.java index 99a6913..104e2f1 100644 --- a/src/test/java/edu/group5/app/model/user/UserServiceTest.java +++ b/src/test/java/edu/group5/app/model/user/UserServiceTest.java @@ -31,7 +31,7 @@ void setUp() { void constructorthrowsIfNull() { IllegalArgumentException ex = assertThrows(IllegalArgumentException.class, () -> new UserService(null)); - assertEquals("UserRepository cannot be null", ex.getMessage()); + assertEquals("UserRepository can't be null", ex.getMessage()); } @Test