55. User logging in test (#5)

This commit is contained in:
Art
2021-09-07 21:56:18 +03:00
parent cebe382dbd
commit ad785f05b1
3 changed files with 110 additions and 3 deletions

View File

@ -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);

View File

@ -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();
}
}

View File

@ -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");
}
}