From a1e5b6883e8bf0646bbb0dc9b924633849b0b4d5 Mon Sep 17 00:00:00 2001 From: Art Date: Tue, 28 Sep 2021 16:26:43 +0300 Subject: [PATCH] 27.4.1. Modified endpoints related to profile image - backend (#27) --- .../backend/constant/FileConstant.java | 2 +- .../backend/controller/UserResource.java | 15 ++--- .../backend/service/UserService.java | 4 +- .../backend/service/UserServiceImpl.java | 21 +++--- .../src/main/resources/application.yml | 2 +- .../backend/common/BaseUserTest.java | 5 +- .../backend/controller/UserResourceTest.java | 12 ++-- .../controller/UserResourceUnSecureTest.java | 66 ++++++++++--------- .../backend/service/UserServiceTest.java | 4 +- 9 files changed, 62 insertions(+), 69 deletions(-) diff --git a/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/constant/FileConstant.java b/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/constant/FileConstant.java index c414a12..612a913 100644 --- a/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/constant/FileConstant.java +++ b/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/constant/FileConstant.java @@ -6,7 +6,7 @@ public class FileConstant { public static final String JPG_EXTENSION = "jpg"; public static final String USER_FOLDER = System.getProperty("user.home") + "/supportportal/user/"; public static final String DIRECTORY_CREATED = "Created directory for: "; - public static final String DEFAULT_USER_IMAGE_PATH = "/user/image/profile/"; + public static final String DEFAULT_USER_IMAGE_URI_PATTERN = "/user/%s/profile-image"; public static final String USER_IMAGE_FILENAME = "avatar.jpg"; public static final String FILE_SAVED_IN_FILE_SYSTEM = "Saved file in file system by name: "; public static final String DOT = "."; diff --git a/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/controller/UserResource.java b/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/controller/UserResource.java index e4bde1a..3dff04d 100644 --- a/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/controller/UserResource.java +++ b/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/controller/UserResource.java @@ -104,22 +104,17 @@ public class UserResource { .build(); } - @PutMapping("{username}/profileImage") - public User updateProfileImage(@PathVariable String username, MultipartFile profileImage) { - return userService.updateProfileImage(username, profileImage); + @PutMapping("{userId}/profile-image") + public User updateProfileImage(@PathVariable UUID userId, MultipartFile profileImage) { + return userService.updateProfileImage(userId, profileImage); } - @GetMapping(path = "{username}/image/profile", produces = MediaType.IMAGE_JPEG_VALUE) - public byte[] getProfileImage(@PathVariable String username) throws IOException { - return userService.getProfileImage(username); - } - - @GetMapping(path = "image/profile/{userId}/{filename}", produces = MediaType.IMAGE_JPEG_VALUE) + @GetMapping(path = "{userId}/profile-image/{filename}", produces = MediaType.IMAGE_JPEG_VALUE) public byte[] getProfileImageByUserId(@PathVariable UUID userId, @PathVariable String filename) throws IOException { return userService.getImageByUserId(userId, filename); } - @GetMapping(path = "image/profile/{userId}", produces = MediaType.IMAGE_JPEG_VALUE) + @GetMapping(path = "{userId}/profile-image", produces = MediaType.IMAGE_JPEG_VALUE) public byte[] getDefaultProfileImage(@PathVariable UUID userId) { return userService.getDefaultProfileImage(userId); } diff --git a/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserService.java b/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserService.java index f88f36f..8045e42 100644 --- a/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserService.java +++ b/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserService.java @@ -30,9 +30,7 @@ public interface UserService extends UserDetailsService { void resetPassword(String email); - User updateProfileImage(String username, MultipartFile profileImage); - - byte[] getProfileImage(String username) throws IOException; + User updateProfileImage(UUID userId, MultipartFile profileImage); byte[] getImageByUserId(UUID userId, String filename) throws IOException; diff --git a/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserServiceImpl.java b/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserServiceImpl.java index 18a6abf..08e3b1e 100644 --- a/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserServiceImpl.java +++ b/support-portal-backend/src/main/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserServiceImpl.java @@ -105,15 +105,13 @@ public class UserServiceImpl implements UserService { private String generateDefaultProfileImageUrl(UUID userId) { return ServletUriComponentsBuilder.fromCurrentContextPath() - .path(DEFAULT_USER_IMAGE_PATH) - .pathSegment(userId.toString()) + .path(String.format(DEFAULT_USER_IMAGE_URI_PATTERN, userId)) .toUriString(); } private String generateProfileImageUrl(UUID userId) { return ServletUriComponentsBuilder.fromCurrentContextPath() - .path(DEFAULT_USER_IMAGE_PATH) - .pathSegment(userId.toString()) + .path(String.format(DEFAULT_USER_IMAGE_URI_PATTERN, userId)) .pathSegment(USER_IMAGE_FILENAME) .toUriString(); } @@ -265,20 +263,19 @@ public class UserServiceImpl implements UserService { } @Override - public User updateProfileImage(String username, MultipartFile profileImage) { - User user = findByUsername(username); + public User updateProfileImage(UUID userId, MultipartFile profileImage) { + User user = findByUserId(userId); saveProfileImage(user, profileImage); return user; } - @Override - public byte[] getProfileImage(String username) throws IOException { - User user = findByUsername(username); - return getImageByUserId(user.getUserId(), USER_IMAGE_FILENAME); - } - @Override public byte[] getImageByUserId(UUID userId, String filename) throws IOException { + + if (!userRepository.existsByUserId(userId)) { + throw new UserNotFoundException(USER_NOT_FOUND_MSG); + } + Path userProfileImagePath = Paths .get(USER_FOLDER, userId.toString(), filename); return Files.readAllBytes(userProfileImagePath); diff --git a/support-portal-backend/src/main/resources/application.yml b/support-portal-backend/src/main/resources/application.yml index 8468af3..d126fc7 100644 --- a/support-portal-backend/src/main/resources/application.yml +++ b/support-portal-backend/src/main/resources/application.yml @@ -40,7 +40,7 @@ spring: resources: add-mappings: false app: - public-urls: /user/login,/user/register,/user/*/image/**,/user/image/** + public-urls: /user/login,/user/register,/user/*/profile-image/** cors: allowed-origins: http://localhost:4200,https://localhost:4200,http://art-support-portal.s3-website.eu-north-1.amazonaws.com,http://portal.shyshkin.net jwt: diff --git a/support-portal-backend/src/test/java/net/shyshkin/study/fullstack/supportportal/backend/common/BaseUserTest.java b/support-portal-backend/src/test/java/net/shyshkin/study/fullstack/supportportal/backend/common/BaseUserTest.java index 537f7f2..d1a57a3 100644 --- a/support-portal-backend/src/test/java/net/shyshkin/study/fullstack/supportportal/backend/common/BaseUserTest.java +++ b/support-portal-backend/src/test/java/net/shyshkin/study/fullstack/supportportal/backend/common/BaseUserTest.java @@ -12,7 +12,7 @@ import org.springframework.web.util.UriComponentsBuilder; import java.time.LocalDateTime; import java.util.UUID; -import static net.shyshkin.study.fullstack.supportportal.backend.constant.FileConstant.DEFAULT_USER_IMAGE_PATH; +import static net.shyshkin.study.fullstack.supportportal.backend.constant.FileConstant.DEFAULT_USER_IMAGE_URI_PATTERN; import static net.shyshkin.study.fullstack.supportportal.backend.domain.Role.ROLE_ADMIN; @SpringBootTest @@ -61,8 +61,7 @@ public abstract class BaseUserTest { private String generateProfileImageUrl(UUID userId) { return UriComponentsBuilder .fromUriString("http://localhost:8080") - .path(DEFAULT_USER_IMAGE_PATH) - .pathSegment(userId.toString()) + .path(String.format(DEFAULT_USER_IMAGE_URI_PATTERN, userId)) // .pathSegment(USER_IMAGE_FILENAME) .toUriString(); } diff --git a/support-portal-backend/src/test/java/net/shyshkin/study/fullstack/supportportal/backend/controller/UserResourceTest.java b/support-portal-backend/src/test/java/net/shyshkin/study/fullstack/supportportal/backend/controller/UserResourceTest.java index 0f8a660..efa2b38 100644 --- a/support-portal-backend/src/test/java/net/shyshkin/study/fullstack/supportportal/backend/controller/UserResourceTest.java +++ b/support-portal-backend/src/test/java/net/shyshkin/study/fullstack/supportportal/backend/controller/UserResourceTest.java @@ -7,7 +7,6 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; import net.shyshkin.study.fullstack.supportportal.backend.common.BaseUserTest; -import net.shyshkin.study.fullstack.supportportal.backend.constant.FileConstant; import net.shyshkin.study.fullstack.supportportal.backend.domain.HttpResponse; import net.shyshkin.study.fullstack.supportportal.backend.domain.Role; import net.shyshkin.study.fullstack.supportportal.backend.domain.User; @@ -36,6 +35,7 @@ import java.time.temporal.ChronoUnit; import java.util.Map; import java.util.UUID; +import static net.shyshkin.study.fullstack.supportportal.backend.constant.FileConstant.*; import static net.shyshkin.study.fullstack.supportportal.backend.constant.SecurityConstants.JWT_TOKEN_HEADER; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.within; @@ -216,7 +216,7 @@ class UserResourceTest extends BaseUserTest { .hasFieldOrPropertyWithValue("isActive", true) .hasFieldOrPropertyWithValue("isNotLocked", true) .hasFieldOrPropertyWithValue("role", "ROLE_ADMIN") - .satisfies(u -> assertThat(u.getProfileImageUrl()).endsWith(String.format("/user/image/profile/%s", u.getUserId()))); + .satisfies(u -> assertThat(u.getProfileImageUrl()).endsWith(String.format(DEFAULT_USER_IMAGE_URI_PATTERN, u.getUserId()))); String token = responseEntity.getHeaders().getFirst(JWT_TOKEN_HEADER); log.debug("Token: {}", token); @@ -573,10 +573,10 @@ class UserResourceTest extends BaseUserTest { .hasFieldOrPropertyWithValue("isActive", true) .hasFieldOrPropertyWithValue("isNotLocked", true) .hasFieldOrPropertyWithValue("role", "ROLE_ADMIN") - .satisfies(u -> assertThat(u.getProfileImageUrl()).endsWith(String.format("/user/image/profile/%s/avatar.jpg", u.getUserId()))); + .satisfies(u -> assertThat(u.getProfileImageUrl()).endsWith(String.format(DEFAULT_USER_IMAGE_URI_PATTERN.concat("/avatar.jpg"), u.getUserId()))); User createdUser = responseEntity.getBody(); - Path path = Path.of(FileConstant.USER_FOLDER, createdUser.getUserId().toString(), FileConstant.USER_IMAGE_FILENAME); + Path path = Path.of(USER_FOLDER, createdUser.getUserId().toString(), USER_IMAGE_FILENAME); log.debug("Path of created file: {}", path); assertThat(Files.exists(path)).isTrue(); assertThat(Files.getLastModifiedTime(path).toInstant()).isCloseTo(Instant.now(), within(1, ChronoUnit.SECONDS)); @@ -632,10 +632,10 @@ class UserResourceTest extends BaseUserTest { .hasFieldOrPropertyWithValue("isActive", true) .hasFieldOrPropertyWithValue("isNotLocked", true) .hasFieldOrPropertyWithValue("role", "ROLE_ADMIN") - .satisfies(u -> assertThat(u.getProfileImageUrl()).endsWith(String.format("/user/image/profile/%s/avatar.jpg", u.getUserId()))); + .satisfies(u -> assertThat(u.getProfileImageUrl()).endsWith(String.format(DEFAULT_USER_IMAGE_URI_PATTERN.concat("/avatar.jpg"), user.getUserId()))); User createdUser = responseEntity.getBody(); - Path path = Path.of(FileConstant.USER_FOLDER, createdUser.getUserId().toString(), FileConstant.USER_IMAGE_FILENAME); + Path path = Path.of(USER_FOLDER, createdUser.getUserId().toString(), USER_IMAGE_FILENAME); log.debug("Path of created file: {}", path); assertThat(Files.exists(path)).isTrue(); assertThat(Files.getLastModifiedTime(path).toInstant()).isCloseTo(Instant.now(), within(1, ChronoUnit.SECONDS)); diff --git a/support-portal-backend/src/test/java/net/shyshkin/study/fullstack/supportportal/backend/controller/UserResourceUnSecureTest.java b/support-portal-backend/src/test/java/net/shyshkin/study/fullstack/supportportal/backend/controller/UserResourceUnSecureTest.java index e9929bc..745d293 100644 --- a/support-portal-backend/src/test/java/net/shyshkin/study/fullstack/supportportal/backend/controller/UserResourceUnSecureTest.java +++ b/support-portal-backend/src/test/java/net/shyshkin/study/fullstack/supportportal/backend/controller/UserResourceUnSecureTest.java @@ -3,7 +3,6 @@ package net.shyshkin.study.fullstack.supportportal.backend.controller; import lombok.Data; import lombok.extern.slf4j.Slf4j; import net.shyshkin.study.fullstack.supportportal.backend.common.BaseUserTest; -import net.shyshkin.study.fullstack.supportportal.backend.constant.FileConstant; import net.shyshkin.study.fullstack.supportportal.backend.domain.HttpResponse; import net.shyshkin.study.fullstack.supportportal.backend.domain.Role; import net.shyshkin.study.fullstack.supportportal.backend.domain.User; @@ -34,6 +33,7 @@ import java.util.List; import java.util.Map; import java.util.UUID; +import static net.shyshkin.study.fullstack.supportportal.backend.constant.FileConstant.*; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.within; import static org.springframework.http.HttpStatus.*; @@ -52,6 +52,10 @@ class UserResourceUnSecureTest extends BaseUserTest { @Autowired UserRepository userRepository; + public static final String USER_IMAGE_ENDPOINT_TEMPLATE = "/user/{userId}/profile-image"; + public static final String USER_DEFAULT_IMAGE_URI_TEMPLATE = USER_IMAGE_ENDPOINT_TEMPLATE; + public static final String USER_CUSTOM_IMAGE_URI_TEMPLATE = "/user/{userId}/profile-image/{filename}"; + @Nested class AddNewUserTests { @@ -575,7 +579,7 @@ class UserResourceUnSecureTest extends BaseUserTest { void updateProfileImage_correct() throws IOException { //given - String username = user.getUsername(); + UUID userId = user.getUserId(); MultipartFile profileImage = new MockMultipartFile("profileImage", "test.png", "image/png", ("Spring Framework" + UUID.randomUUID()).getBytes()); @@ -585,7 +589,7 @@ class UserResourceUnSecureTest extends BaseUserTest { body.add("profileImage", profileImage.getResource()); //when - var requestEntity = RequestEntity.put("/user/{username}/profileImage", username) + var requestEntity = RequestEntity.put(USER_IMAGE_ENDPOINT_TEMPLATE, userId) .contentType(MULTIPART_FORM_DATA) .body(body); var responseEntity = restTemplate @@ -597,16 +601,16 @@ class UserResourceUnSecureTest extends BaseUserTest { assertThat(responseEntity.getBody()) .isNotNull() .hasNoNullFieldsOrPropertiesExcept("lastLoginDate", "lastLoginDateDisplay", "password", "id") - .hasFieldOrPropertyWithValue("username", username) + .hasFieldOrPropertyWithValue("username", user.getUsername()) .hasFieldOrPropertyWithValue("email", user.getEmail()) .hasFieldOrPropertyWithValue("firstName", user.getFirstName()) .hasFieldOrPropertyWithValue("lastName", user.getLastName()) .hasFieldOrPropertyWithValue("isActive", user.isActive()) .hasFieldOrPropertyWithValue("isNotLocked", user.isNotLocked()) .hasFieldOrPropertyWithValue("role", user.getRole()) - .satisfies(u -> assertThat(u.getProfileImageUrl()).endsWith(String.format("/user/image/profile/%s/avatar.jpg", user.getUserId()))); + .satisfies(u -> assertThat(u.getProfileImageUrl()).endsWith(String.format(DEFAULT_USER_IMAGE_URI_PATTERN.concat("/avatar.jpg"), user.getUserId()))); - Path path = Path.of(FileConstant.USER_FOLDER, user.getUserId().toString(), FileConstant.USER_IMAGE_FILENAME); + Path path = Path.of(USER_FOLDER, user.getUserId().toString(), USER_IMAGE_FILENAME); log.debug("Path of created file: {}", path); assertThat(Files.exists(path)).isTrue(); assertThat(Files.getLastModifiedTime(path).toInstant()).isCloseTo(Instant.now(), within(100, ChronoUnit.MILLIS)); @@ -616,8 +620,7 @@ class UserResourceUnSecureTest extends BaseUserTest { void updateProfileImage_absentUser() { //given - String username = FAKER.name().username(); - + UUID userId = UUID.randomUUID(); MultipartFile profileImage = new MockMultipartFile("profileImage", "test.txt", "text/plain", ("Spring Framework" + UUID.randomUUID()).getBytes()); @@ -627,7 +630,7 @@ class UserResourceUnSecureTest extends BaseUserTest { body.add("profileImage", profileImage.getResource()); //when - var requestEntity = RequestEntity.put("/user/{username}/profileImage", username) + var requestEntity = RequestEntity.put(USER_IMAGE_ENDPOINT_TEMPLATE, userId) .contentType(MULTIPART_FORM_DATA) .body(body); var responseEntity = restTemplate @@ -640,7 +643,7 @@ class UserResourceUnSecureTest extends BaseUserTest { .isNotNull() .hasNoNullFieldsOrProperties() .hasFieldOrPropertyWithValue("httpStatus", BAD_REQUEST) - .hasFieldOrPropertyWithValue("message", String.format("User with username `%s` not found", username)); + .hasFieldOrPropertyWithValue("message", "User not found"); } } @@ -660,11 +663,11 @@ class UserResourceUnSecureTest extends BaseUserTest { void getProfileImage_correct() throws IOException { //given - String username = user.getUsername(); - uploadProfileImage(username); + UUID userId = user.getUserId(); + uploadProfileImage(userId); //when - RequestEntity requestEntity = RequestEntity.get("/user/{username}/image/profile", username) + RequestEntity requestEntity = RequestEntity.get(USER_CUSTOM_IMAGE_URI_TEMPLATE, userId, USER_IMAGE_FILENAME) .accept(IMAGE_JPEG) .build(); var responseEntity = restTemplate.exchange(requestEntity, new ParameterizedTypeReference() { @@ -680,12 +683,12 @@ class UserResourceUnSecureTest extends BaseUserTest { void getProfileImage_absentUser() throws IOException { //given - String username = user.getUsername(); - uploadProfileImage(username); - String absentUsername = FAKER.name().username(); + UUID userId = user.getUserId(); + uploadProfileImage(userId); + UUID absentUserId = UUID.randomUUID(); //when - RequestEntity requestEntity = RequestEntity.get("/user/{username}/image/profile", absentUsername) + RequestEntity requestEntity = RequestEntity.get(USER_DEFAULT_IMAGE_URI_TEMPLATE, absentUserId) .accept(IMAGE_JPEG, APPLICATION_JSON) .build(); var responseEntity = restTemplate.exchange(requestEntity, HttpResponse.class); @@ -697,7 +700,7 @@ class UserResourceUnSecureTest extends BaseUserTest { .isNotNull() .hasNoNullFieldsOrProperties() .hasFieldOrPropertyWithValue("httpStatus", BAD_REQUEST) - .hasFieldOrPropertyWithValue("message", String.format("User with username `%s` not found", absentUsername)); + .hasFieldOrPropertyWithValue("message", "User not found"); } @Test @@ -705,10 +708,10 @@ class UserResourceUnSecureTest extends BaseUserTest { //given user = userRepository.save(createRandomUser()); - String username = user.getUsername(); + UUID userId = user.getUserId(); //when - RequestEntity requestEntity = RequestEntity.get("/user/{username}/image/profile", username) + RequestEntity requestEntity = RequestEntity.get(USER_CUSTOM_IMAGE_URI_TEMPLATE, userId, USER_IMAGE_FILENAME) .accept(IMAGE_JPEG, APPLICATION_JSON) .build(); var responseEntity = restTemplate.exchange(requestEntity, HttpResponse.class); @@ -727,10 +730,10 @@ class UserResourceUnSecureTest extends BaseUserTest { void getImageById_correct() throws IOException { //given - String username = user.getUsername(); - uploadProfileImage(username); + UUID userId = user.getUserId(); + uploadProfileImage(userId); String profileImageUrlFull = user.getProfileImageUrl(); - String profileImageUrl = profileImageUrlFull.substring(profileImageUrlFull.indexOf("/user/image/profile")); + String profileImageUrl = profileImageUrlFull.substring(profileImageUrlFull.indexOf("/user/")); log.debug("Image URL: {}", profileImageUrl); //when @@ -754,7 +757,7 @@ class UserResourceUnSecureTest extends BaseUserTest { UUID userId = user.getUserId(); //when - RequestEntity requestEntity = RequestEntity.get("/user/image/profile/{userId}", userId) + RequestEntity requestEntity = RequestEntity.get(USER_DEFAULT_IMAGE_URI_TEMPLATE, userId) .accept(IMAGE_JPEG) .build(); var responseEntity = restTemplate.exchange(requestEntity, new ParameterizedTypeReference() { @@ -773,7 +776,7 @@ class UserResourceUnSecureTest extends BaseUserTest { UUID userId = UUID.randomUUID(); //when - RequestEntity requestEntity = RequestEntity.get("/user/image/profile/{userId}", userId) + RequestEntity requestEntity = RequestEntity.get(USER_DEFAULT_IMAGE_URI_TEMPLATE, userId) .accept(IMAGE_JPEG, APPLICATION_JSON) .build(); var responseEntity = restTemplate.exchange(requestEntity, HttpResponse.class); @@ -795,7 +798,7 @@ class UserResourceUnSecureTest extends BaseUserTest { String userId = "not_a_UUID"; //when - RequestEntity requestEntity = RequestEntity.get("/user/image/profile/{userId}", userId) + RequestEntity requestEntity = RequestEntity.get(USER_DEFAULT_IMAGE_URI_TEMPLATE, userId) .accept(IMAGE_JPEG, APPLICATION_JSON) .build(); var responseEntity = restTemplate.exchange(requestEntity, HttpResponse.class); @@ -810,7 +813,7 @@ class UserResourceUnSecureTest extends BaseUserTest { .hasFieldOrPropertyWithValue("message", "Invalid UUID string: " + userId); } - private void uploadProfileImage(String username) throws IOException { + private void uploadProfileImage(UUID userId) throws IOException { MultipartFile profileImage = new MockMultipartFile("profileImage", "test.jpg", IMAGE_JPEG_VALUE, ("Spring Framework" + UUID.randomUUID()).getBytes()); @@ -820,7 +823,7 @@ class UserResourceUnSecureTest extends BaseUserTest { body.add("profileImage", profileImage.getResource()); //when - var requestEntity = RequestEntity.put("/user/{username}/profileImage", username) + var requestEntity = RequestEntity.put(USER_IMAGE_ENDPOINT_TEMPLATE, userId) .contentType(MULTIPART_FORM_DATA) .body(body); var responseEntity = restTemplate @@ -832,16 +835,17 @@ class UserResourceUnSecureTest extends BaseUserTest { assertThat(responseEntity.getBody()) .isNotNull() .hasNoNullFieldsOrPropertiesExcept("lastLoginDate", "lastLoginDateDisplay", "password", "id") - .hasFieldOrPropertyWithValue("username", username) + .hasFieldOrPropertyWithValue("userId", userId) + .hasFieldOrPropertyWithValue("username", user.getUsername()) .hasFieldOrPropertyWithValue("email", user.getEmail()) .hasFieldOrPropertyWithValue("firstName", user.getFirstName()) .hasFieldOrPropertyWithValue("lastName", user.getLastName()) .hasFieldOrPropertyWithValue("isActive", user.isActive()) .hasFieldOrPropertyWithValue("isNotLocked", user.isNotLocked()) .hasFieldOrPropertyWithValue("role", user.getRole()) - .satisfies(u -> assertThat(u.getProfileImageUrl()).endsWith(String.format("/user/image/profile/%s/avatar.jpg", user.getUserId()))); + .satisfies(u -> assertThat(u.getProfileImageUrl()).endsWith(String.format(DEFAULT_USER_IMAGE_URI_PATTERN.concat("/avatar.jpg"), user.getUserId()))); - Path path = Path.of(FileConstant.USER_FOLDER, user.getUserId().toString(), FileConstant.USER_IMAGE_FILENAME); + Path path = Path.of(USER_FOLDER, user.getUserId().toString(), USER_IMAGE_FILENAME); log.debug("Path of created file: {}", path); assertThat(Files.exists(path)).isTrue(); assertThat(Files.getLastModifiedTime(path).toInstant()).isCloseTo(Instant.now(), within(200, ChronoUnit.MILLIS)); diff --git a/support-portal-backend/src/test/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserServiceTest.java b/support-portal-backend/src/test/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserServiceTest.java index 8d039dd..26d0abd 100644 --- a/support-portal-backend/src/test/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserServiceTest.java +++ b/support-portal-backend/src/test/java/net/shyshkin/study/fullstack/supportportal/backend/service/UserServiceTest.java @@ -117,12 +117,12 @@ class UserServiceTest extends BaseUserTest { //given User fakeUser = createRandomUser(); user = userRepository.save(fakeUser); - String username = user.getUsername(); + UUID userId = user.getUserId(); //when MockMultipartFile multipartFile = new MockMultipartFile("file", "test.jpg", "image/jpeg", ("Spring Framework" + UUID.randomUUID()).getBytes()); - userService.updateProfileImage(username, multipartFile); + userService.updateProfileImage(userId, multipartFile); //then Path path = Path.of(FileConstant.USER_FOLDER, user.getUserId().toString(), FileConstant.USER_IMAGE_FILENAME);