Skip to content

Commit 7a9a5e2

Browse files
committed
features: added AI GEN unit testing
1 parent 7bcda01 commit 7a9a5e2

File tree

6 files changed

+195
-124
lines changed

6 files changed

+195
-124
lines changed

src/main/java/com/app/login/domain/User.java

+4-119
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import com.app.login.config.Constants;
44

55
import com.fasterxml.jackson.annotation.JsonIgnore;
6+
import lombok.Getter;
7+
import lombok.Setter;
68
import org.hibernate.annotations.BatchSize;
79
//import org.hibernate.annotations.Cache;
810
//import org.hibernate.annotations.CacheConcurrencyStrategy;
@@ -20,6 +22,8 @@
2022

2123
@Entity
2224
@Table(name = "app_user")
25+
@Getter
26+
@Setter
2327
public class User implements Serializable {
2428

2529
private static final long serialVersionUID = 1L;
@@ -90,125 +94,6 @@ public class User implements Serializable {
9094
@BatchSize(size = 20)
9195
private Set<Authority> authorities = new HashSet<>();
9296

93-
public Long getId() {
94-
return id;
95-
}
96-
97-
public void setId(Long id) {
98-
this.id = id;
99-
}
100-
101-
public String getLogin() {
102-
return login;
103-
}
104-
105-
public void setLogin(String login) {
106-
this.login = login.toLowerCase(Locale.ENGLISH);
107-
}
108-
109-
public String getPassword() {
110-
return password;
111-
}
112-
113-
public void setPassword(String password) {
114-
this.password = password;
115-
}
116-
117-
public String getFirstName() {
118-
return firstName;
119-
}
120-
121-
public void setFirstName(String firstName) {
122-
this.firstName = firstName;
123-
}
124-
125-
public String getLastName() {
126-
return lastName;
127-
}
128-
129-
public void setLastName(String lastName) {
130-
this.lastName = lastName;
131-
}
132-
133-
public String getEmail() {
134-
return email;
135-
}
136-
137-
public void setEmail(String email) {
138-
this.email = email;
139-
}
140-
141-
public Instant getCreatedDate() {
142-
return createdDate;
143-
}
144-
145-
public void setCreatedDate(Instant createdDate) {
146-
this.createdDate = createdDate;
147-
}
148-
149-
public String getImageUrl() {
150-
return imageUrl;
151-
}
152-
153-
public void setImageUrl(String imageUrl) {
154-
this.imageUrl = imageUrl;
155-
}
156-
157-
public boolean getActivated() {
158-
return activated;
159-
}
160-
161-
public void setActivated(boolean activated) {
162-
this.activated = activated;
163-
}
164-
165-
public String getActivationKey() {
166-
return activationKey;
167-
}
168-
169-
public void setActivationKey(String activationKey) {
170-
this.activationKey = activationKey;
171-
}
172-
173-
public String getResetKey() {
174-
return resetKey;
175-
}
176-
177-
public void setResetKey(String resetKey) {
178-
this.resetKey = resetKey;
179-
}
180-
181-
public Instant getResetDate() {
182-
return resetDate;
183-
}
184-
185-
public void setResetDate(Instant resetDate) {
186-
this.resetDate = resetDate;
187-
}
188-
189-
public String getLangKey() {
190-
return langKey;
191-
}
192-
193-
public void setLangKey(String langKey) {
194-
this.langKey = langKey;
195-
}
196-
197-
public Set<Authority> getAuthorities() {
198-
return authorities;
199-
}
200-
201-
public void setAuthorities(Set<Authority> authorities) {
202-
this.authorities = authorities;
203-
}
204-
205-
public String getIpAddress() {
206-
return ipAddress;
207-
}
208-
209-
public void setIpAddress(String ipAddress) {
210-
this.ipAddress = ipAddress;
211-
}
21297

21398
@Override
21499
public boolean equals(Object o) {

src/main/java/com/app/login/security/DomainUserDetailsServiceImpl.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
import com.app.login.domain.User;
44
import com.app.login.repository.UserRepository;
55
import lombok.extern.slf4j.Slf4j;
6-
import org.slf4j.Logger;
7-
import org.slf4j.LoggerFactory;
86
import org.springframework.security.core.GrantedAuthority;
97
import org.springframework.security.core.authority.SimpleGrantedAuthority;
108
import org.springframework.security.core.userdetails.UserDetails;
@@ -38,7 +36,7 @@ public UserDetails loadUserByUsername(final String login) {
3836
String lowercaseLogin = login.toLowerCase(Locale.ENGLISH);
3937
Optional<User> userFromDatabase = userRepository.findOneWithAuthoritiesByLogin(lowercaseLogin);
4038
return userFromDatabase.map(user -> {
41-
if (!user.getActivated()) {
39+
if (!user.isActivated()) {
4240
throw new UserNotActivatedException("User " + lowercaseLogin + " was not activated");
4341
}
4442
List<GrantedAuthority> grantedAuthorities = user.getAuthorities()

src/main/java/com/app/login/service/dto/UserDTO.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public UserDTO() {
5353

5454
public UserDTO(User user) {
5555
this(user.getId(), user.getLogin(), user.getFirstName(), user.getLastName(), user.getEmail()
56-
, user.getActivated(), user.getImageUrl(), user.getLangKey(), user.getAuthorities()
56+
, user.isActivated(), user.getImageUrl(), user.getLangKey(), user.getAuthorities()
5757
.stream()
5858
.map(Authority::getName)
5959
.collect(Collectors.toSet()));

src/main/java/com/app/login/service/impl/UserServiceImpl.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ public Optional<User> completePasswordReset(KeyAndPasswordVM keyAndPasswordVM) {
186186
@Override
187187
public ResponseEntity requestPasswordReset(String mail) {
188188
return userRepository.findOneByEmail(mail)
189-
.filter(User::getActivated)
189+
.filter(User::isActivated)
190190
.map(user -> {
191191
user.setResetKey(RandomUtil.generateResetKey());
192192
user.setResetDate(Instant.now());
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package com.app.login.service;
2+
3+
import com.app.login.domain.User;
4+
import com.app.login.repository.UserRepository;
5+
import com.app.login.security.DomainUserDetailsServiceImpl;
6+
import com.app.login.security.UserNotActivatedException;
7+
import org.junit.jupiter.api.Test;
8+
import org.junit.jupiter.api.extension.ExtendWith;
9+
import org.mockito.InjectMocks;
10+
import org.mockito.Mock;
11+
import org.mockito.junit.jupiter.MockitoExtension;
12+
import org.springframework.security.core.userdetails.UsernameNotFoundException;
13+
import org.springframework.security.core.userdetails.UserDetails;
14+
15+
import java.util.Collections;
16+
import java.util.Locale;
17+
import java.util.Optional;
18+
19+
import static org.junit.jupiter.api.Assertions.*;
20+
import static org.mockito.ArgumentMatchers.anyString;
21+
import static org.mockito.Mockito.*;
22+
23+
@ExtendWith(MockitoExtension.class)
24+
public class DomainUserDetailGPTGenTest {
25+
26+
@Mock
27+
private UserRepository mockUserRepository;
28+
29+
@InjectMocks
30+
private DomainUserDetailsServiceImpl userDetailsService;
31+
32+
@Test
33+
public void testLoadUserByUsername_UserFoundAndActivated() {
34+
// Arrange
35+
User user = new User();
36+
user.setLogin("testUser");
37+
user.setPassword("password");
38+
user.setActivated(true);
39+
user.setAuthorities(Collections.emptySet());
40+
41+
when(mockUserRepository.findOneWithAuthoritiesByLogin("testuser")).thenReturn(Optional.of(user));
42+
43+
// Act
44+
UserDetails userDetails = userDetailsService.loadUserByUsername("testUser");
45+
46+
// Assert
47+
assertNotNull(userDetails);
48+
assertEquals("testuser", userDetails.getUsername());
49+
assertEquals("password", userDetails.getPassword());
50+
assertTrue(userDetails.getAuthorities().isEmpty());
51+
}
52+
53+
@Test
54+
public void testLoadUserByUsername_UserNotFound() {
55+
// Arrange
56+
when(mockUserRepository.findOneWithAuthoritiesByLogin(anyString())).thenReturn(Optional.empty());
57+
58+
// Act & Assert
59+
UsernameNotFoundException exception = assertThrows(UsernameNotFoundException.class, () -> {
60+
userDetailsService.loadUserByUsername("unknownUser");
61+
});
62+
assertEquals("User unknownuser was not found in the database", exception.getMessage());
63+
}
64+
65+
@Test
66+
public void testLoadUserByUsername_UserNotActivated() {
67+
// Arrange
68+
User user = new User();
69+
user.setLogin("inactiveUser");
70+
user.setPassword("password");
71+
user.setActivated(false);
72+
user.setAuthorities(Collections.emptySet());
73+
74+
when(mockUserRepository.findOneWithAuthoritiesByLogin("inactiveuser")).thenReturn(Optional.of(user));
75+
76+
// Act & Assert
77+
UserNotActivatedException exception = assertThrows(UserNotActivatedException.class, () -> {
78+
userDetailsService.loadUserByUsername("inactiveUser");
79+
});
80+
assertEquals("User inactiveuser was not activated", exception.getMessage());
81+
}
82+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
package com.app.login.service;
2+
3+
import com.app.login.domain.Authority;
4+
import com.app.login.domain.User;
5+
import com.app.login.repository.UserRepository;
6+
import com.app.login.security.DomainUserDetailsServiceImpl;
7+
import com.app.login.security.UserNotActivatedException;
8+
import org.junit.jupiter.api.BeforeEach;
9+
import org.junit.jupiter.api.Test;
10+
import org.junit.jupiter.api.extension.ExtendWith;
11+
import org.mockito.InjectMocks;
12+
import org.mockito.Mock;
13+
import org.mockito.junit.jupiter.MockitoExtension;
14+
import org.springframework.security.core.authority.SimpleGrantedAuthority;
15+
import org.springframework.security.core.userdetails.UserDetails;
16+
import org.springframework.security.core.userdetails.UsernameNotFoundException;
17+
18+
import java.util.Collections;
19+
import java.util.Optional;
20+
21+
import static org.junit.jupiter.api.Assertions.*;
22+
import static org.mockito.ArgumentMatchers.anyString;
23+
import static org.mockito.Mockito.*;
24+
25+
@ExtendWith(MockitoExtension.class)
26+
public class DomainUserDetailsServiceImplAIGenTest {
27+
28+
@Mock
29+
private UserRepository userRepository;
30+
31+
@InjectMocks
32+
private DomainUserDetailsServiceImpl userDetailsService;
33+
34+
private User testUser;
35+
36+
@BeforeEach
37+
public void setUp() {
38+
// Create a test user
39+
testUser = new User();
40+
testUser.setId(1L);
41+
testUser.setLogin("testuser");
42+
testUser.setPassword("encodedPassword");
43+
testUser.setActivated(true);
44+
testUser.setEmail("[email protected]");
45+
46+
// Add some authorities to the test user
47+
Authority authority = new Authority();
48+
authority.setName("ROLE_USER");
49+
testUser.setAuthorities(Collections.singleton(authority));
50+
}
51+
52+
@Test
53+
public void testLoadUserByUsername_Success() {
54+
// Mock the repository to return the test user
55+
when(userRepository.findOneWithAuthoritiesByLogin(anyString())).thenReturn(Optional.of(testUser));
56+
57+
// Call the method under test
58+
UserDetails userDetails = userDetailsService.loadUserByUsername("testuser");
59+
60+
// Verify the interactions with the mock
61+
verify(userRepository, times(1)).findOneWithAuthoritiesByLogin("testuser");
62+
63+
// Assert the returned user details
64+
assertNotNull(userDetails);
65+
assertEquals("testuser", userDetails.getUsername());
66+
assertEquals("encodedPassword", userDetails.getPassword());
67+
assertTrue(userDetails.isAccountNonExpired());
68+
assertTrue(userDetails.isAccountNonLocked());
69+
assertTrue(userDetails.isCredentialsNonExpired());
70+
assertTrue(userDetails.isEnabled());
71+
assertEquals(1, userDetails.getAuthorities().size());
72+
assertTrue(userDetails.getAuthorities().contains(new SimpleGrantedAuthority("ROLE_USER")));
73+
}
74+
75+
@Test
76+
public void testLoadUserByUsername_UserNotActivated() {
77+
// Create a test user that is not activated
78+
User inactiveUser = new User();
79+
inactiveUser.setId(1L);
80+
inactiveUser.setLogin("inactiveuser");
81+
inactiveUser.setPassword("encodedPassword");
82+
inactiveUser.setActivated(false);
83+
inactiveUser.setEmail("[email protected]");
84+
85+
// Mock the repository to return the inactive user
86+
when(userRepository.findOneWithAuthoritiesByLogin(anyString())).thenReturn(Optional.of(inactiveUser));
87+
88+
// Call the method under test and expect an exception
89+
assertThrows(UserNotActivatedException.class, () -> userDetailsService.loadUserByUsername("inactiveuser"));
90+
91+
// Verify the interactions with the mock
92+
verify(userRepository, times(1)).findOneWithAuthoritiesByLogin("inactiveuser");
93+
}
94+
95+
@Test
96+
public void testLoadUserByUsername_UserNotFound() {
97+
// Mock the repository to return an empty optional
98+
when(userRepository.findOneWithAuthoritiesByLogin(anyString())).thenReturn(Optional.empty());
99+
100+
// Call the method under test and expect an exception
101+
assertThrows(UsernameNotFoundException.class, () -> userDetailsService.loadUserByUsername("nonexistentuser"));
102+
103+
// Verify the interactions with the mock
104+
verify(userRepository, times(1)).findOneWithAuthoritiesByLogin("nonexistentuser");
105+
}
106+
}

0 commit comments

Comments
 (0)