55. User logging in test (#5)
This commit is contained in:
@ -42,7 +42,7 @@ public class UserServiceImpl implements UserService {
|
||||
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
|
||||
User user = userRepository
|
||||
.findByUsername(username)
|
||||
.orElseThrow(() -> new UserNotFoundException(String.format(USERNAME_NOT_FOUND_MSG, username)));
|
||||
.orElseThrow(() -> new UsernameNotFoundException(String.format(USERNAME_NOT_FOUND_MSG, username)));
|
||||
user.setLastLoginDateDisplay(user.getLastLoginDate());
|
||||
user.setLastLoginDate(LocalDateTime.now());
|
||||
return new UserPrincipal(user);
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package net.shyshkin.study.fullstack.supportportal.backend.controller;
|
||||
|
||||
import com.auth0.jwt.interfaces.JWTVerifier;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.shyshkin.study.fullstack.supportportal.backend.common.BaseUserTest;
|
||||
import net.shyshkin.study.fullstack.supportportal.backend.domain.HttpResponse;
|
||||
@ -17,6 +18,7 @@ import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.RequestEntity;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
|
||||
import static net.shyshkin.study.fullstack.supportportal.backend.constant.SecurityConstants.JWT_TOKEN_HEADER;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.junit.jupiter.api.Assertions.assertAll;
|
||||
import static org.springframework.http.HttpStatus.*;
|
||||
@ -32,6 +34,9 @@ class UserResourceTest extends BaseUserTest {
|
||||
@Autowired
|
||||
JwtTokenProvider jwtTokenProvider;
|
||||
|
||||
@Autowired
|
||||
JWTVerifier jwtVerifier;
|
||||
|
||||
@Test
|
||||
@Order(10)
|
||||
void showUserHome_forbidden() {
|
||||
@ -159,4 +164,106 @@ class UserResourceTest extends BaseUserTest {
|
||||
() -> assertThat(httpResponse.getMessage()).isEqualTo(expectedMessage)
|
||||
));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(50)
|
||||
void loginUser_existingUser() {
|
||||
|
||||
//given
|
||||
User fakeUser = createRandomUser();
|
||||
String password = fakeUser.getPassword().replace("{noop}", "");
|
||||
String username = fakeUser.getUsername();
|
||||
userRepository.save(fakeUser);
|
||||
String expectedMessage = "User logged in successfully";
|
||||
|
||||
//when
|
||||
User userLogin = User.builder()
|
||||
.username(username)
|
||||
.password(password)
|
||||
.build();
|
||||
var responseEntity = restTemplate.postForEntity("/user/login", userLogin, HttpResponse.class);
|
||||
|
||||
//then
|
||||
log.debug("Response Entity: {}", responseEntity);
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(OK);
|
||||
assertThat(responseEntity.getBody())
|
||||
.isNotNull()
|
||||
.hasNoNullFieldsOrProperties()
|
||||
.satisfies(httpResponse -> assertAll(
|
||||
() -> assertThat(httpResponse.getHttpStatusCode()).isEqualTo(200),
|
||||
() -> assertThat(httpResponse.getHttpStatus()).isEqualTo(OK),
|
||||
() -> assertThat(httpResponse.getReason()).isEqualTo("OK"),
|
||||
() -> assertThat(httpResponse.getMessage()).isEqualTo(expectedMessage)
|
||||
));
|
||||
String token = responseEntity.getHeaders().getFirst(JWT_TOKEN_HEADER);
|
||||
log.debug("Token: {}", token);
|
||||
assertThat(token).isNotBlank();
|
||||
assertThat(jwtVerifier.verify(token).getSubject()).isEqualTo(username);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(51)
|
||||
void loginUser_absentUser() {
|
||||
|
||||
//given
|
||||
String password = "absentUserPass";
|
||||
String username = FAKER.name().username();
|
||||
String expectedMessage = "USERNAME / PASSWORD INCORRECT. PLEASE TRY AGAIN";
|
||||
|
||||
//when
|
||||
User userLogin = User.builder()
|
||||
.username(username)
|
||||
.password(password)
|
||||
.build();
|
||||
var responseEntity = restTemplate.postForEntity("/user/login", userLogin, HttpResponse.class);
|
||||
|
||||
//then
|
||||
log.debug("Response Entity: {}", responseEntity);
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(BAD_REQUEST);
|
||||
assertThat(responseEntity.getBody())
|
||||
.isNotNull()
|
||||
.hasNoNullFieldsOrProperties()
|
||||
.satisfies(httpResponse -> assertAll(
|
||||
() -> assertThat(httpResponse.getHttpStatusCode()).isEqualTo(400),
|
||||
() -> assertThat(httpResponse.getHttpStatus()).isEqualTo(BAD_REQUEST),
|
||||
() -> assertThat(httpResponse.getReason()).isEqualTo("BAD REQUEST"),
|
||||
() -> assertThat(httpResponse.getMessage()).isEqualTo(expectedMessage)
|
||||
));
|
||||
String token = responseEntity.getHeaders().getFirst(JWT_TOKEN_HEADER);
|
||||
log.debug("Token: {}", token);
|
||||
assertThat(token).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(52)
|
||||
void loginUser_wrongPassword() {
|
||||
|
||||
//given
|
||||
String password = "wrongPass";
|
||||
String username = user.getUsername();
|
||||
String expectedMessage = "USERNAME / PASSWORD INCORRECT. PLEASE TRY AGAIN";
|
||||
|
||||
//when
|
||||
User userLogin = User.builder()
|
||||
.username(username)
|
||||
.password(password)
|
||||
.build();
|
||||
var responseEntity = restTemplate.postForEntity("/user/login", userLogin, HttpResponse.class);
|
||||
|
||||
//then
|
||||
log.debug("Response Entity: {}", responseEntity);
|
||||
assertThat(responseEntity.getStatusCode()).isEqualTo(BAD_REQUEST);
|
||||
assertThat(responseEntity.getBody())
|
||||
.isNotNull()
|
||||
.hasNoNullFieldsOrProperties()
|
||||
.satisfies(httpResponse -> assertAll(
|
||||
() -> assertThat(httpResponse.getHttpStatusCode()).isEqualTo(400),
|
||||
() -> assertThat(httpResponse.getHttpStatus()).isEqualTo(BAD_REQUEST),
|
||||
() -> assertThat(httpResponse.getReason()).isEqualTo("BAD REQUEST"),
|
||||
() -> assertThat(httpResponse.getMessage()).isEqualTo(expectedMessage)
|
||||
));
|
||||
String token = responseEntity.getHeaders().getFirst(JWT_TOKEN_HEADER);
|
||||
log.debug("Token: {}", token);
|
||||
assertThat(token).isNull();
|
||||
}
|
||||
}
|
||||
@ -3,11 +3,11 @@ package net.shyshkin.study.fullstack.supportportal.backend.service;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.shyshkin.study.fullstack.supportportal.backend.common.BaseUserTest;
|
||||
import net.shyshkin.study.fullstack.supportportal.backend.domain.User;
|
||||
import net.shyshkin.study.fullstack.supportportal.backend.exception.domain.UserNotFoundException;
|
||||
import org.assertj.core.api.ThrowableAssert;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
import org.springframework.security.core.userdetails.UsernameNotFoundException;
|
||||
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.Optional;
|
||||
@ -58,7 +58,7 @@ class UserServiceTest extends BaseUserTest {
|
||||
|
||||
//then
|
||||
assertThatThrownBy(execution)
|
||||
.isInstanceOf(UserNotFoundException.class)
|
||||
.isInstanceOf(UsernameNotFoundException.class)
|
||||
.hasMessage("User with username `" + username + "` not found");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user