Fakultas Ilmu Komputer UI

Skip to content
Snippets Groups Projects
Commit 62dbeb76 authored by riorio805's avatar riorio805
Browse files

[REFACTOR] Remove long constructor in User and replace all occurrences with...

[REFACTOR] Remove long constructor in User and replace all occurrences with the no-arg constructor and set attribute.
parent f952c7c6
No related branches found
No related tags found
1 merge request!1Login registration
......@@ -10,59 +10,42 @@ import java.time.LocalDate;
@Table(name = "users")
public class User {
@Setter
@Getter
@Id
@Setter @Getter
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Setter
@Getter
@Setter @Getter
@Column(nullable = false, unique = true)
private String email;
// May be null for social login users
@Setter
@Getter
@Setter @Getter
@Column(nullable = false)
private String password;
@Setter
@Getter
@Setter @Getter
@Column(nullable = false)
private String name;
@Column(nullable = false)
private boolean isVerified = false;
@Setter
@Getter
@Setter @Getter
private String role;
// New fields
@Setter
@Getter
@Setter @Getter
private LocalDate birthdate;
@Setter
@Getter
@Setter @Getter
private String provider; // "EMAIL", "GOOGLE", "APPLE"
@Setter
@Getter
@Setter @Getter
private String socialId; // For social login users
public User() {}
public User(String email, String password, String name, boolean isVerified, String role,
LocalDate birthdate, String provider, String socialId) {
this.email = email;
this.password = password;
this.name = name;
this.isVerified = isVerified;
this.role = role;
this.birthdate = birthdate;
this.provider = provider;
this.socialId = socialId;
}
// Getters and setters
......
......@@ -33,50 +33,62 @@ public class DevDataSeeder implements Runnable {
public void run() {
// Only seed if there are no users in the repository
if (userRepository.count() == 0) {
userRepository.save(new User("user1@example.com",
passwordEncoder.encode("password1"),
"User One",
true,
"user",
LocalDate.of(1990, 1, 1),
EMAIL_PROVIDER,
"social1"));
userRepository.save(new User("user2@example.com",
passwordEncoder.encode("password2"),
"User Two",
true,
"user",
LocalDate.of(1991, 2, 2),
EMAIL_PROVIDER,
"social2"));
User user1 = new User();
user1.setEmail("user1@example.com");
user1.setPassword(passwordEncoder.encode("password1"));
user1.setName("User One");
user1.setVerified(true);
user1.setRole("user");
user1.setBirthdate(LocalDate.of(1990, 1, 1));
user1.setProvider(EMAIL_PROVIDER);
user1.setSocialId("social1");
userRepository.save(user1);
userRepository.save(new User("user3@example.com",
passwordEncoder.encode("password3"),
"User Three",
true,
"user",
LocalDate.of(1992, 3, 3),
EMAIL_PROVIDER,
"social3"));
User user2 = new User();
user2.setEmail("user2@example.com");
user2.setPassword(passwordEncoder.encode("password2"));
user2.setName("User Two");
user2.setVerified(true);
user2.setRole("user");
user2.setBirthdate(LocalDate.of(1991, 2, 2));
user2.setProvider(EMAIL_PROVIDER);
user2.setSocialId("social2");
userRepository.save(user2);
userRepository.save(new User("user4@example.com",
passwordEncoder.encode("password4"),
"User Four",
true,
"user",
LocalDate.of(1993, 4, 4),
EMAIL_PROVIDER,
"social4"));
userRepository.save(new User("user5@example.com",
passwordEncoder.encode("password5"),
"User Five",
true,
"user",
LocalDate.of(1994, 5, 5),
EMAIL_PROVIDER,
"social5"));
User user3 = new User();
user3.setEmail("user3@example.com");
user3.setPassword(passwordEncoder.encode("password3"));
user3.setName("User Three");
user3.setVerified(true);
user3.setRole("user");
user3.setBirthdate(LocalDate.of(1992, 3, 3));
user3.setProvider(EMAIL_PROVIDER);
user3.setSocialId("social3");
userRepository.save(user3);
User user4 = new User();
user4.setEmail("user4@example.com");
user4.setPassword(passwordEncoder.encode("password4"));
user4.setName("User Four");
user4.setVerified(true);
user4.setRole("user");
user4.setBirthdate(LocalDate.of(1993, 4, 4));
user4.setProvider(EMAIL_PROVIDER);
user4.setSocialId("social4");
userRepository.save(user4);
User user5 = new User();
user5.setEmail("user5@example.com");
user5.setPassword(passwordEncoder.encode("password5"));
user5.setName("User Five");
user5.setVerified(true);
user5.setRole("user");
user5.setBirthdate(LocalDate.of(1994, 5, 5));
user5.setProvider(EMAIL_PROVIDER);
user5.setSocialId("social5");
userRepository.save(user5);
}
}
}
......@@ -37,8 +37,16 @@ public class AuthenticationService {
throw new UserAlreadyExistsException("User already exists with this email. If you registered using social login, please sign in with Google/Apple.");
}
String encodedPassword = passwordEncoder.encode(request.getPassword());
User user = new User(request.getEmail(), encodedPassword, request.getName(), false, "USER",
request.getBirthdate(), EMAIL_PROVIDER, null);
User user = new User();
user.setEmail(request.getEmail());
user.setPassword(encodedPassword);
user.setName(request.getName());
user.setVerified(false);
user.setRole("USER");
user.setBirthdate(request.getBirthdate());
user.setProvider(EMAIL_PROVIDER);
user.setSocialId(null);
user = userRepository.save(user);
otpService.generateOTP(request.getEmail());
logger.info("OTP generated for {} at {}", request.getEmail(), java.time.LocalDateTime.now());
......@@ -57,8 +65,16 @@ public class AuthenticationService {
}
return existing;
}
User user = new User(request.getEmail(), null, request.getName(), true, "USER",
request.getBirthdate(), request.getProvider().toUpperCase(), request.getSocialId());
User user = new User();
user.setEmail(request.getEmail());
user.setPassword(null);
user.setName(request.getName());
user.setVerified(true);
user.setRole("USER");
user.setBirthdate(request.getBirthdate());
user.setProvider(request.getProvider().toUpperCase());
user.setSocialId(request.getSocialId());
user = userRepository.save(user);
logger.info("User registered via {}: {} at {}", request.getProvider(), request.getEmail(), java.time.LocalDateTime.now());
return user;
......
......@@ -67,8 +67,14 @@ class AuthenticationControllerTest {
request.setName("Test User");
request.setBirthdate(LocalDate.now().minusYears(20));
User user = new User("email@example.com", "encodedPassword", "Test User", false, "USER",
request.getBirthdate(), "EMAIL", null);
User user = new User();
user.setEmail("email@example.com");
user.setPassword("encodedPassword");
user.setName("Test User");
user.setRole("USER");
user.setBirthdate(request.getBirthdate());
user.setProvider("EMAIL");
user.setId(1L);
Mockito.when(authenticationService.registerUser(any(RegistrationRequest.class))).thenReturn(user);
......@@ -90,8 +96,15 @@ class AuthenticationControllerTest {
request.setBirthdate(LocalDate.now().minusYears(25));
request.setSocialId("social123");
User user = new User("social@example.com", null, "Social User", true, "USER",
request.getBirthdate(), "GOOGLE", "social123");
User user = new User();
user.setEmail("social@example.com");
user.setPassword(null);
user.setName("Social User");
user.setVerified(true);
user.setRole("USER");
user.setBirthdate(request.getBirthdate());
user.setProvider("GOOGLE");
user.setSocialId("social123");
user.setId(2L);
Mockito.when(authenticationService.socialLogin(any(SocialLoginRequest.class))).thenReturn(user);
......@@ -105,8 +118,16 @@ class AuthenticationControllerTest {
@Test
void testLoginEmail() throws Exception {
User user = new User("email@example.com", "encodedPassword", "Test User", true, "USER",
LocalDate.now().minusYears(20), "EMAIL", null);
User user = new User();
user.setEmail("email@example.com");
user.setPassword("encodedPassword");
user.setName("Test User");
user.setVerified(true);
user.setRole("USER");
user.setBirthdate(LocalDate.now().minusYears(20));
user.setProvider("EMAIL");
user.setSocialId(null);
user.setId(1L);
Mockito.when(authenticationService.loginUser(eq("email@example.com"), eq("password"))).thenReturn(user);
......@@ -120,8 +141,15 @@ class AuthenticationControllerTest {
@Test
void testLoginSocial() throws Exception {
User user = new User("social@example.com", null, "Social User", true, "USER",
LocalDate.now().minusYears(25), "GOOGLE", "social123");
User user = new User();
user.setEmail("social@example.com");
user.setPassword(null);
user.setName("Social User");
user.setVerified(true);
user.setRole("USER");
user.setBirthdate(LocalDate.now().minusYears(25));
user.setProvider("GOOGLE");
user.setSocialId("social123");
user.setId(2L);
Mockito.when(authenticationService.loginSocial(eq("social@example.com"))).thenReturn(user);
......
......@@ -68,7 +68,16 @@ class UserTest {
String provider = "EMAIL";
String socialId = null;
User user = new User(email, password, name, verified, role, birthdate, provider, socialId);
User user = new User();
user.setEmail(email);
user.setPassword(password);
user.setName(name);
user.setVerified(verified);
user.setRole(role);
user.setBirthdate(birthdate);
user.setProvider(provider);
user.setSocialId(socialId);
// id remains null until set (by the persistence layer)
assertNull(user.getId(), "Id should be null when not set");
......
......@@ -42,14 +42,16 @@ class DevDataSeederTest {
@Test
void testSeederDoesNotInsertIfUsersExist() {
// Save an existing user into the repository
userRepository.save(new User("existing@example.com",
passwordEncoder.encode("test"),
"Existing User",
true,
"admin",
LocalDate.of(1990, 1, 1),
"EMAIL",
"social_9999"));
User user = new User();
user.setEmail("existing@example.com");
user.setPassword(passwordEncoder.encode("test"));
user.setName("Existing User");
user.setVerified(true);
user.setRole("admin");
user.setBirthdate(LocalDate.of(1990, 1, 1));
user.setProvider("EMAIL");
user.setSocialId("social_9999");
userRepository.save(user);
long countBefore = userRepository.count();
new DevDataSeeder(userRepository, passwordEncoder).run();
......
......@@ -77,8 +77,16 @@ class AuthenticationServiceTest {
when(userRepository.findByEmail("test@example.com")).thenReturn(null);
when(passwordEncoder.encode("password")).thenReturn("encodedPassword");
User savedUser = new User("test@example.com", "encodedPassword", "Test User", false, "USER",
request.getBirthdate(), "EMAIL", null);
User savedUser = new User();
savedUser.setEmail("test@example.com");
savedUser.setPassword("encodedPassword");
savedUser.setName("Test User");
savedUser.setVerified(false);
savedUser.setRole("USER");
savedUser.setBirthdate(request.getBirthdate());
savedUser.setProvider("EMAIL");
savedUser.setSocialId(null);
savedUser.setId(1L);
when(userRepository.save(any(User.class))).thenReturn(savedUser);
......@@ -117,8 +125,16 @@ class AuthenticationServiceTest {
request.setSocialId("social123");
request.setSocialToken("token");
User existingUser = new User("social@example.com", "encodedPassword", "Existing User", false, "USER",
LocalDate.now().minusYears(30), "EMAIL", null);
User existingUser = new User();
existingUser.setEmail("social@example.com");
existingUser.setPassword("encodedPassword");
existingUser.setName("Existing User");
existingUser.setVerified(false);
existingUser.setRole("USER");
existingUser.setBirthdate(LocalDate.now().minusYears(30));
existingUser.setProvider("EMAIL");
existingUser.setSocialId(null);
when(userRepository.findByEmail("social@example.com")).thenReturn(existingUser);
Exception exception = assertThrows(UserAlreadyExistsException.class, () ->
......@@ -137,8 +153,16 @@ class AuthenticationServiceTest {
request.setSocialId("social123");
request.setSocialToken("token");
User existingUser = new User("social@example.com", null, "Social User", true, "USER",
LocalDate.now().minusYears(25), "GOOGLE", "social123");
User existingUser = new User();
existingUser.setEmail("social@example.com");
existingUser.setPassword(null);
existingUser.setName("Social User");
existingUser.setVerified(true);
existingUser.setRole("USER");
existingUser.setBirthdate(LocalDate.now().minusYears(25));
existingUser.setProvider("GOOGLE");
existingUser.setSocialId("social123");
when(userRepository.findByEmail("social@example.com")).thenReturn(existingUser);
User result = authenticationService.socialLogin(request);
......@@ -157,8 +181,16 @@ class AuthenticationServiceTest {
request.setSocialToken("token");
when(userRepository.findByEmail("social@example.com")).thenReturn(null);
User savedUser = new User("social@example.com", null, "Social User", true, "USER",
request.getBirthdate(), "GOOGLE", "social123");
User savedUser = new User();
savedUser.setEmail("social@example.com");
savedUser.setPassword(null);
savedUser.setName("Social User");
savedUser.setVerified(true);
savedUser.setRole("USER");
savedUser.setBirthdate(request.getBirthdate());
savedUser.setProvider("GOOGLE");
savedUser.setSocialId("social123");
savedUser.setId(2L);
when(userRepository.save(any(User.class))).thenReturn(savedUser);
......@@ -180,8 +212,16 @@ class AuthenticationServiceTest {
@Test
void testLoginUser_InvalidPassword_NullPassword() {
User user = new User("test@example.com", null, "Test User", true, "USER",
LocalDate.now().minusYears(20), "EMAIL", null);
User user = new User();
user.setEmail("test@example.com");
user.setPassword(null);
user.setName("Test User");
user.setVerified(true);
user.setRole("USER");
user.setBirthdate(LocalDate.now().minusYears(20));
user.setProvider("EMAIL");
user.setSocialId(null);
when(userRepository.findByEmail("test@example.com")).thenReturn(user);
Exception exception = assertThrows(InvalidCredentialsException.class, () ->
......@@ -192,8 +232,16 @@ class AuthenticationServiceTest {
@Test
void testLoginUser_InvalidPassword_WrongMatch() {
User user = new User("test@example.com", "encodedPassword", "Test User", true, "USER",
LocalDate.now().minusYears(20), "EMAIL", null);
User user = new User();
user.setEmail("test@example.com");
user.setPassword("encodedPassword");
user.setName("Test User");
user.setVerified(true);
user.setRole("USER");
user.setBirthdate(LocalDate.now().minusYears(20));
user.setProvider("EMAIL");
user.setSocialId(null);
when(userRepository.findByEmail("test@example.com")).thenReturn(user);
when(passwordEncoder.matches("wrongPassword", "encodedPassword")).thenReturn(false);
......@@ -205,8 +253,16 @@ class AuthenticationServiceTest {
@Test
void testLoginUser_Success() {
User user = new User("test@example.com", "encodedPassword", "Test User", true, "USER",
LocalDate.now().minusYears(20), "EMAIL", null);
User user = new User();
user.setEmail("test@example.com");
user.setPassword("encodedPassword");
user.setName("Test User");
user.setVerified(true);
user.setRole("USER");
user.setBirthdate(LocalDate.now().minusYears(20));
user.setProvider("EMAIL");
user.setSocialId(null);
when(userRepository.findByEmail("test@example.com")).thenReturn(user);
when(passwordEncoder.matches("password", "encodedPassword")).thenReturn(true);
......@@ -228,8 +284,16 @@ class AuthenticationServiceTest {
@Test
void testLoginSocial_Success() {
User user = new User("social@example.com", null, "Social User", true, "USER",
LocalDate.now().minusYears(25), "GOOGLE", "social123");
User user = new User();
user.setEmail("social@example.com");
user.setPassword(null);
user.setName("Social User");
user.setVerified(true);
user.setRole("USER");
user.setBirthdate(LocalDate.now().minusYears(25));
user.setProvider("GOOGLE");
user.setSocialId("social123");
when(userRepository.findByEmail("social@example.com")).thenReturn(user);
User result = authenticationService.loginSocial("social@example.com");
......@@ -243,8 +307,16 @@ class AuthenticationServiceTest {
void testVerifyOTP_Success() {
// OTPService returns true and user is found
when(otpService.verifyOTP("test@example.com", "123456")).thenReturn(true);
User user = new User("test@example.com", "encodedPassword", "Test User", false, "USER",
LocalDate.now().minusYears(20), "EMAIL", null);
User user = new User();
user.setEmail("test@example.com");
user.setPassword("encodedPassword");
user.setName("Test User");
user.setVerified(false);
user.setRole("USER");
user.setBirthdate(LocalDate.now().minusYears(20));
user.setProvider("EMAIL");
user.setSocialId(null);
when(userRepository.findByEmail("test@example.com")).thenReturn(user);
when(userRepository.save(any(User.class))).thenReturn(user);
......@@ -277,8 +349,16 @@ class AuthenticationServiceTest {
@Test
void testForgotPassword_Success() {
User user = new User("test@example.com", "encodedPassword", "Test User", true, "USER",
LocalDate.now().minusYears(20), "EMAIL", null);
User user = new User();
user.setEmail("test@example.com");
user.setPassword("encodedPassword");
user.setName("Test User");
user.setVerified(true);
user.setRole("USER");
user.setBirthdate(LocalDate.now().minusYears(20));
user.setProvider("EMAIL");
user.setSocialId(null);
when(userRepository.findByEmail("test@example.com")).thenReturn(user);
assertDoesNotThrow(() -> authenticationService.forgotPassword("test@example.com"));
......@@ -294,8 +374,16 @@ class AuthenticationServiceTest {
assertTrue(exception1.getMessage().contains("Password reset is only available for email-registered users."));
// Case 2: user exists but provider is not EMAIL
User user = new User("social@example.com", null, "Social User", true, "USER",
LocalDate.now().minusYears(25), "GOOGLE", "social123");
User user = new User();
user.setEmail("social@example.com");
user.setPassword(null);
user.setName("Social User");
user.setVerified(true);
user.setRole("USER");
user.setBirthdate(LocalDate.now().minusYears(25));
user.setProvider("GOOGLE");
user.setSocialId("social123");
when(userRepository.findByEmail("social@example.com")).thenReturn(user);
Exception exception2 = assertThrows(IllegalArgumentException.class, () ->
authenticationService.forgotPassword("social@example.com")
......@@ -314,8 +402,16 @@ class AuthenticationServiceTest {
@Test
void testPostContent_UserNotVerified() {
User user = new User("test@example.com", "encodedPassword", "Test User", false, "USER",
LocalDate.now().minusYears(20), "EMAIL", null);
User user = new User();
user.setEmail("test@example.com");
user.setPassword("encodedPassword");
user.setName("Test User");
user.setVerified(false);
user.setRole("USER");
user.setBirthdate(LocalDate.now().minusYears(20));
user.setProvider("EMAIL");
user.setSocialId(null);
when(userRepository.findByEmail("test@example.com")).thenReturn(user);
String response = authenticationService.postContent("test@example.com", "Content");
assertTrue(response.contains("not verified"));
......@@ -323,8 +419,16 @@ class AuthenticationServiceTest {
@Test
void testPostContent_UserVerified() {
User user = new User("test@example.com", "encodedPassword", "Test User", true, "USER",
LocalDate.now().minusYears(20), "EMAIL", null);
User user = new User();
user.setEmail("test@example.com");
user.setPassword("encodedPassword");
user.setName("Test User");
user.setVerified(true);
user.setRole("USER");
user.setBirthdate(LocalDate.now().minusYears(20));
user.setProvider("EMAIL");
user.setSocialId(null);
when(userRepository.findByEmail("test@example.com")).thenReturn(user);
String response = authenticationService.postContent("test@example.com", "Content");
assertEquals("Content posted successfully", response);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment