From 2a32225b7154b5cf4ec03f2f508801df99cc1c7d Mon Sep 17 00:00:00 2001 From: Alina Tarasova Date: Mon, 19 Aug 2024 10:10:30 +0300 Subject: [PATCH 1/2] Deleted @Transactional and added @AfterEach in tests --- .../api/PostsCommentsControllerTest.java | 29 +++++++++++++------ .../controller/api/PostsControllerTest.java | 20 ++++++++++--- .../controller/api/UsersControllerTest.java | 12 +++++--- 3 files changed, 44 insertions(+), 17 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 60dfb9d..1834c89 100644 --- a/src/test/java/io/hexlet/blog/controller/api/PostsCommentsControllerTest.java +++ b/src/test/java/io/hexlet/blog/controller/api/PostsCommentsControllerTest.java @@ -10,9 +10,11 @@ import com.fasterxml.jackson.databind.ObjectMapper; import io.hexlet.blog.dto.PostCommentDTO; import io.hexlet.blog.mapper.PostCommentMapper; +import io.hexlet.blog.model.User; import org.assertj.core.api.Assertions; import org.instancio.Instancio; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; @@ -24,10 +26,9 @@ import io.hexlet.blog.repository.PostCommentRepository; import io.hexlet.blog.repository.PostRepository; import io.hexlet.blog.util.ModelGenerator; -import io.hexlet.blog.util.UserUtils; -import jakarta.transaction.Transactional; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; +import io.hexlet.blog.repository.UserRepository; import java.nio.charset.StandardCharsets; import java.util.List; @@ -35,7 +36,6 @@ @SpringBootTest -@Transactional @AutoConfigureMockMvc public class PostsCommentsControllerTest { @@ -55,7 +55,7 @@ public class PostsCommentsControllerTest { private PostCommentRepository postCommentRepository; @Autowired - private UserUtils userUtils; + private UserRepository userRepository; private JwtRequestPostProcessor token; @@ -67,6 +67,8 @@ public class PostsCommentsControllerTest { @Autowired private PostCommentMapper postCommentMapper; + private User testUser; + @BeforeEach public void setUp() { @@ -75,29 +77,38 @@ public void setUp() { .apply(springSecurity()) .build(); - token = jwt().jwt(builder -> builder.subject("hexlet@example.com")); + testUser = Instancio.of(modelGenerator.getUserModel()).create(); + userRepository.save(testUser); + token = jwt().jwt(builder -> builder.subject(testUser.getEmail())); testPost = Instancio.of(modelGenerator.getPostModel()) .create(); - testPost.setAuthor(userUtils.getTestUser()); + testPost.setAuthor(testUser); postRepository.save(testPost); var testPost2 = Instancio.of(modelGenerator.getPostModel()) .create(); - testPost2.setAuthor(userUtils.getTestUser()); + testPost2.setAuthor(testUser); postRepository.save(testPost2); var testPostComment = Instancio.of(modelGenerator.getPostCommentModel()).create(); testPostComment.setPost(testPost); - testPostComment.setAuthor(userUtils.getTestUser()); + testPostComment.setAuthor(testUser); postCommentRepository.save(testPostComment); var testPostComment2 = Instancio.of(modelGenerator.getPostCommentModel()).create(); testPostComment2.setPost(testPost2); - testPostComment2.setAuthor(userUtils.getTestUser()); + testPostComment2.setAuthor(testUser); postCommentRepository.save(testPostComment2); } + @AfterEach + public void clean() { + postCommentRepository.deleteAll(); + postRepository.deleteAll(); + userRepository.deleteAll(); + } + @Test public void testIndex() throws Exception { var result = mockMvc.perform(get("/api/posts_comments").with(token)) 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 11d8b89..eec13ad 100644 --- a/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java +++ b/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java @@ -13,8 +13,11 @@ import com.fasterxml.jackson.core.type.TypeReference; import io.hexlet.blog.dto.PostDTO; +import io.hexlet.blog.model.User; +import io.hexlet.blog.repository.UserRepository; import org.assertj.core.api.Assertions; import org.instancio.Instancio; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.openapitools.jackson.nullable.JsonNullable; @@ -32,7 +35,6 @@ import io.hexlet.blog.model.Post; import io.hexlet.blog.repository.PostRepository; import io.hexlet.blog.util.ModelGenerator; -import io.hexlet.blog.util.UserUtils; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; @@ -63,12 +65,14 @@ public class PostsControllerTest { private PostRepository postRepository; @Autowired - private UserUtils userUtils; + private UserRepository userRepository; private JwtRequestPostProcessor token; private Post testPost; + private User testUser; + @BeforeEach public void setUp() { @@ -77,11 +81,19 @@ public void setUp() { .apply(springSecurity()) .build(); - token = jwt().jwt(builder -> builder.subject("hexlet@example.com")); + testUser = Instancio.of(modelGenerator.getUserModel()).create(); + userRepository.save(testUser); + token = jwt().jwt(builder -> builder.subject(testUser.getEmail())); testPost = Instancio.of(modelGenerator.getPostModel()) .create(); - testPost.setAuthor(userUtils.getTestUser()); + testPost.setAuthor(testUser); + } + + @AfterEach + public void clean() { + postRepository.deleteAll(); + userRepository.deleteAll(); } @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 2e22efe..a692211 100644 --- a/src/test/java/io/hexlet/blog/controller/api/UsersControllerTest.java +++ b/src/test/java/io/hexlet/blog/controller/api/UsersControllerTest.java @@ -19,6 +19,7 @@ import io.hexlet.blog.mapper.UserMapper; import org.assertj.core.api.Assertions; import org.instancio.Instancio; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -75,11 +76,14 @@ public void setUp() { .apply(springSecurity()) .build(); - token = jwt().jwt(builder -> builder.subject("hexlet@example.com")); - - testUser = Instancio.of(modelGenerator.getUserModel()) - .create(); + testUser = Instancio.of(modelGenerator.getUserModel()).create(); userRepository.save(testUser); + token = jwt().jwt(builder -> builder.subject(testUser.getEmail())); + } + + @AfterEach + public void clean() { + userRepository.deleteAll(); } @Test From e836aa9a1131223161f44aa051da271a50ea4d7d Mon Sep 17 00:00:00 2001 From: alina tarasova Date: Sat, 18 Jan 2025 15:57:25 +0300 Subject: [PATCH 2/2] Clearing data before tests, replacing get() with orElseThrow() --- .../api/PostsCommentsControllerTest.java | 35 +++++------- .../controller/api/PostsControllerTest.java | 57 +++++++++---------- .../controller/api/UsersControllerTest.java | 52 ++++++++--------- 3 files changed, 66 insertions(+), 78 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 1834c89..8d116b3 100644 --- a/src/test/java/io/hexlet/blog/controller/api/PostsCommentsControllerTest.java +++ b/src/test/java/io/hexlet/blog/controller/api/PostsCommentsControllerTest.java @@ -1,39 +1,37 @@ 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; -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.Post; import io.hexlet.blog.model.User; +import io.hexlet.blog.repository.PostCommentRepository; +import io.hexlet.blog.repository.PostRepository; +import io.hexlet.blog.repository.UserRepository; +import io.hexlet.blog.util.ModelGenerator; import org.assertj.core.api.Assertions; import org.instancio.Instancio; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.JwtRequestPostProcessor; import org.springframework.test.web.servlet.MockMvc; - -import io.hexlet.blog.model.Post; -import io.hexlet.blog.repository.PostCommentRepository; -import io.hexlet.blog.repository.PostRepository; -import io.hexlet.blog.util.ModelGenerator; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; -import io.hexlet.blog.repository.UserRepository; import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Map; +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; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + @SpringBootTest @AutoConfigureMockMvc @@ -72,6 +70,10 @@ public class PostsCommentsControllerTest { @BeforeEach public void setUp() { + postCommentRepository.deleteAll(); + postRepository.deleteAll(); + userRepository.deleteAll(); + mockMvc = MockMvcBuilders.webAppContextSetup(wac) .defaultResponseCharacterEncoding(StandardCharsets.UTF_8) .apply(springSecurity()) @@ -102,13 +104,6 @@ public void setUp() { postCommentRepository.save(testPostComment2); } - @AfterEach - public void clean() { - postCommentRepository.deleteAll(); - postRepository.deleteAll(); - userRepository.deleteAll(); - } - @Test public void testIndex() throws Exception { var result = mockMvc.perform(get("/api/posts_comments").with(token)) 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 eec13ad..a6369d6 100644 --- a/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java +++ b/src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java @@ -1,23 +1,18 @@ 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; -import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -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 com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; import io.hexlet.blog.dto.PostDTO; +import io.hexlet.blog.dto.PostUpdateDTO; +import io.hexlet.blog.mapper.PostMapper; +import io.hexlet.blog.model.Post; import io.hexlet.blog.model.User; +import io.hexlet.blog.repository.PostCommentRepository; +import io.hexlet.blog.repository.PostRepository; import io.hexlet.blog.repository.UserRepository; +import io.hexlet.blog.util.ModelGenerator; import org.assertj.core.api.Assertions; import org.instancio.Instancio; -import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.openapitools.jackson.nullable.JsonNullable; @@ -27,20 +22,23 @@ import org.springframework.http.MediaType; import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.JwtRequestPostProcessor; import org.springframework.test.web.servlet.MockMvc; - -import com.fasterxml.jackson.databind.ObjectMapper; - -import io.hexlet.blog.dto.PostUpdateDTO; -import io.hexlet.blog.mapper.PostMapper; -import io.hexlet.blog.model.Post; -import io.hexlet.blog.repository.PostRepository; -import io.hexlet.blog.util.ModelGenerator; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; import java.nio.charset.StandardCharsets; import java.util.List; +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; +import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +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; + @SpringBootTest @AutoConfigureMockMvc @@ -67,6 +65,9 @@ public class PostsControllerTest { @Autowired private UserRepository userRepository; + @Autowired + private PostCommentRepository postCommentRepository; + private JwtRequestPostProcessor token; private Post testPost; @@ -76,6 +77,10 @@ public class PostsControllerTest { @BeforeEach public void setUp() { + postCommentRepository.deleteAll(); + postRepository.deleteAll(); + userRepository.deleteAll(); + mockMvc = MockMvcBuilders.webAppContextSetup(wac) .defaultResponseCharacterEncoding(StandardCharsets.UTF_8) .apply(springSecurity()) @@ -90,12 +95,6 @@ public void setUp() { testPost.setAuthor(testUser); } - @AfterEach - public void clean() { - postRepository.deleteAll(); - userRepository.deleteAll(); - } - @Test public void testIndex() throws Exception { postRepository.save(testPost); @@ -125,7 +124,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()); } @@ -145,7 +144,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()); } @@ -164,7 +163,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 a692211..a6b58b4 100644 --- a/src/test/java/io/hexlet/blog/controller/api/UsersControllerTest.java +++ b/src/test/java/io/hexlet/blog/controller/api/UsersControllerTest.java @@ -1,25 +1,15 @@ 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; -import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -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 com.fasterxml.jackson.databind.ObjectMapper; import io.hexlet.blog.dto.UserDTO; import io.hexlet.blog.mapper.UserMapper; +import io.hexlet.blog.model.User; +import io.hexlet.blog.repository.UserRepository; +import io.hexlet.blog.util.ModelGenerator; +import net.datafaker.Faker; import org.assertj.core.api.Assertions; import org.instancio.Instancio; -import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -28,16 +18,23 @@ import org.springframework.http.MediaType; import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.JwtRequestPostProcessor; import org.springframework.test.web.servlet.MockMvc; - -import com.fasterxml.jackson.databind.ObjectMapper; - -import io.hexlet.blog.model.User; -import io.hexlet.blog.repository.UserRepository; -import io.hexlet.blog.util.ModelGenerator; -import net.datafaker.Faker; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; +import java.nio.charset.StandardCharsets; +import java.util.HashMap; +import java.util.List; + +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; +import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +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; + @SpringBootTest @AutoConfigureMockMvc @@ -71,6 +68,8 @@ public class UsersControllerTest { @BeforeEach public void setUp() { + userRepository.deleteAll(); + mockMvc = MockMvcBuilders.webAppContextSetup(wac) .defaultResponseCharacterEncoding(StandardCharsets.UTF_8) .apply(springSecurity()) @@ -81,11 +80,6 @@ public void setUp() { token = jwt().jwt(builder -> builder.subject(testUser.getEmail())); } - @AfterEach - public void clean() { - userRepository.deleteAll(); - } - @Test public void testIndex() throws Exception { var response = mockMvc.perform(get("/api/users").with(jwt())) @@ -113,7 +107,7 @@ public 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()); @@ -134,7 +128,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")); }