diff --git a/pom.xml b/pom.xml
index b0f6764..5f7773d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -38,6 +38,11 @@
spring-security-crypto
7.0.2
+
+ commons-logging
+ commons-logging
+ 1.3.5
+
diff --git a/src/main/java/edu/group5/app/model/user/User.java b/src/main/java/edu/group5/app/model/user/User.java
index e20e4f4..8dd48cd 100644
--- a/src/main/java/edu/group5/app/model/user/User.java
+++ b/src/main/java/edu/group5/app/model/user/User.java
@@ -9,7 +9,7 @@
* by comparing the provided plaintext password with the stored hashed password using BCrypt.
*
*/
-public abstract class User {
+public class User {
private int userId;
private String role;
private String firstName;
diff --git a/src/test/java/edu/group5/app/model/user/UserTest.java b/src/test/java/edu/group5/app/model/user/UserTest.java
index bc0bcce..b49f153 100644
--- a/src/test/java/edu/group5/app/model/user/UserTest.java
+++ b/src/test/java/edu/group5/app/model/user/UserTest.java
@@ -1,5 +1,111 @@
package edu.group5.app.model.user;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+
public class UserTest {
-
+ private static final int TEST_USER_ID = 1;
+ private static final String TEST_ROLE = "Donor";
+ private static final String TEST_FIRST_NAME = "John";
+ private static final String TEST_LAST_NAME = "Doe";
+ private static final String TEST_EMAIL = "john.doe@example.com";
+ private static final String TEST_PASSWORD = "password123";
+ private static final String TEST_PASSWORD_HASH = new BCryptPasswordEncoder().encode(TEST_PASSWORD);
+
+ private static final int WRONG_USER_ID = -5;
+ private static final String WRONG_ROLE = "";
+ private static final String WRONG_FIRST_NAME = "";
+ private static final String WRONG_LAST_NAME = "";
+ private static final String WRONG_EMAIL = "";
+ private static final String WRONG_PASSWORD_HASH = "";
+
+ private void constructorTest(int userId, String role, String firstName, String lastName, String email, String passwordHash, boolean negativeTest) {
+ boolean exceptionThrown = negativeTest;
+ try {
+ new User(userId, role, firstName, lastName, email, passwordHash);
+ } catch (Exception e) {
+ exceptionThrown = !negativeTest;
+ } finally {
+ assertFalse(exceptionThrown);
+ }
+ }
+
+ @Test
+ public void constructorThrowsNoException() {
+ constructorTest(TEST_USER_ID, TEST_ROLE, TEST_FIRST_NAME, TEST_LAST_NAME, TEST_EMAIL, TEST_PASSWORD_HASH, false);
+ }
+
+ @Test
+ public void constructorWithNegativeUserIdThrowsException() {
+ constructorTest(WRONG_USER_ID, TEST_ROLE, TEST_FIRST_NAME, TEST_LAST_NAME, TEST_EMAIL, TEST_PASSWORD_HASH, true);
+ }
+
+ @Test
+ public void constructorWithEmptyRoleThrowsException() {
+ constructorTest(TEST_USER_ID, WRONG_ROLE, TEST_FIRST_NAME, TEST_LAST_NAME, TEST_EMAIL, TEST_PASSWORD_HASH, true);
+ }
+
+ @Test
+ public void constructorWithEmptyFirstNameThrowsException() {
+ constructorTest(TEST_USER_ID, TEST_ROLE, WRONG_FIRST_NAME, TEST_LAST_NAME, TEST_EMAIL, TEST_PASSWORD_HASH, true);
+ }
+
+ @Test
+ public void constructorWithEmptyLastNameThrowsException() {
+ constructorTest(TEST_USER_ID, TEST_ROLE, TEST_FIRST_NAME, WRONG_LAST_NAME, TEST_EMAIL, TEST_PASSWORD_HASH, true);
+ }
+
+ @Test
+ public void constructorWithEmptyEmailThrowsException() {
+ constructorTest(TEST_USER_ID, TEST_ROLE, TEST_FIRST_NAME, TEST_LAST_NAME, WRONG_EMAIL, TEST_PASSWORD_HASH, true);
+ }
+
+ @Test
+ public void constructorWithEmptyPasswordHashThrowsException() {
+ constructorTest(TEST_USER_ID, TEST_ROLE, TEST_FIRST_NAME, TEST_LAST_NAME, TEST_EMAIL, WRONG_PASSWORD_HASH, true);
+ }
+
+ private void getMethodComparer(User user, boolean negativeTest) {
+ if (user.getUserId() == TEST_USER_ID &&
+ user.getRole().equals(TEST_ROLE) &&
+ user.getFirstName().equals(TEST_FIRST_NAME) &&
+ user.getLastName().equals(TEST_LAST_NAME) &&
+ user.getEmail().equals(TEST_EMAIL) &&
+ user.getPasswordHash() != null) {
+ assertFalse(negativeTest);
+ }
+ }
+
+ @Test
+ public void getMethodsReturnCorrectInformation() {
+ User testUser = new User(TEST_USER_ID, TEST_ROLE, TEST_FIRST_NAME, TEST_LAST_NAME, TEST_EMAIL, TEST_PASSWORD_HASH);
+ getMethodComparer(testUser, false);
+ }
+
+ @Test
+ public void verifyPasswordReturnsTrueForCorrectPassword() {
+ User testUser = new User(TEST_USER_ID, TEST_ROLE, TEST_FIRST_NAME, TEST_LAST_NAME, TEST_EMAIL, TEST_PASSWORD_HASH);
+ assertTrue(testUser.verifyPassword(TEST_PASSWORD));
+ }
+
+ @Test
+ public void verifyPasswordReturnsFalseForIncorrectPassword() {
+ User testUser = new User(TEST_USER_ID, TEST_ROLE, TEST_FIRST_NAME, TEST_LAST_NAME, TEST_EMAIL, TEST_PASSWORD_HASH);
+ assertFalse(testUser.verifyPassword("wrongPassword"));
+ }
+
+ @Test
+ public void verifyPasswordReturnsFalseForNullPassword() {
+ User testUser = new User(TEST_USER_ID, TEST_ROLE, TEST_FIRST_NAME, TEST_LAST_NAME, TEST_EMAIL, TEST_PASSWORD_HASH);
+ assertFalse(testUser.verifyPassword(null));
+ }
+
+ @Test
+ public void verifyPasswordReturnsFalseForEmptyPassword() {
+ User testUser = new User(TEST_USER_ID, TEST_ROLE, TEST_FIRST_NAME, TEST_LAST_NAME, TEST_EMAIL, TEST_PASSWORD_HASH);
+ assertFalse(testUser.verifyPassword(""));
+ }
}