Skip to content

Commit 7d37c94

Browse files
Merge pull request #73 from leonard1thecoder/49-create-unit-and-integration-tests-for-users-and-retail-company-functionality
49 create unit and integration tests for users and retail company functionality
2 parents 76c9687 + 0b173b5 commit 7d37c94

File tree

3 files changed

+137
-62
lines changed

3 files changed

+137
-62
lines changed
Lines changed: 5 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,15 @@
11
package com.users.application.dtos;
22

33

4-
import lombok.Getter;
5-
import lombok.NoArgsConstructor;
6-
import lombok.ToString;
4+
import lombok.*;
5+
76

8-
@Getter
97
@NoArgsConstructor
10-
@ToString
8+
@Data
9+
@AllArgsConstructor
10+
@Builder
1111
public class LoginRequest {
1212
private String usersEmailAddress;
1313
private String usersPassword;
1414

15-
public LoginRequest(String usersEmailAddress, String usersPassword) {
16-
this.usersEmailAddress = usersEmailAddress;
17-
this.usersPassword = usersPassword;
18-
}
19-
20-
public String getUsersEmailAddress() {
21-
return usersEmailAddress;
22-
}
23-
24-
public String getUsersPassword() {
25-
return usersPassword;
26-
}
27-
28-
public void setUsersEmailAddress(String usersEmailAddress) {
29-
this.usersEmailAddress = usersEmailAddress;
30-
}
31-
32-
public void setUsersPassword(String usersPassword) {
33-
this.usersPassword = usersPassword;
34-
}
3515
}

users_microservice/src/main/java/com/users/application/services/UsersService.java

Lines changed: 47 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import com.utils.application.Execute;
1313
import com.utils.application.globalExceptions.ServiceHandlerException;
1414
import jakarta.transaction.Transactional;
15+
import lombok.Getter;
1516
import lombok.Setter;
1617
import org.slf4j.Logger;
1718
import org.slf4j.LoggerFactory;
@@ -21,7 +22,6 @@
2122
import org.springframework.security.authentication.AuthenticationManager;
2223
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
2324
import org.springframework.security.core.AuthenticationException;
24-
import org.springframework.security.crypto.encrypt.RsaSecretEncryptor;
2525
import org.springframework.security.crypto.password.PasswordEncoder;
2626
import org.springframework.stereotype.Service;
2727

@@ -48,27 +48,28 @@ public class UsersService implements Execute<List<UsersResponse>> {
4848
private static UsersRepository usersRepository;
4949
private UsersRegisterRequest usersRegisterRequest;
5050
private UpdatePasswordRequest updatePasswordRequest;
51-
private LoginRequest loginRequest;
51+
private static LoginRequest loginRequest;
5252
private static IdentityNoRequest identityNoRequest;
53+
@Getter
5354
private FindByIdRequest findByIdRequest;
5455
private static JwtService jwtService;
55-
private static RsaSecretEncryptor rsaSecretEncryptor;
56-
private AuthenticationManager authenticationManager;
56+
57+
private static AuthenticationManager authenticationManager;
5758
@Setter
5859
private static UsersMapper usersMapper;
5960
private static PasswordEncoder passwordEncoder;
6061
private static RedisService redisService;
6162
private UsersFieldsDataValidator validator;
6263

6364
@Autowired
64-
public UsersService(@Autowired RedisTemplate redisTemplate, @Autowired RsaSecretEncryptor rsaSecretEncryptor, PasswordEncoder passwordEncoder, @Autowired JwtService jwtService, @Autowired AuthenticationManager authenticationManager, @Autowired UsersRepository usersRepository, @Autowired UsersMapper usersMapper) {
65+
public UsersService(@Autowired RedisTemplate redisTemplate, PasswordEncoder passwordEncoder, @Autowired JwtService jwtService, @Autowired AuthenticationManager authenticationManager, @Autowired UsersRepository usersRepository, @Autowired UsersMapper usersMapper) {
6566
setUsersRepository(usersRepository);
66-
UsersService.rsaSecretEncryptor = rsaSecretEncryptor;
67+
6768
UsersService.passwordEncoder = passwordEncoder;
6869
UsersService.usersMapper = usersMapper;
6970
UsersService.jwtService = jwtService;
7071
UsersService.redisService = new RedisService(redisTemplate);
71-
this.authenticationManager = authenticationManager;
72+
UsersService.authenticationManager = authenticationManager;
7273
}
7374

7475
public UsersFullNameRequest usersFullNameRequest() {
@@ -80,10 +81,6 @@ public UsersService setUsersFullNameRequest(UsersFullNameRequest usersFullNameRe
8081
return this;
8182
}
8283

83-
public FindByIdRequest getFindByIdRequest() {
84-
return findByIdRequest;
85-
}
86-
8784
public void setFindByIdRequest(FindByIdRequest findByIdRequest) {
8885
this.findByIdRequest = findByIdRequest;
8986
}
@@ -92,9 +89,8 @@ public UsersRegisterRequest usersRegisterRequest() {
9289
return usersRegisterRequest;
9390
}
9491

95-
public UsersService setUsersRegisterRequest(UsersRegisterRequest usersRegisterRequest) {
92+
public void setUsersRegisterRequest(UsersRegisterRequest usersRegisterRequest) {
9693
this.usersRegisterRequest = usersRegisterRequest;
97-
return this;
9894
}
9995

10096
public LoginRequest loginRequest() {
@@ -105,23 +101,20 @@ public IdentityNoRequest identityNoRequest() {
105101
return identityNoRequest;
106102
}
107103

108-
public UsersService setIdentityNoRequest(IdentityNoRequest identityNoRequest) {
104+
public void setIdentityNoRequest(IdentityNoRequest identityNoRequest) {
109105
this.identityNoRequest = identityNoRequest;
110-
return this;
111106
}
112107

113-
public UsersService setLoginRequest(LoginRequest loginRequest) {
108+
public void setLoginRequest(LoginRequest loginRequest) {
114109
this.loginRequest = loginRequest;
115-
return this;
116110
}
117111

118112
public UpdatePasswordRequest updatePasswordRequest() {
119113
return updatePasswordRequest;
120114
}
121115

122-
public UsersService setUpdatePasswordRequest(UpdatePasswordRequest updatePasswordRequest) {
116+
public void setUpdatePasswordRequest(UpdatePasswordRequest updatePasswordRequest) {
123117
this.updatePasswordRequest = updatePasswordRequest;
124-
return this;
125118
}
126119

127120

@@ -207,14 +200,14 @@ private List<UsersResponse> registerUsers() {
207200

208201

209202
private List<UsersResponse> findUserByUsersIdentityNo() {
210-
String encrypt = rsaSecretEncryptor.encrypt(getInstance().validateIdentityNo(identityNoRequest.getUsersIdentityNo()));
203+
String encrypt = getInstance().validateIdentityNo(identityNoRequest.getUsersIdentityNo());
211204
UsersResponse redisUserResponse = redisService.get(encrypt, UsersResponse.class);
212205

213206
if (redisUserResponse != null) {
214207
logger.info("User with identity no : {} successfully found from cache, data is {} ", redisUserResponse.getUsersIdentityNo(), redisUserResponse);
215208
return List.of(redisUserResponse);
216209
} else {
217-
var responseList = usersRepository.findByUserIdentityNo(rsaSecretEncryptor.encrypt(identityNoRequest.getUsersIdentityNo())).stream().map(usersMapper::toDto).toList();
210+
var responseList = usersRepository.findByUserIdentityNo(identityNoRequest.getUsersIdentityNo()).stream().map(usersMapper::toDto).toList();
218211

219212
if (responseList.size() == 1) {
220213
var jpaUserResponse = responseList.get(0);
@@ -334,8 +327,9 @@ private List<UsersResponse> findAllUsersByName() {
334327

335328
@Transactional
336329
private List<UsersResponse> login() {
337-
var encrypt = passwordEncoder.encode(loginRequest().getUsersEmailAddress());
330+
var encrypt = loginRequest().getUsersEmailAddress();
338331
UsersResponse redisUserResponse = redisService.get(encrypt, UsersResponse.class);
332+
339333
UsersResponse jpaUserResponse;
340334
if (redisUserResponse != null) {
341335
System.out.println("redis");
@@ -345,16 +339,35 @@ private List<UsersResponse> login() {
345339
} else {
346340
System.out.println("Jpa");
347341
redisStatus = false;
348-
var entity = usersMapper.toEntity(loginRequest());
349-
jwtService.generateToken(entity);
350342

351-
var responseList = usersRepository.findByUserEmailAddress(entity.getUserEmailAddress()).stream().map(usersMapper::toDto).toList();
352343

344+
var optionalEntity = usersRepository.findByUserEmailAddress(loginRequest().getUsersEmailAddress());
345+
346+
347+
if (optionalEntity.isPresent()) {
348+
349+
var users = optionalEntity.get();
350+
List<Users> list = new ArrayList<>();
351+
list.add(users);
352+
jpaUserResponse = list.stream().map(s -> UsersResponse
353+
.builder()
354+
.usersAge(users.getUserAge())
355+
.id(users.getId())
356+
.usersStatus(users.getUserStatus())
357+
.usersEmailAddress(users.getUserEmailAddress())
358+
.usersRegistrationDate(users.getUserRegistrationDate())
359+
.usersModifiedDate(users.getUserModifiedDate())
360+
.usersFullName(users.getUserFullName())
361+
.usersIdentityNo(users.getUserIdentityNo())
362+
.cellphoneNo(users.getUserCellphoneNo())
363+
.privileges(users.getFk_privilege_id())
364+
.build()).toList()
365+
.get(0);
353366

354-
if (responseList.size() == 1) {
355367
passwordStatus = true;
356-
jpaUserResponse = responseList.get(0);
357-
redisService.set(encrypt, jpaUserResponse, 6L, TimeUnit.HOURS);
368+
jwtService.generateToken(optionalEntity.get());
369+
370+
358371
} else {
359372
jpaUserResponse = null;
360373
passwordStatus = false;
@@ -369,9 +382,13 @@ private List<UsersResponse> login() {
369382

370383
return List.of(redisUserResponse);
371384
} else {
372-
logger.info("user with email {} successfully logged in using jpa data : {}", loginRequest().getUsersEmailAddress(), jpaUserResponse);
373385

374386
authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(loginRequest().getUsersEmailAddress(), loginRequest().getUsersPassword()));
387+
logger.info("user with email {} successfully logged in using jpa data : {}", loginRequest().getUsersEmailAddress(), jpaUserResponse);
388+
redisService.set(encrypt, jpaUserResponse, 6L, TimeUnit.HOURS);
389+
390+
logger.info("cached login data : {}", redisService.get(encrypt,UsersResponse.class));
391+
375392
return List.of(jpaUserResponse);
376393
}
377394
} catch (AuthenticationException e) {
@@ -385,7 +402,7 @@ private List<UsersResponse> login() {
385402
var resolveIssue = "please provide correct password or update password";
386403
throw throwExceptionAndReport(new UsersPasswordIncorrectException(errorMessage), errorMessage, resolveIssue);
387404
} else {
388-
var errorMessage = UsersControllerAdvice.setMessage("email address" + loginRequest().getUsersEmailAddress() + " is not found");
405+
var errorMessage = UsersControllerAdvice.setMessage("email address " + loginRequest().getUsersEmailAddress() + " not found, verify your email or register");
389406
var resolveIssue = "please provide correct password or register with the email address";
390407
throw throwExceptionAndReport(new UserNotFoundException(errorMessage), errorMessage, resolveIssue);
391408
}

users_microservice/src/test/java/com/users/application/service/TestUsersService.java

Lines changed: 85 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,7 @@
44
import com.users.application.configurations.ApplicationConfig;
55
import com.users.application.configurations.JwtAuthFilterConfig;
66
import com.users.application.configurations.SecurityConfig;
7-
import com.users.application.dtos.FindByIdRequest;
8-
import com.users.application.dtos.IdentityNoRequest;
9-
import com.users.application.dtos.UsersRegisterRequest;
10-
import com.users.application.dtos.UsersResponse;
7+
import com.users.application.dtos.*;
118
import com.users.application.entities.Users;
129
import com.users.application.exceptions.UserNotFoundException;
1310
import com.users.application.exceptions.UsersExistsException;
@@ -60,10 +57,10 @@ public void initRegisterRequest() {
6057

6158
request = UsersRegisterRequest.builder()
6259
.privileges(new Privileges(1, "users", (byte) 1))
63-
.userCellphoneNo("0851231230")
64-
.userEmailAddress("email2@email.com")
60+
.userCellphoneNo("0891231230")
61+
.userEmailAddress("em2ail2@email.com")
6562
.userFullName("Sizolwakhe Leonard Mthimunye")
66-
.userIdentityNo("9708216953188")
63+
.userIdentityNo("9708316953188")
6764
.userPassword("#[email protected]")
6865
.userStatus((short) 1)
6966
.build();
@@ -170,6 +167,87 @@ void testFindUserByUsersId_findUsersByExistingIdInDb() throws NoSuchMethodExcept
170167

171168
}
172169

170+
@Nested
171+
class TestLogin{
172+
@Test
173+
void testLoginMethod_successfulLogin() throws InvocationTargetException, IllegalAccessException, NoSuchMethodException {
174+
//when
175+
LoginRequest request = LoginRequest.builder()
176+
.usersEmailAddress("[email protected]")
177+
.usersPassword("#[email protected]")
178+
.build();
179+
service.setLoginRequest(request);
180+
181+
//Given
182+
183+
Method loginMethod = UsersService.class.getDeclaredMethod("login");
184+
loginMethod.setAccessible(true);
185+
186+
var list = (List<UsersResponse>)loginMethod.invoke(service);
187+
188+
//Assert
189+
Assertions.assertEquals(1, list.size());
190+
}
191+
192+
@Test
193+
void testLoginMethod_unsuccessfulLoginIncorrectPassword() throws InvocationTargetException, IllegalAccessException, NoSuchMethodException {
194+
//when
195+
LoginRequest request = LoginRequest.builder()
196+
.usersEmailAddress("[email protected]")
197+
.usersPassword("#[email protected]")
198+
.build();
199+
service.setLoginRequest(request);
200+
201+
//Given
202+
203+
Method loginMethod = UsersService.class.getDeclaredMethod("login");
204+
loginMethod.setAccessible(true);
205+
206+
207+
try {
208+
loginMethod.invoke(service);
209+
} catch (InvocationTargetException e) {
210+
UserNotFoundException throwable = Assertions.assertThrows(UserNotFoundException.class, () -> {
211+
throw new UserNotFoundException("password inserted is incorrect");
212+
});
213+
214+
Assertions.assertEquals(throwable.getMessage(), getMessageFromCause(e.getCause().toString()));
215+
}
216+
217+
218+
}
219+
220+
@Test
221+
void testLoginMethod_unsuccessfulLoginIncorrectEmailAddress() throws InvocationTargetException, IllegalAccessException, NoSuchMethodException {
222+
//when
223+
LoginRequest request = LoginRequest.builder()
224+
.usersEmailAddress("[email protected]")
225+
.usersPassword("#[email protected]")
226+
.build();
227+
service.setLoginRequest(request);
228+
229+
//Given
230+
231+
Method loginMethod = UsersService.class.getDeclaredMethod("login");
232+
loginMethod.setAccessible(true);
233+
234+
235+
try {
236+
loginMethod.invoke(service);
237+
} catch (InvocationTargetException e) {
238+
UserNotFoundException throwable = Assertions.assertThrows(UserNotFoundException.class, () -> {
239+
throw new UserNotFoundException("email address " + request.getUsersEmailAddress() + " not found, verify your email or register");
240+
});
241+
242+
Assertions.assertEquals(throwable.getMessage(), getMessageFromCause(e.getCause().toString()));
243+
}
244+
245+
246+
}
247+
}
248+
249+
250+
173251

174252
private String getMessageFromCause(String cause) {
175253
var index = cause.indexOf(":") + 2;

0 commit comments

Comments
 (0)