From b8e2bd8608bf5865b0167a4683a2e6f70c633809 Mon Sep 17 00:00:00 2001 From: alina tarasova Date: Thu, 9 May 2024 12:11:24 +0300 Subject: [PATCH 01/19] Updated testShow in PostsControllerTest.java --- .../blog/controller/api/PostsControllerTest.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java b/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java index 67154e5..0fe4c8e 100644 --- a/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java +++ b/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java @@ -10,6 +10,7 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import io.hexlet.blog.dto.PostDTO; import org.instancio.Instancio; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -30,6 +31,7 @@ import io.hexlet.blog.util.ModelGenerator; import io.hexlet.blog.util.UserUtils; + @SpringBootTest @AutoConfigureMockMvc public class PostsControllerTest { @@ -56,6 +58,7 @@ public class PostsControllerTest { private Post testPost; + @BeforeEach public void setUp() { token = jwt().jwt(builder -> builder.subject("hexlet@example.com")); @@ -137,11 +140,15 @@ public void testShow() throws Exception { var result = mockMvc.perform(request) .andExpect(status().isOk()) .andReturn(); + var body = result.getResponse().getContentAsString(); - assertThatJson(body).and( - v -> v.node("slug").isEqualTo(testPost.getSlug()), - v -> v.node("name").isEqualTo(testPost.getName()), - v -> v.node("body").isEqualTo(testPost.getBody())); + + PostDTO postDTO = om.readValue(body, PostDTO.class); + PostDTO testPostDTO = postMapper.map(testPost); + + assertThat(postDTO.getName()).isEqualTo(testPostDTO.getName()); + assertThat(postDTO.getSlug()).isEqualTo(testPostDTO.getSlug()); + assertThat(postDTO.getBody()).isEqualTo(testPostDTO.getBody()); } @Test From 32498e2647f0460e024fc06ae60a4147b837275b Mon Sep 17 00:00:00 2001 From: alina tarasova Date: Thu, 9 May 2024 17:29:04 +0300 Subject: [PATCH 02/19] Updated UsersControllerTest.java --- .../io/hexlet/blog/controller/api/PostsControllerTest.java | 6 +++--- .../io/hexlet/blog/controller/api/UsersControllerTest.java | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java b/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java index 0fe4c8e..8ca5824 100644 --- a/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java +++ b/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java @@ -89,7 +89,7 @@ public void testCreate() throws Exception { mockMvc.perform(request) .andExpect(status().isCreated()); - var post = postRepository.findBySlug(testPost.getSlug()).get(); + var post = postRepository.findBySlug(testPost.getSlug()).orElseThrow(); assertNotNull(post); assertThat(post.getName()).isEqualTo(testPost.getName()); } @@ -109,7 +109,7 @@ public void testUpdate() throws Exception { mockMvc.perform(request) .andExpect(status().isOk()); - testPost = postRepository.findById(testPost.getId()).get(); + testPost = postRepository.findById(testPost.getId()).orElseThrow(); assertThat(testPost.getName()).isEqualTo(data.getName().get()); } @@ -128,7 +128,7 @@ public void testUpdateFailed() throws Exception { mockMvc.perform(request) .andExpect(status().isForbidden()); - var actualPost = postRepository.findById(testPost.getId()).get(); + var actualPost = postRepository.findById(testPost.getId()).orElseThrow(); assertThat(actualPost.getName()).isEqualTo(testPost.getName()); } diff --git a/src/test/java/io/hexlet/blog/controller/api/UsersControllerTest.java b/src/test/java/io/hexlet/blog/controller/api/UsersControllerTest.java index 9b1a623..5defd79 100644 --- a/src/test/java/io/hexlet/blog/controller/api/UsersControllerTest.java +++ b/src/test/java/io/hexlet/blog/controller/api/UsersControllerTest.java @@ -27,6 +27,7 @@ import io.hexlet.blog.util.ModelGenerator; import net.datafaker.Faker; + @SpringBootTest @AutoConfigureMockMvc public class UsersControllerTest { @@ -76,7 +77,7 @@ void testCreate() throws Exception { mockMvc.perform(request) .andExpect(status().isCreated()); - var user = userRepository.findByEmail(data.getEmail()).get(); + var user = userRepository.findByEmail(data.getEmail()).orElseThrow(); assertNotNull(user); assertThat(user.getFirstName()).isEqualTo(data.getFirstName()); @@ -97,7 +98,7 @@ public void testUpdate() throws Exception { mockMvc.perform(request) .andExpect(status().isOk()); - var user = userRepository.findById(testUser.getId()).get(); + var user = userRepository.findById(testUser.getId()).orElseThrow(); assertThat(user.getFirstName()).isEqualTo(("Mike")); } } From 017edca2412c2b20423e7a444ce0db3076874f81 Mon Sep 17 00:00:00 2001 From: alina tarasova Date: Thu, 9 May 2024 17:30:00 +0300 Subject: [PATCH 03/19] Updated PostsCommentsControllerTest.java --- .../api/PostsCommentsControllerTest.java | 45 +++++++++++++++---- 1 file changed, 36 insertions(+), 9 deletions(-) diff --git a/src/test/java/io/hexlet/blog/controller/api/PostsCommentsControllerTest.java b/src/test/java/io/hexlet/blog/controller/api/PostsCommentsControllerTest.java index 8778a71..6ebd978 100644 --- a/src/test/java/io/hexlet/blog/controller/api/PostsCommentsControllerTest.java +++ b/src/test/java/io/hexlet/blog/controller/api/PostsCommentsControllerTest.java @@ -1,10 +1,11 @@ package io.hexlet.blog.controller.api; -import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson; +import static org.assertj.core.api.Assertions.assertThat; import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.jwt; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import com.fasterxml.jackson.databind.ObjectMapper; import org.instancio.Instancio; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -21,6 +22,11 @@ import io.hexlet.blog.util.UserUtils; import jakarta.transaction.Transactional; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + + @SpringBootTest @Transactional @AutoConfigureMockMvc @@ -45,6 +51,10 @@ public class PostsCommentsControllerTest { private Post testPost; + @Autowired + private ObjectMapper om; + + @BeforeEach public void setUp() { token = jwt().jwt(builder -> builder.subject("hexlet@example.com")); @@ -74,11 +84,20 @@ public void testIndex() throws Exception { var result = mockMvc.perform(get("/api/posts_comments").with(token)) .andExpect(status().isOk()) .andReturn(); + var body = result.getResponse().getContentAsString(); - assertThatJson(body) - .node("content") - .isArray() - .hasSize(2); + + var postComment = om.readValue(body, Map.class); + + var content = postComment.get("content"); + + assertThat(content).isInstanceOf(ArrayList.class); + assertThat(((List) content).size()).isEqualTo(2); + +// assertThatJson(body) +// .node("content") +// .isArray() +// .hasSize(2); } @Test @@ -87,10 +106,18 @@ public void testFilteredIndex() throws Exception { .andExpect(status().isOk()) .andReturn(); var body = result.getResponse().getContentAsString(); - assertThatJson(body) - .node("content") - .isArray() - .hasSize(1); + + var postComment = om.readValue(body, Map.class); + + var content = postComment.get("content"); + + assertThat(content).isInstanceOf(ArrayList.class); + assertThat(((List) content).size()).isEqualTo(1); + +// assertThatJson(body) +// .node("content") +// .isArray() +// .hasSize(1); } } From e8dc98710ea2343620eda43ab84b0bae712147ee Mon Sep 17 00:00:00 2001 From: alina tarasova Date: Tue, 14 May 2024 19:59:03 +0300 Subject: [PATCH 04/19] Updated PostCommentRepository.java: added findAllByPostId() --- .../io/hexlet/blog/repository/PostCommentRepository.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/io/hexlet/blog/repository/PostCommentRepository.java b/src/main/java/io/hexlet/blog/repository/PostCommentRepository.java index 8329b5d..fcb32d8 100644 --- a/src/main/java/io/hexlet/blog/repository/PostCommentRepository.java +++ b/src/main/java/io/hexlet/blog/repository/PostCommentRepository.java @@ -10,8 +10,13 @@ import io.hexlet.blog.model.Post; import io.hexlet.blog.model.PostComment; +import java.util.List; +import java.util.Optional; + @Repository public interface PostCommentRepository extends JpaRepository, JpaSpecificationExecutor { // Page findAll(Specification spec, Pageable pageable); + + Optional> findAllByPostId(Long postId); } From 8d5b32b65dac628dc04f7b63c7af2be392d21c3d Mon Sep 17 00:00:00 2001 From: alina tarasova Date: Tue, 14 May 2024 20:00:25 +0300 Subject: [PATCH 05/19] Updated PostCommentMapper.java: added convert to entity --- src/main/java/io/hexlet/blog/mapper/PostCommentMapper.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/io/hexlet/blog/mapper/PostCommentMapper.java b/src/main/java/io/hexlet/blog/mapper/PostCommentMapper.java index d0d27bb..c36c251 100644 --- a/src/main/java/io/hexlet/blog/mapper/PostCommentMapper.java +++ b/src/main/java/io/hexlet/blog/mapper/PostCommentMapper.java @@ -19,5 +19,9 @@ public abstract class PostCommentMapper { @Mapping(source = "author.id", target = "authorId") @Mapping(source = "post.id", target = "postId") public abstract PostCommentDTO map(PostComment model); + + @Mapping(source = "authorId", target = "author.id") + @Mapping(source = "postId", target = "post.id") + public abstract PostComment map(PostCommentDTO model); } From 93738fae0c6d1ffeadb865ad8a6186457e94fc58 Mon Sep 17 00:00:00 2001 From: alina tarasova Date: Tue, 14 May 2024 20:00:52 +0300 Subject: [PATCH 06/19] Updated PostMapper.java: added convert to entity --- src/main/java/io/hexlet/blog/mapper/PostMapper.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/io/hexlet/blog/mapper/PostMapper.java b/src/main/java/io/hexlet/blog/mapper/PostMapper.java index d7c3e08..e822f43 100644 --- a/src/main/java/io/hexlet/blog/mapper/PostMapper.java +++ b/src/main/java/io/hexlet/blog/mapper/PostMapper.java @@ -25,5 +25,8 @@ public abstract class PostMapper { @Mapping(source = "author.id", target = "authorId") public abstract PostDTO map(Post model); + @Mapping(source = "authorId", target = "author.id") + public abstract Post map(PostDTO model); + public abstract void update(PostUpdateDTO dto, @MappingTarget Post model); } From 46af171a97d4b5265b064bab2caeb4f12676e2bf Mon Sep 17 00:00:00 2001 From: alina tarasova Date: Tue, 14 May 2024 20:01:19 +0300 Subject: [PATCH 07/19] Updated UserMapper.java: added convert to entity --- src/main/java/io/hexlet/blog/mapper/UserMapper.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/io/hexlet/blog/mapper/UserMapper.java b/src/main/java/io/hexlet/blog/mapper/UserMapper.java index c7ea1dc..0e70735 100644 --- a/src/main/java/io/hexlet/blog/mapper/UserMapper.java +++ b/src/main/java/io/hexlet/blog/mapper/UserMapper.java @@ -35,6 +35,9 @@ public abstract class UserMapper { @Mapping(target = "password", ignore = true) public abstract UserDTO map(User model); + @Mapping(target = "email", source = "username") + public abstract User map(UserDTO model); + public abstract void update(UserUpdateDTO update, @MappingTarget User destination); @BeforeMapping From 0ff8b270d4c77d77598dc77f975c14a1c1a71b94 Mon Sep 17 00:00:00 2001 From: alina tarasova Date: Tue, 14 May 2024 20:03:05 +0300 Subject: [PATCH 08/19] Updated UsersControllerTest.java: updated testIndex() --- .../controller/api/UsersControllerTest.java | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/src/test/java/io/hexlet/blog/controller/api/UsersControllerTest.java b/src/test/java/io/hexlet/blog/controller/api/UsersControllerTest.java index 5defd79..ecf7aef 100644 --- a/src/test/java/io/hexlet/blog/controller/api/UsersControllerTest.java +++ b/src/test/java/io/hexlet/blog/controller/api/UsersControllerTest.java @@ -9,7 +9,12 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import java.util.HashMap; +import java.util.List; +import com.fasterxml.jackson.core.type.TypeReference; +import io.hexlet.blog.dto.UserDTO; +import io.hexlet.blog.mapper.UserMapper; +import org.assertj.core.api.Assertions; import org.instancio.Instancio; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -47,6 +52,9 @@ public class UsersControllerTest { @Autowired private ObjectMapper om; + @Autowired + private UserMapper userMapper; + private JwtRequestPostProcessor token; private User testUser; @@ -61,8 +69,25 @@ public void setUp() { @Test public void testIndex() throws Exception { - mockMvc.perform(get("/api/users").with(jwt())) - .andExpect(status().isOk()); +// mockMvc.perform(get("/api/users").with(jwt())) +// .andExpect(status().isOk()); + var response = mockMvc.perform(get("/api/users").with(jwt())) + .andExpect(status().isOk()) + .andReturn() + .getResponse(); + + String body = response.getContentAsString(); + + List bodyDTO = om.readValue(body, new TypeReference<>() { + }); + List actual = bodyDTO.stream().map(userMapper::map).toList(); + + List expected = userRepository.findAll(); + + Assertions.assertThat(actual).containsAll(expected); + + + //UserMapper: добавила конвертацию из dto в entity } @Test From f5e34ffbf3bfe0357266ee2a49953f189677034b Mon Sep 17 00:00:00 2001 From: alina tarasova Date: Tue, 14 May 2024 20:04:17 +0300 Subject: [PATCH 09/19] Updated PostsCommentsControllerTest.java --- .../api/PostsCommentsControllerTest.java | 73 ++++++++++++++----- 1 file changed, 54 insertions(+), 19 deletions(-) diff --git a/src/test/java/io/hexlet/blog/controller/api/PostsCommentsControllerTest.java b/src/test/java/io/hexlet/blog/controller/api/PostsCommentsControllerTest.java index 6ebd978..cd871ca 100644 --- a/src/test/java/io/hexlet/blog/controller/api/PostsCommentsControllerTest.java +++ b/src/test/java/io/hexlet/blog/controller/api/PostsCommentsControllerTest.java @@ -5,7 +5,12 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; +import io.hexlet.blog.dto.PostCommentDTO; +import io.hexlet.blog.mapper.PostCommentMapper; +import io.hexlet.blog.model.PostComment; +import org.assertj.core.api.Assertions; import org.instancio.Instancio; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -22,7 +27,6 @@ import io.hexlet.blog.util.UserUtils; import jakarta.transaction.Transactional; -import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -54,6 +58,9 @@ public class PostsCommentsControllerTest { @Autowired private ObjectMapper om; + @Autowired + private PostCommentMapper postCommentMapper; + @BeforeEach public void setUp() { @@ -81,38 +88,66 @@ public void setUp() { @Test public void testIndex() throws Exception { - var result = mockMvc.perform(get("/api/posts_comments").with(token)) + var response = mockMvc.perform(get("/api/posts_comments").with(token)) .andExpect(status().isOk()) - .andReturn(); + .andReturn() + .getResponse(); - var body = result.getResponse().getContentAsString(); + String body = response.getContentAsString(); - var postComment = om.readValue(body, Map.class); + Map parsedBody = om.readValue(body, new TypeReference<>() { + }); - var content = postComment.get("content"); + Object content = parsedBody.entrySet().stream() + .filter(entry -> entry.getKey().equals("content")) + .findFirst().map(Map.Entry::getValue).orElseThrow(); - assertThat(content).isInstanceOf(ArrayList.class); - assertThat(((List) content).size()).isEqualTo(2); + //сравнение dto не работает! + //List actual = om.convertValue(content, new TypeReference<>() {}); + //List expected = postCommentRepository.findAll().stream().map(postCommentMapper::map).toList(); -// assertThatJson(body) -// .node("content") -// .isArray() -// .hasSize(2); + List contentDTO = om.convertValue(content, new TypeReference<>() {}); + + List actual = contentDTO.stream().map(postCommentMapper::map).toList(); + + List expected = postCommentRepository.findAll(); + + Assertions.assertThat(actual).containsAll(expected); + assertThat((actual).size()).isEqualTo(2); + + +// PostCommentMapper: добавила конвертацию из dto в entity } @Test public void testFilteredIndex() throws Exception { - var result = mockMvc.perform(get("/api/posts_comments?postId=" + testPost.getId()).with(token)) + var response = mockMvc.perform(get("/api/posts_comments?postId=" + + testPost.getId()).with(token)) .andExpect(status().isOk()) - .andReturn(); - var body = result.getResponse().getContentAsString(); + .andReturn() + .getResponse(); + + String body = response.getContentAsString(); + + Map parsedBody = om.readValue(body, new TypeReference<>() { + }); + + Object content = parsedBody.entrySet().stream() + .filter(entry -> entry.getKey().equals("content")) + .findFirst().map(Map.Entry::getValue).orElseThrow(); + + List contentDTO = om.convertValue(content, new TypeReference<>() {}); + + List actual = contentDTO.stream().map(postCommentMapper::map).toList(); + + List expected = postCommentRepository.findAllByPostId(testPost.getId()) + .orElseThrow(); - var postComment = om.readValue(body, Map.class); + Assertions.assertThat(actual).containsAll(expected); + assertThat((actual).size()).isEqualTo(1); - var content = postComment.get("content"); +// PostCommentRepository: добавила метод поиска комментариев по id Post'а - assertThat(content).isInstanceOf(ArrayList.class); - assertThat(((List) content).size()).isEqualTo(1); // assertThatJson(body) // .node("content") From f97750f0928c60b092fd3a7d2ee90ad4048890d4 Mon Sep 17 00:00:00 2001 From: alina tarasova Date: Tue, 14 May 2024 20:05:00 +0300 Subject: [PATCH 10/19] Updated PostsControllerTest.java: updated testIndex() --- .../controller/api/PostsControllerTest.java | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java b/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java index 8ca5824..71b61dd 100644 --- a/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java +++ b/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java @@ -1,6 +1,5 @@ package io.hexlet.blog.controller.api; -import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.jwt; @@ -10,7 +9,9 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import com.fasterxml.jackson.core.type.TypeReference; import io.hexlet.blog.dto.PostDTO; +import org.assertj.core.api.Assertions; import org.instancio.Instancio; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -31,6 +32,8 @@ import io.hexlet.blog.util.ModelGenerator; import io.hexlet.blog.util.UserUtils; +import java.util.List; + @SpringBootTest @AutoConfigureMockMvc @@ -70,11 +73,22 @@ public void setUp() { @Test public void testIndex() throws Exception { postRepository.save(testPost); - var result = mockMvc.perform(get("/api/posts").with(token)) + var response = mockMvc.perform(get("/api/posts").with(token)) .andExpect(status().isOk()) - .andReturn(); - var body = result.getResponse().getContentAsString(); - assertThatJson(body).isArray(); + .andReturn() + .getResponse(); + + String body = response.getContentAsString(); + + List bodyDTO = om.readValue(body, new TypeReference<>() { + }); + List actual = bodyDTO.stream().map(postMapper::map).toList(); + + List expected = postRepository.findAll(); + + Assertions.assertThat(actual).containsAll(expected); + + //PostMapper: добавила конвертацию из dto в entity } @Test @@ -89,7 +103,8 @@ public void testCreate() throws Exception { mockMvc.perform(request) .andExpect(status().isCreated()); - var post = postRepository.findBySlug(testPost.getSlug()).orElseThrow(); + Post post = postRepository.findBySlug(testPost.getSlug()).orElseThrow(); + assertNotNull(post); assertThat(post.getName()).isEqualTo(testPost.getName()); } From fb0a3897bc84a4ef32a2bfcefe45eeef41849afe Mon Sep 17 00:00:00 2001 From: alina tarasova Date: Wed, 15 May 2024 20:53:58 +0300 Subject: [PATCH 11/19] Updated PostsCommentsControllerTest.java --- .../api/PostsCommentsControllerTest.java | 41 ++++--------------- 1 file changed, 8 insertions(+), 33 deletions(-) diff --git a/src/test/java/io/hexlet/blog/controller/api/PostsCommentsControllerTest.java b/src/test/java/io/hexlet/blog/controller/api/PostsCommentsControllerTest.java index cd871ca..7c09a18 100644 --- a/src/test/java/io/hexlet/blog/controller/api/PostsCommentsControllerTest.java +++ b/src/test/java/io/hexlet/blog/controller/api/PostsCommentsControllerTest.java @@ -1,6 +1,5 @@ package io.hexlet.blog.controller.api; -import static org.assertj.core.api.Assertions.assertThat; import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.jwt; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -95,28 +94,17 @@ public void testIndex() throws Exception { String body = response.getContentAsString(); - Map parsedBody = om.readValue(body, new TypeReference<>() { + Map content = om.readValue(body, new TypeReference<>() { }); - Object content = parsedBody.entrySet().stream() - .filter(entry -> entry.getKey().equals("content")) - .findFirst().map(Map.Entry::getValue).orElseThrow(); + Object postComments = content.get("content"); - //сравнение dto не работает! - //List actual = om.convertValue(content, new TypeReference<>() {}); - //List expected = postCommentRepository.findAll().stream().map(postCommentMapper::map).toList(); - - List contentDTO = om.convertValue(content, new TypeReference<>() {}); - - List actual = contentDTO.stream().map(postCommentMapper::map).toList(); + List postCommentDTOS = om.convertValue(postComments, new TypeReference<>() {}); + List actual = postCommentDTOS.stream().map(postCommentMapper::map).toList(); List expected = postCommentRepository.findAll(); Assertions.assertThat(actual).containsAll(expected); - assertThat((actual).size()).isEqualTo(2); - - -// PostCommentMapper: добавила конвертацию из dto в entity } @Test @@ -129,30 +117,17 @@ public void testFilteredIndex() throws Exception { String body = response.getContentAsString(); - Map parsedBody = om.readValue(body, new TypeReference<>() { - }); + Map content = om.readValue(body, new TypeReference<>() {}); - Object content = parsedBody.entrySet().stream() - .filter(entry -> entry.getKey().equals("content")) - .findFirst().map(Map.Entry::getValue).orElseThrow(); + Object postComments = content.get("content"); - List contentDTO = om.convertValue(content, new TypeReference<>() {}); - - List actual = contentDTO.stream().map(postCommentMapper::map).toList(); + List postCommentDTOS = om.convertValue(postComments, new TypeReference<>() {}); + List actual = postCommentDTOS.stream().map(postCommentMapper::map).toList(); List expected = postCommentRepository.findAllByPostId(testPost.getId()) .orElseThrow(); Assertions.assertThat(actual).containsAll(expected); - assertThat((actual).size()).isEqualTo(1); - -// PostCommentRepository: добавила метод поиска комментариев по id Post'а - - -// assertThatJson(body) -// .node("content") -// .isArray() -// .hasSize(1); } } From c5838483b190fed2b194f28032d5612c00f9a367 Mon Sep 17 00:00:00 2001 From: alina tarasova Date: Wed, 15 May 2024 20:55:37 +0300 Subject: [PATCH 12/19] Updated PostsControllerTest.java --- .../controller/api/PostsControllerTest.java | 92 +++++++++---------- 1 file changed, 43 insertions(+), 49 deletions(-) diff --git a/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java b/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java index 71b61dd..4f9b94b 100644 --- a/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java +++ b/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java @@ -68,11 +68,30 @@ public void setUp() { testPost = Instancio.of(modelGenerator.getPostModel()) .create(); testPost.setAuthor(userUtils.getTestUser()); + postRepository.save(testPost); + } + + @Test + public void testShow() throws Exception { + var request = get("/api/posts/" + testPost.getId()).with(jwt()); + + var response = mockMvc.perform(request) + .andExpect(status().isOk()) + .andReturn() + .getResponse(); + + String body = response.getContentAsString(); + + PostDTO postDTO = om.readValue(body, PostDTO.class); + PostDTO testPostDTO = postMapper.map(testPost); + + assertThat(postDTO.getName()).isEqualTo(testPostDTO.getName()); + assertThat(postDTO.getSlug()).isEqualTo(testPostDTO.getSlug()); + assertThat(postDTO.getBody()).isEqualTo(testPostDTO.getBody()); } @Test public void testIndex() throws Exception { - postRepository.save(testPost); var response = mockMvc.perform(get("/api/posts").with(token)) .andExpect(status().isOk()) .andReturn() @@ -80,96 +99,71 @@ public void testIndex() throws Exception { String body = response.getContentAsString(); - List bodyDTO = om.readValue(body, new TypeReference<>() { - }); - List actual = bodyDTO.stream().map(postMapper::map).toList(); + List postDTOS = om.readValue(body, new TypeReference<>() {}); + List actual = postDTOS.stream().map(postMapper::map).toList(); List expected = postRepository.findAll(); Assertions.assertThat(actual).containsAll(expected); - - //PostMapper: добавила конвертацию из dto в entity } @Test public void testCreate() throws Exception { - var dto = postMapper.map(testPost); + var newPostDTO = postMapper.map(Instancio.of(modelGenerator.getPostModel()) + .create()); var request = post("/api/posts") .with(token) .contentType(MediaType.APPLICATION_JSON) - .content(om.writeValueAsString(dto)); + .content(om.writeValueAsString(newPostDTO)); mockMvc.perform(request) .andExpect(status().isCreated()); - Post post = postRepository.findBySlug(testPost.getSlug()).orElseThrow(); + var actualPost = postRepository.findBySlug(newPostDTO.getSlug()).orElseThrow(); - assertNotNull(post); - assertThat(post.getName()).isEqualTo(testPost.getName()); + assertNotNull(actualPost); + assertThat(actualPost.getName()).isEqualTo(newPostDTO.getName()); } @Test public void testUpdate() throws Exception { - postRepository.save(testPost); - - var data = new PostUpdateDTO(); - data.setName(JsonNullable.of("new name")); - - var request = put("/api/posts/" + testPost.getId()) - .with(token) - .contentType(MediaType.APPLICATION_JSON) - .content(om.writeValueAsString(data)); + var postUpdateDTO = new PostUpdateDTO(); + postUpdateDTO.setName(JsonNullable.of("new name")); - mockMvc.perform(request) + mockMvc.perform(put("/api/posts/" + testPost.getId()) + .with(token) + .contentType(MediaType.APPLICATION_JSON) + .content(om.writeValueAsString(postUpdateDTO))) .andExpect(status().isOk()); - testPost = postRepository.findById(testPost.getId()).orElseThrow(); - assertThat(testPost.getName()).isEqualTo(data.getName().get()); + var actualPost = postRepository.findById(testPost.getId()).orElseThrow(); + + assertThat(actualPost.getName()).isEqualTo(postUpdateDTO.getName().get()); } @Test public void testUpdateFailed() throws Exception { - postRepository.save(testPost); - - var data = new PostUpdateDTO(); - data.setName(JsonNullable.of("new name")); + var postUpdateDTO = new PostUpdateDTO(); + postUpdateDTO.setName(JsonNullable.of("new name")); var request = put("/api/posts/" + testPost.getId()) .with(jwt()) .contentType(MediaType.APPLICATION_JSON) - .content(om.writeValueAsString(data)); + .content(om.writeValueAsString(postUpdateDTO)); mockMvc.perform(request) .andExpect(status().isForbidden()); var actualPost = postRepository.findById(testPost.getId()).orElseThrow(); - assertThat(actualPost.getName()).isEqualTo(testPost.getName()); - } - - @Test - public void testShow() throws Exception { - postRepository.save(testPost); - - var request = get("/api/posts/" + testPost.getId()).with(jwt()); - var result = mockMvc.perform(request) - .andExpect(status().isOk()) - .andReturn(); - - var body = result.getResponse().getContentAsString(); - PostDTO postDTO = om.readValue(body, PostDTO.class); - PostDTO testPostDTO = postMapper.map(testPost); - - assertThat(postDTO.getName()).isEqualTo(testPostDTO.getName()); - assertThat(postDTO.getSlug()).isEqualTo(testPostDTO.getSlug()); - assertThat(postDTO.getBody()).isEqualTo(testPostDTO.getBody()); + assertThat(actualPost.getName()).isEqualTo(testPost.getName()); } @Test public void testDestroy() throws Exception { - postRepository.save(testPost); var request = delete("/api/posts/" + testPost.getId()).with(token); + mockMvc.perform(request) .andExpect(status().isNoContent()); @@ -178,8 +172,8 @@ public void testDestroy() throws Exception { @Test public void testDestroyFailed() throws Exception { - postRepository.save(testPost); var request = delete("/api/posts/" + testPost.getId()).with(jwt()); + mockMvc.perform(request) .andExpect(status().isForbidden()); From 32fea3de94ce98fd37bd0e8d4eb33985ddff8b7d Mon Sep 17 00:00:00 2001 From: alina tarasova Date: Wed, 15 May 2024 21:02:07 +0300 Subject: [PATCH 13/19] Updated UsersControllerTest.java --- .../controller/api/UsersControllerTest.java | 66 +++++++++++-------- 1 file changed, 40 insertions(+), 26 deletions(-) diff --git a/src/test/java/io/hexlet/blog/controller/api/UsersControllerTest.java b/src/test/java/io/hexlet/blog/controller/api/UsersControllerTest.java index ecf7aef..6a6f176 100644 --- a/src/test/java/io/hexlet/blog/controller/api/UsersControllerTest.java +++ b/src/test/java/io/hexlet/blog/controller/api/UsersControllerTest.java @@ -4,15 +4,14 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.jwt; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -import java.util.HashMap; import java.util.List; import com.fasterxml.jackson.core.type.TypeReference; import io.hexlet.blog.dto.UserDTO; +import io.hexlet.blog.dto.UserUpdateDTO; import io.hexlet.blog.mapper.UserMapper; import org.assertj.core.api.Assertions; import org.instancio.Instancio; @@ -59,6 +58,7 @@ public class UsersControllerTest { private User testUser; + @BeforeEach public void setUp() { token = jwt().jwt(builder -> builder.subject("hexlet@example.com")); @@ -67,10 +67,27 @@ public void setUp() { userRepository.save(testUser); } + @Test + public void testShow() throws Exception { + var response = mockMvc.perform(get("/api/users/" + + testUser.getId()).with(jwt())) + .andExpect(status().isOk()) + .andReturn() + .getResponse(); + + String body = response.getContentAsString(); + + UserDTO userDTO = om.readValue(body, UserDTO.class); + + User user = userMapper.map(userDTO); + + assertThat(user.getEmail()).isEqualTo(testUser.getEmail()); + assertThat(user.getFirstName()).isEqualTo(testUser.getFirstName()); + assertThat(user.getLastName()).isEqualTo(testUser.getLastName()); + } + @Test public void testIndex() throws Exception { -// mockMvc.perform(get("/api/users").with(jwt())) -// .andExpect(status().isOk()); var response = mockMvc.perform(get("/api/users").with(jwt())) .andExpect(status().isOk()) .andReturn() @@ -78,52 +95,49 @@ public void testIndex() throws Exception { String body = response.getContentAsString(); - List bodyDTO = om.readValue(body, new TypeReference<>() { - }); - List actual = bodyDTO.stream().map(userMapper::map).toList(); + List userDTOS = om.readValue(body, new TypeReference<>() {}); + List actual = userDTOS.stream().map(userMapper::map).toList(); List expected = userRepository.findAll(); Assertions.assertThat(actual).containsAll(expected); - - - //UserMapper: добавила конвертацию из dto в entity } @Test - void testCreate() throws Exception { - var data = Instancio.of(modelGenerator.getUserModel()) + public void testCreate() throws Exception { + User newUser = Instancio.of(modelGenerator.getUserModel()) .create(); var request = post("/api/users") .with(token) .contentType(MediaType.APPLICATION_JSON) - .content(om.writeValueAsString(data)); + .content(om.writeValueAsString(newUser)); + mockMvc.perform(request) .andExpect(status().isCreated()); - var user = userRepository.findByEmail(data.getEmail()).orElseThrow(); + var actualUser = userRepository.findByEmail(newUser.getEmail()).orElseThrow(); - assertNotNull(user); - assertThat(user.getFirstName()).isEqualTo(data.getFirstName()); - assertThat(user.getLastName()).isEqualTo(data.getLastName()); + assertNotNull(actualUser); + assertThat(actualUser.getFirstName()).isEqualTo(newUser.getFirstName()); + assertThat(actualUser.getLastName()).isEqualTo(newUser.getLastName()); } @Test public void testUpdate() throws Exception { - var data = new HashMap<>(); - data.put("firstName", "Mike"); + var updateDTO = new UserUpdateDTO(); + updateDTO.setFirstName("Mike"); - var request = put("/api/users/" + testUser.getId()) - .with(token) + var request = put("/api/users/" + testUser.getId()).with(token) .contentType(MediaType.APPLICATION_JSON) - .content(om.writeValueAsString(data)); + .content(om.writeValueAsString(updateDTO)); mockMvc.perform(request) - .andExpect(status().isOk()); + .andExpect(status().isOk()); + + var actualUser = userRepository.findById(testUser.getId()).orElseThrow(); - var user = userRepository.findById(testUser.getId()).orElseThrow(); - assertThat(user.getFirstName()).isEqualTo(("Mike")); + assertThat(actualUser.getFirstName()).isEqualTo((updateDTO.getFirstName())); } } From 953a81ce4176cb3f98ef365d437e8e31f18b84b5 Mon Sep 17 00:00:00 2001 From: alina tarasova Date: Thu, 16 May 2024 17:52:12 +0300 Subject: [PATCH 14/19] Updated PostsControllerTest.java --- .../controller/api/PostsControllerTest.java | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java b/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java index 4f9b94b..93e00b9 100644 --- a/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java +++ b/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java @@ -10,6 +10,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import com.fasterxml.jackson.core.type.TypeReference; +import io.hexlet.blog.dto.PostCreateDTO; import io.hexlet.blog.dto.PostDTO; import org.assertj.core.api.Assertions; import org.instancio.Instancio; @@ -109,25 +110,31 @@ public void testIndex() throws Exception { @Test public void testCreate() throws Exception { - var newPostDTO = postMapper.map(Instancio.of(modelGenerator.getPostModel()) - .create()); + + var createDTO = new PostCreateDTO(); + createDTO.setName("TestNameForPost"); + createDTO.setBody("TestBodyForPost"); + createDTO.setSlug("TestSlug"); + createDTO.setAuthorId(userUtils.getTestUser().getId()); + var request = post("/api/posts") .with(token) .contentType(MediaType.APPLICATION_JSON) - .content(om.writeValueAsString(newPostDTO)); + .content(om.writeValueAsString(createDTO)); mockMvc.perform(request) .andExpect(status().isCreated()); - var actualPost = postRepository.findBySlug(newPostDTO.getSlug()).orElseThrow(); + var actualPost = postRepository.findBySlug(createDTO.getSlug()).orElseThrow(); assertNotNull(actualPost); - assertThat(actualPost.getName()).isEqualTo(newPostDTO.getName()); + assertThat(actualPost.getName()).isEqualTo(createDTO.getName()); } @Test public void testUpdate() throws Exception { + var postUpdateDTO = new PostUpdateDTO(); postUpdateDTO.setName(JsonNullable.of("new name")); @@ -144,6 +151,7 @@ public void testUpdate() throws Exception { @Test public void testUpdateFailed() throws Exception { + var postUpdateDTO = new PostUpdateDTO(); postUpdateDTO.setName(JsonNullable.of("new name")); From 22ffe2d0e3f49591a57f0a6e3568c7d792bb9bbf Mon Sep 17 00:00:00 2001 From: alina tarasova Date: Thu, 16 May 2024 17:52:39 +0300 Subject: [PATCH 15/19] Updated UsersControllerTest.java --- .../controller/api/UsersControllerTest.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/test/java/io/hexlet/blog/controller/api/UsersControllerTest.java b/src/test/java/io/hexlet/blog/controller/api/UsersControllerTest.java index 6a6f176..ef8ef3e 100644 --- a/src/test/java/io/hexlet/blog/controller/api/UsersControllerTest.java +++ b/src/test/java/io/hexlet/blog/controller/api/UsersControllerTest.java @@ -10,6 +10,7 @@ import java.util.List; import com.fasterxml.jackson.core.type.TypeReference; +import io.hexlet.blog.dto.UserCreateDTO; import io.hexlet.blog.dto.UserDTO; import io.hexlet.blog.dto.UserUpdateDTO; import io.hexlet.blog.mapper.UserMapper; @@ -105,22 +106,26 @@ public void testIndex() throws Exception { @Test public void testCreate() throws Exception { - User newUser = Instancio.of(modelGenerator.getUserModel()) - .create(); + + var createDTO = new UserCreateDTO(); + createDTO.setEmail("testMail@example.com"); + createDTO.setPassword("testPassword"); + createDTO.setFirstName("Alice"); + createDTO.setLastName("Fox"); var request = post("/api/users") .with(token) .contentType(MediaType.APPLICATION_JSON) - .content(om.writeValueAsString(newUser)); + .content(om.writeValueAsString(createDTO)); mockMvc.perform(request) .andExpect(status().isCreated()); - var actualUser = userRepository.findByEmail(newUser.getEmail()).orElseThrow(); + var actualUser = userRepository.findByEmail(createDTO.getEmail()).orElseThrow(); assertNotNull(actualUser); - assertThat(actualUser.getFirstName()).isEqualTo(newUser.getFirstName()); - assertThat(actualUser.getLastName()).isEqualTo(newUser.getLastName()); + assertThat(actualUser.getFirstName()).isEqualTo(createDTO.getFirstName()); + assertThat(actualUser.getLastName()).isEqualTo(createDTO.getLastName()); } @Test From 7f15cc92a5bc12adbbe6eb5983cb9fdb8406cd31 Mon Sep 17 00:00:00 2001 From: alina tarasova Date: Fri, 17 May 2024 15:38:24 +0300 Subject: [PATCH 16/19] Updated PostsCommentsControllerTest.java --- .../blog/controller/api/PostsCommentsControllerTest.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/test/java/io/hexlet/blog/controller/api/PostsCommentsControllerTest.java b/src/test/java/io/hexlet/blog/controller/api/PostsCommentsControllerTest.java index 7c09a18..13bb065 100644 --- a/src/test/java/io/hexlet/blog/controller/api/PostsCommentsControllerTest.java +++ b/src/test/java/io/hexlet/blog/controller/api/PostsCommentsControllerTest.java @@ -94,8 +94,7 @@ public void testIndex() throws Exception { String body = response.getContentAsString(); - Map content = om.readValue(body, new TypeReference<>() { - }); + Map content = om.readValue(body, new TypeReference<>() {}); Object postComments = content.get("content"); From fb1af45f23bbaf5bcf769509ea56ead99275800d Mon Sep 17 00:00:00 2001 From: Alina Tarasova Date: Thu, 4 Jul 2024 20:41:43 +0300 Subject: [PATCH 17/19] Updated testIndex() in tests --- .../repository/PostCommentRepository.java | 5 -- .../api/PostsCommentsControllerTest.java | 36 +++------ .../controller/api/PostsControllerTest.java | 78 ++++++++----------- .../controller/api/UsersControllerTest.java | 38 ++++----- 4 files changed, 62 insertions(+), 95 deletions(-) diff --git a/src/main/java/io/hexlet/blog/repository/PostCommentRepository.java b/src/main/java/io/hexlet/blog/repository/PostCommentRepository.java index fcb32d8..8329b5d 100644 --- a/src/main/java/io/hexlet/blog/repository/PostCommentRepository.java +++ b/src/main/java/io/hexlet/blog/repository/PostCommentRepository.java @@ -10,13 +10,8 @@ import io.hexlet.blog.model.Post; import io.hexlet.blog.model.PostComment; -import java.util.List; -import java.util.Optional; - @Repository public interface PostCommentRepository extends JpaRepository, JpaSpecificationExecutor { // Page findAll(Specification spec, Pageable pageable); - - Optional> findAllByPostId(Long postId); } diff --git a/src/test/java/io/hexlet/blog/controller/api/PostsCommentsControllerTest.java b/src/test/java/io/hexlet/blog/controller/api/PostsCommentsControllerTest.java index 1bc4b4f..b6ff98a 100644 --- a/src/test/java/io/hexlet/blog/controller/api/PostsCommentsControllerTest.java +++ b/src/test/java/io/hexlet/blog/controller/api/PostsCommentsControllerTest.java @@ -1,5 +1,6 @@ package io.hexlet.blog.controller.api; +import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson; import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.jwt; import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; @@ -30,7 +31,6 @@ import org.springframework.web.context.WebApplicationContext; import java.nio.charset.StandardCharsets; - import java.util.List; import java.util.Map; @@ -101,12 +101,10 @@ public void setUp() { @Test public void testIndex() throws Exception { - var response = mockMvc.perform(get("/api/posts_comments").with(token)) + var result = mockMvc.perform(get("/api/posts_comments").with(token)) .andExpect(status().isOk()) - .andReturn() - .getResponse(); - - String body = response.getContentAsString(); + .andReturn(); + var body = result.getResponse().getContentAsString(); Map content = om.readValue(body, new TypeReference<>() {}); @@ -122,25 +120,13 @@ public void testIndex() throws Exception { @Test public void testFilteredIndex() throws Exception { - var response = mockMvc.perform(get("/api/posts_comments?postId=" - + testPost.getId()).with(token)) + var result = mockMvc.perform(get("/api/posts_comments?postId=" + testPost.getId()).with(token)) .andExpect(status().isOk()) - .andReturn() - .getResponse(); - - String body = response.getContentAsString(); - - Map content = om.readValue(body, new TypeReference<>() {}); - - Object postComments = content.get("content"); - - List postCommentDTOS = om.convertValue(postComments, new TypeReference<>() {}); - - List actual = postCommentDTOS.stream().map(postCommentMapper::map).toList(); - List expected = postCommentRepository.findAllByPostId(testPost.getId()) - .orElseThrow(); - - Assertions.assertThat(actual).containsAll(expected); + .andReturn(); + var body = result.getResponse().getContentAsString(); + assertThatJson(body) + .node("content") + .isArray() + .hasSize(1); } } - diff --git a/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java b/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java index 1c6e0ca..1ce3387 100644 --- a/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java +++ b/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java @@ -1,5 +1,6 @@ package io.hexlet.blog.controller.api; +import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.jwt; @@ -11,7 +12,6 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import com.fasterxml.jackson.core.type.TypeReference; -import io.hexlet.blog.dto.PostCreateDTO; import io.hexlet.blog.dto.PostDTO; import org.assertj.core.api.Assertions; import org.instancio.Instancio; @@ -37,7 +37,6 @@ import org.springframework.web.context.WebApplicationContext; import java.nio.charset.StandardCharsets; - import java.util.List; @@ -83,30 +82,26 @@ public void setUp() { testPost = Instancio.of(modelGenerator.getPostModel()) .create(); testPost.setAuthor(userUtils.getTestUser()); - postRepository.save(testPost); } @Test public void testShow() throws Exception { - var request = get("/api/posts/" + testPost.getId()).with(jwt()); + postRepository.save(testPost); - var response = mockMvc.perform(request) + var request = get("/api/posts/" + testPost.getId()).with(jwt()); + var result = mockMvc.perform(request) .andExpect(status().isOk()) - .andReturn() - .getResponse(); - - String body = response.getContentAsString(); - - PostDTO postDTO = om.readValue(body, PostDTO.class); - PostDTO testPostDTO = postMapper.map(testPost); - - assertThat(postDTO.getName()).isEqualTo(testPostDTO.getName()); - assertThat(postDTO.getSlug()).isEqualTo(testPostDTO.getSlug()); - assertThat(postDTO.getBody()).isEqualTo(testPostDTO.getBody()); + .andReturn(); + var body = result.getResponse().getContentAsString(); + assertThatJson(body).and( + v -> v.node("slug").isEqualTo(testPost.getSlug()), + v -> v.node("name").isEqualTo(testPost.getName()), + v -> v.node("body").isEqualTo(testPost.getBody())); } @Test public void testIndex() throws Exception { + postRepository.save(testPost); var response = mockMvc.perform(get("/api/posts").with(token)) .andExpect(status().isOk()) .andReturn() @@ -124,68 +119,63 @@ public void testIndex() throws Exception { @Test public void testCreate() throws Exception { - - var createDTO = new PostCreateDTO(); - createDTO.setName("TestNameForPost"); - createDTO.setBody("TestBodyForPost"); - createDTO.setSlug("TestSlug"); - createDTO.setAuthorId(userUtils.getTestUser().getId()); - + var dto = postMapper.map(testPost); var request = post("/api/posts") .with(token) .contentType(MediaType.APPLICATION_JSON) - .content(om.writeValueAsString(createDTO)); + .content(om.writeValueAsString(dto)); mockMvc.perform(request) .andExpect(status().isCreated()); - var actualPost = postRepository.findBySlug(createDTO.getSlug()).orElseThrow(); - - assertNotNull(actualPost); - assertThat(actualPost.getName()).isEqualTo(createDTO.getName()); + var post = postRepository.findBySlug(testPost.getSlug()).get(); + assertNotNull(post); + assertThat(post.getName()).isEqualTo(testPost.getName()); } @Test public void testUpdate() throws Exception { + postRepository.save(testPost); - var postUpdateDTO = new PostUpdateDTO(); - postUpdateDTO.setName(JsonNullable.of("new name")); + var data = new PostUpdateDTO(); + data.setName(JsonNullable.of("new name")); - mockMvc.perform(put("/api/posts/" + testPost.getId()) - .with(token) - .contentType(MediaType.APPLICATION_JSON) - .content(om.writeValueAsString(postUpdateDTO))) - .andExpect(status().isOk()); + var request = put("/api/posts/" + testPost.getId()) + .with(token) + .contentType(MediaType.APPLICATION_JSON) + .content(om.writeValueAsString(data)); - var actualPost = postRepository.findById(testPost.getId()).orElseThrow(); + mockMvc.perform(request) + .andExpect(status().isOk()); - assertThat(actualPost.getName()).isEqualTo(postUpdateDTO.getName().get()); + testPost = postRepository.findById(testPost.getId()).get(); + assertThat(testPost.getName()).isEqualTo(data.getName().get()); } @Test public void testUpdateFailed() throws Exception { + postRepository.save(testPost); - var postUpdateDTO = new PostUpdateDTO(); - postUpdateDTO.setName(JsonNullable.of("new name")); + var data = new PostUpdateDTO(); + data.setName(JsonNullable.of("new name")); var request = put("/api/posts/" + testPost.getId()) .with(jwt()) .contentType(MediaType.APPLICATION_JSON) - .content(om.writeValueAsString(postUpdateDTO)); + .content(om.writeValueAsString(data)); mockMvc.perform(request) .andExpect(status().isForbidden()); - var actualPost = postRepository.findById(testPost.getId()).orElseThrow(); - + var actualPost = postRepository.findById(testPost.getId()).get(); assertThat(actualPost.getName()).isEqualTo(testPost.getName()); } @Test public void testDestroy() throws Exception { + postRepository.save(testPost); var request = delete("/api/posts/" + testPost.getId()).with(token); - mockMvc.perform(request) .andExpect(status().isNoContent()); @@ -194,8 +184,8 @@ public void testDestroy() throws Exception { @Test public void testDestroyFailed() throws Exception { + postRepository.save(testPost); var request = delete("/api/posts/" + testPost.getId()).with(jwt()); - mockMvc.perform(request) .andExpect(status().isForbidden()); diff --git a/src/test/java/io/hexlet/blog/controller/api/UsersControllerTest.java b/src/test/java/io/hexlet/blog/controller/api/UsersControllerTest.java index ddc892b..817e1e5 100644 --- a/src/test/java/io/hexlet/blog/controller/api/UsersControllerTest.java +++ b/src/test/java/io/hexlet/blog/controller/api/UsersControllerTest.java @@ -8,12 +8,13 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + import java.util.List; import java.nio.charset.StandardCharsets; +import java.util.HashMap; + import com.fasterxml.jackson.core.type.TypeReference; -import io.hexlet.blog.dto.UserCreateDTO; import io.hexlet.blog.dto.UserDTO; -import io.hexlet.blog.dto.UserUpdateDTO; import io.hexlet.blog.mapper.UserMapper; import org.assertj.core.api.Assertions; import org.instancio.Instancio; @@ -118,43 +119,38 @@ public void testIndex() throws Exception { @Test public void testCreate() throws Exception { - - var createDTO = new UserCreateDTO(); - createDTO.setEmail("testMail@example.com"); - createDTO.setPassword("testPassword"); - createDTO.setFirstName("Alice"); - createDTO.setLastName("Fox"); + var data = Instancio.of(modelGenerator.getUserModel()) + .create(); var request = post("/api/users") .with(token) .contentType(MediaType.APPLICATION_JSON) - .content(om.writeValueAsString(createDTO)); - + .content(om.writeValueAsString(data)); mockMvc.perform(request) .andExpect(status().isCreated()); - var actualUser = userRepository.findByEmail(createDTO.getEmail()).orElseThrow(); + var user = userRepository.findByEmail(data.getEmail()).get(); - assertNotNull(actualUser); - assertThat(actualUser.getFirstName()).isEqualTo(createDTO.getFirstName()); - assertThat(actualUser.getLastName()).isEqualTo(createDTO.getLastName()); + assertNotNull(user); + assertThat(user.getFirstName()).isEqualTo(data.getFirstName()); + assertThat(user.getLastName()).isEqualTo(data.getLastName()); } @Test public void testUpdate() throws Exception { - var updateDTO = new UserUpdateDTO(); - updateDTO.setFirstName("Mike"); + var data = new HashMap<>(); + data.put("firstName", "Mike"); - var request = put("/api/users/" + testUser.getId()).with(token) + var request = put("/api/users/" + testUser.getId()) + .with(token) .contentType(MediaType.APPLICATION_JSON) - .content(om.writeValueAsString(updateDTO)); + .content(om.writeValueAsString(data)); mockMvc.perform(request) .andExpect(status().isOk()); - var actualUser = userRepository.findById(testUser.getId()).orElseThrow(); - - assertThat(actualUser.getFirstName()).isEqualTo((updateDTO.getFirstName())); + var user = userRepository.findById(testUser.getId()).get(); + assertThat(user.getFirstName()).isEqualTo(("Mike")); } } From 538211dfd156beeef771778d528276dd4d068447 Mon Sep 17 00:00:00 2001 From: Alina Tarasova Date: Sat, 6 Jul 2024 14:55:12 +0300 Subject: [PATCH 18/19] Updated tests, testShow() --- .../api/PostsCommentsControllerTest.java | 9 ++-- .../controller/api/PostsControllerTest.java | 39 +++++++++--------- .../controller/api/UsersControllerTest.java | 41 ++++++++----------- 3 files changed, 39 insertions(+), 50 deletions(-) diff --git a/src/test/java/io/hexlet/blog/controller/api/PostsCommentsControllerTest.java b/src/test/java/io/hexlet/blog/controller/api/PostsCommentsControllerTest.java index b6ff98a..96cb383 100644 --- a/src/test/java/io/hexlet/blog/controller/api/PostsCommentsControllerTest.java +++ b/src/test/java/io/hexlet/blog/controller/api/PostsCommentsControllerTest.java @@ -10,7 +10,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; import io.hexlet.blog.dto.PostCommentDTO; import io.hexlet.blog.mapper.PostCommentMapper; -import io.hexlet.blog.model.PostComment; import org.assertj.core.api.Assertions; import org.instancio.Instancio; import org.junit.jupiter.api.BeforeEach; @@ -107,14 +106,12 @@ public void testIndex() throws Exception { var body = result.getResponse().getContentAsString(); Map content = om.readValue(body, new TypeReference<>() {}); - - Object postComments = content.get("content"); + var postComments = content.get("content"); List postCommentDTOS = om.convertValue(postComments, new TypeReference<>() {}); - List actual = postCommentDTOS.stream().map(postCommentMapper::map).toList(); - List expected = postCommentRepository.findAll(); - + var actual = postCommentDTOS.stream().map(postCommentMapper::map).toList(); + var expected = postCommentRepository.findAll(); Assertions.assertThat(actual).containsAll(expected); } diff --git a/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java b/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java index 1ce3387..c9cbe8f 100644 --- a/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java +++ b/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java @@ -84,36 +84,20 @@ public void setUp() { testPost.setAuthor(userUtils.getTestUser()); } - @Test - public void testShow() throws Exception { - postRepository.save(testPost); - - var request = get("/api/posts/" + testPost.getId()).with(jwt()); - var result = mockMvc.perform(request) - .andExpect(status().isOk()) - .andReturn(); - var body = result.getResponse().getContentAsString(); - assertThatJson(body).and( - v -> v.node("slug").isEqualTo(testPost.getSlug()), - v -> v.node("name").isEqualTo(testPost.getName()), - v -> v.node("body").isEqualTo(testPost.getBody())); - } - @Test public void testIndex() throws Exception { postRepository.save(testPost); + var response = mockMvc.perform(get("/api/posts").with(token)) .andExpect(status().isOk()) .andReturn() .getResponse(); - - String body = response.getContentAsString(); + var body = response.getContentAsString(); List postDTOS = om.readValue(body, new TypeReference<>() {}); - List actual = postDTOS.stream().map(postMapper::map).toList(); - List expected = postRepository.findAll(); - + var actual = postDTOS.stream().map(postMapper::map).toList(); + var expected = postRepository.findAll(); Assertions.assertThat(actual).containsAll(expected); } @@ -172,6 +156,21 @@ public void testUpdateFailed() throws Exception { assertThat(actualPost.getName()).isEqualTo(testPost.getName()); } + @Test + public void testShow() throws Exception { + postRepository.save(testPost); + + var request = get("/api/posts/" + testPost.getId()).with(jwt()); + var result = mockMvc.perform(request) + .andExpect(status().isOk()) + .andReturn(); + var body = result.getResponse().getContentAsString(); + assertThatJson(body).and( + v -> v.node("slug").isEqualTo(testPost.getSlug()), + v -> v.node("name").isEqualTo(testPost.getName()), + v -> v.node("body").isEqualTo(testPost.getBody())); + } + @Test public void testDestroy() throws Exception { postRepository.save(testPost); diff --git a/src/test/java/io/hexlet/blog/controller/api/UsersControllerTest.java b/src/test/java/io/hexlet/blog/controller/api/UsersControllerTest.java index 817e1e5..54c5bce 100644 --- a/src/test/java/io/hexlet/blog/controller/api/UsersControllerTest.java +++ b/src/test/java/io/hexlet/blog/controller/api/UsersControllerTest.java @@ -1,5 +1,6 @@ package io.hexlet.blog.controller.api; +import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.jwt; @@ -81,39 +82,18 @@ public void setUp() { userRepository.save(testUser); } - @Test - public void testShow() throws Exception { - var response = mockMvc.perform(get("/api/users/" - + testUser.getId()).with(jwt())) - .andExpect(status().isOk()) - .andReturn() - .getResponse(); - - String body = response.getContentAsString(); - - UserDTO userDTO = om.readValue(body, UserDTO.class); - - User user = userMapper.map(userDTO); - - assertThat(user.getEmail()).isEqualTo(testUser.getEmail()); - assertThat(user.getFirstName()).isEqualTo(testUser.getFirstName()); - assertThat(user.getLastName()).isEqualTo(testUser.getLastName()); - } - @Test public void testIndex() throws Exception { var response = mockMvc.perform(get("/api/users").with(jwt())) .andExpect(status().isOk()) .andReturn() .getResponse(); - - String body = response.getContentAsString(); + var body = response.getContentAsString(); List userDTOS = om.readValue(body, new TypeReference<>() {}); - List actual = userDTOS.stream().map(userMapper::map).toList(); - List expected = userRepository.findAll(); - + var actual = userDTOS.stream().map(userMapper::map).toList(); + var expected = userRepository.findAll(); Assertions.assertThat(actual).containsAll(expected); } @@ -153,4 +133,17 @@ public void testUpdate() throws Exception { var user = userRepository.findById(testUser.getId()).get(); assertThat(user.getFirstName()).isEqualTo(("Mike")); } + + @Test + public void testShow() throws Exception { + var request = get("/api/users/" + testUser.getId()).with(jwt()); + var result = mockMvc.perform(request) + .andExpect(status().isOk()) + .andReturn(); + var body = result.getResponse().getContentAsString(); + assertThatJson(body).and( + v -> v.node("username").isEqualTo(testUser.getEmail()), + v -> v.node("firstName").isEqualTo(testUser.getFirstName()), + v -> v.node("lastName").isEqualTo(testUser.getLastName())); + } } From 856ee817a915a7a43d9b5ea5451591614b7d378a Mon Sep 17 00:00:00 2001 From: Alina Tarasova Date: Fri, 26 Jul 2024 15:44:49 +0300 Subject: [PATCH 19/19] Updated testIndex() --- .../hexlet/blog/controller/api/PostsCommentsControllerTest.java | 2 +- .../java/io/hexlet/blog/controller/api/PostsControllerTest.java | 2 +- .../java/io/hexlet/blog/controller/api/UsersControllerTest.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/java/io/hexlet/blog/controller/api/PostsCommentsControllerTest.java b/src/test/java/io/hexlet/blog/controller/api/PostsCommentsControllerTest.java index 96cb383..60dfb9d 100644 --- a/src/test/java/io/hexlet/blog/controller/api/PostsCommentsControllerTest.java +++ b/src/test/java/io/hexlet/blog/controller/api/PostsCommentsControllerTest.java @@ -112,7 +112,7 @@ public void testIndex() throws Exception { var actual = postCommentDTOS.stream().map(postCommentMapper::map).toList(); var expected = postCommentRepository.findAll(); - Assertions.assertThat(actual).containsAll(expected); + Assertions.assertThat(actual).containsExactlyInAnyOrderElementsOf(expected); } @Test diff --git a/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java b/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java index c9cbe8f..11d8b89 100644 --- a/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java +++ b/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java @@ -98,7 +98,7 @@ public void testIndex() throws Exception { var actual = postDTOS.stream().map(postMapper::map).toList(); var expected = postRepository.findAll(); - Assertions.assertThat(actual).containsAll(expected); + Assertions.assertThat(actual).containsExactlyInAnyOrderElementsOf(expected); } @Test diff --git a/src/test/java/io/hexlet/blog/controller/api/UsersControllerTest.java b/src/test/java/io/hexlet/blog/controller/api/UsersControllerTest.java index 54c5bce..2e22efe 100644 --- a/src/test/java/io/hexlet/blog/controller/api/UsersControllerTest.java +++ b/src/test/java/io/hexlet/blog/controller/api/UsersControllerTest.java @@ -94,7 +94,7 @@ public void testIndex() throws Exception { var actual = userDTOS.stream().map(userMapper::map).toList(); var expected = userRepository.findAll(); - Assertions.assertThat(actual).containsAll(expected); + Assertions.assertThat(actual).containsExactlyInAnyOrderElementsOf(expected); } @Test