Skip to content

Commit 520a36c

Browse files
authored
Merge pull request #33 from funnyDevGirl/test-json
Сравнение объектов в тестах
2 parents d9c5518 + 856ee81 commit 520a36c

File tree

6 files changed

+92
-17
lines changed

6 files changed

+92
-17
lines changed

src/main/java/io/hexlet/blog/mapper/PostCommentMapper.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,9 @@ public abstract class PostCommentMapper {
1919
@Mapping(source = "author.id", target = "authorId")
2020
@Mapping(source = "post.id", target = "postId")
2121
public abstract PostCommentDTO map(PostComment model);
22+
23+
@Mapping(source = "authorId", target = "author.id")
24+
@Mapping(source = "postId", target = "post.id")
25+
public abstract PostComment map(PostCommentDTO model);
2226
}
2327

src/main/java/io/hexlet/blog/mapper/PostMapper.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,8 @@ public abstract class PostMapper {
2525
@Mapping(source = "author.id", target = "authorId")
2626
public abstract PostDTO map(Post model);
2727

28+
@Mapping(source = "authorId", target = "author.id")
29+
public abstract Post map(PostDTO model);
30+
2831
public abstract void update(PostUpdateDTO dto, @MappingTarget Post model);
2932
}

src/main/java/io/hexlet/blog/mapper/UserMapper.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ public abstract class UserMapper {
3535
@Mapping(target = "password", ignore = true)
3636
public abstract UserDTO map(User model);
3737

38+
@Mapping(target = "email", source = "username")
39+
public abstract User map(UserDTO model);
40+
3841
public abstract void update(UserUpdateDTO update, @MappingTarget User destination);
3942

4043
@BeforeMapping

src/test/java/io/hexlet/blog/controller/api/PostsCommentsControllerTest.java

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@
66
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
77
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
88

9+
import com.fasterxml.jackson.core.type.TypeReference;
10+
import com.fasterxml.jackson.databind.ObjectMapper;
11+
import io.hexlet.blog.dto.PostCommentDTO;
12+
import io.hexlet.blog.mapper.PostCommentMapper;
13+
import org.assertj.core.api.Assertions;
914
import org.instancio.Instancio;
1015
import org.junit.jupiter.api.BeforeEach;
1116
import org.junit.jupiter.api.Test;
@@ -25,6 +30,9 @@
2530
import org.springframework.web.context.WebApplicationContext;
2631

2732
import java.nio.charset.StandardCharsets;
33+
import java.util.List;
34+
import java.util.Map;
35+
2836

2937
@SpringBootTest
3038
@Transactional
@@ -53,6 +61,13 @@ public class PostsCommentsControllerTest {
5361

5462
private Post testPost;
5563

64+
@Autowired
65+
private ObjectMapper om;
66+
67+
@Autowired
68+
private PostCommentMapper postCommentMapper;
69+
70+
5671
@BeforeEach
5772
public void setUp() {
5873
mockMvc = MockMvcBuilders.webAppContextSetup(wac)
@@ -89,10 +104,15 @@ public void testIndex() throws Exception {
89104
.andExpect(status().isOk())
90105
.andReturn();
91106
var body = result.getResponse().getContentAsString();
92-
assertThatJson(body)
93-
.node("content")
94-
.isArray()
95-
.hasSize(2);
107+
108+
Map<String, Object> content = om.readValue(body, new TypeReference<>() {});
109+
var postComments = content.get("content");
110+
111+
List<PostCommentDTO> postCommentDTOS = om.convertValue(postComments, new TypeReference<>() {});
112+
113+
var actual = postCommentDTOS.stream().map(postCommentMapper::map).toList();
114+
var expected = postCommentRepository.findAll();
115+
Assertions.assertThat(actual).containsExactlyInAnyOrderElementsOf(expected);
96116
}
97117

98118
@Test
@@ -102,9 +122,8 @@ public void testFilteredIndex() throws Exception {
102122
.andReturn();
103123
var body = result.getResponse().getContentAsString();
104124
assertThatJson(body)
105-
.node("content")
106-
.isArray()
107-
.hasSize(1);
125+
.node("content")
126+
.isArray()
127+
.hasSize(1);
108128
}
109129
}
110-

src/test/java/io/hexlet/blog/controller/api/PostsControllerTest.java

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put;
1212
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
1313

14+
import com.fasterxml.jackson.core.type.TypeReference;
15+
import io.hexlet.blog.dto.PostDTO;
16+
import org.assertj.core.api.Assertions;
1417
import org.instancio.Instancio;
1518
import org.junit.jupiter.api.BeforeEach;
1619
import org.junit.jupiter.api.Test;
@@ -34,6 +37,8 @@
3437
import org.springframework.web.context.WebApplicationContext;
3538

3639
import java.nio.charset.StandardCharsets;
40+
import java.util.List;
41+
3742

3843
@SpringBootTest
3944
@AutoConfigureMockMvc
@@ -64,6 +69,7 @@ public class PostsControllerTest {
6469

6570
private Post testPost;
6671

72+
6773
@BeforeEach
6874
public void setUp() {
6975
mockMvc = MockMvcBuilders.webAppContextSetup(wac)
@@ -81,11 +87,18 @@ public void setUp() {
8187
@Test
8288
public void testIndex() throws Exception {
8389
postRepository.save(testPost);
84-
var result = mockMvc.perform(get("/api/posts").with(token))
90+
91+
var response = mockMvc.perform(get("/api/posts").with(token))
8592
.andExpect(status().isOk())
86-
.andReturn();
87-
var body = result.getResponse().getContentAsString();
88-
assertThatJson(body).isArray();
93+
.andReturn()
94+
.getResponse();
95+
var body = response.getContentAsString();
96+
97+
List<PostDTO> postDTOS = om.readValue(body, new TypeReference<>() {});
98+
99+
var actual = postDTOS.stream().map(postMapper::map).toList();
100+
var expected = postRepository.findAll();
101+
Assertions.assertThat(actual).containsExactlyInAnyOrderElementsOf(expected);
89102
}
90103

91104
@Test

src/test/java/io/hexlet/blog/controller/api/UsersControllerTest.java

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,23 @@
11
package io.hexlet.blog.controller.api;
22

3+
import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
34
import static org.assertj.core.api.Assertions.assertThat;
45
import static org.junit.jupiter.api.Assertions.assertNotNull;
56
import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.jwt;
67
import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity;
78
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
8-
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put;
99
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
10+
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put;
1011
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
1112

13+
import java.util.List;
1214
import java.nio.charset.StandardCharsets;
1315
import java.util.HashMap;
1416

17+
import com.fasterxml.jackson.core.type.TypeReference;
18+
import io.hexlet.blog.dto.UserDTO;
19+
import io.hexlet.blog.mapper.UserMapper;
20+
import org.assertj.core.api.Assertions;
1521
import org.instancio.Instancio;
1622
import org.junit.jupiter.api.BeforeEach;
1723
import org.junit.jupiter.api.Test;
@@ -31,6 +37,7 @@
3137
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
3238
import org.springframework.web.context.WebApplicationContext;
3339

40+
3441
@SpringBootTest
3542
@AutoConfigureMockMvc
3643
public class UsersControllerTest {
@@ -53,10 +60,14 @@ public class UsersControllerTest {
5360
@Autowired
5461
private ObjectMapper om;
5562

63+
@Autowired
64+
private UserMapper userMapper;
65+
5666
private JwtRequestPostProcessor token;
5767

5868
private User testUser;
5969

70+
6071
@BeforeEach
6172
public void setUp() {
6273
mockMvc = MockMvcBuilders.webAppContextSetup(wac)
@@ -73,12 +84,21 @@ public void setUp() {
7384

7485
@Test
7586
public void testIndex() throws Exception {
76-
mockMvc.perform(get("/api/users").with(jwt()))
77-
.andExpect(status().isOk());
87+
var response = mockMvc.perform(get("/api/users").with(jwt()))
88+
.andExpect(status().isOk())
89+
.andReturn()
90+
.getResponse();
91+
var body = response.getContentAsString();
92+
93+
List<UserDTO> userDTOS = om.readValue(body, new TypeReference<>() {});
94+
95+
var actual = userDTOS.stream().map(userMapper::map).toList();
96+
var expected = userRepository.findAll();
97+
Assertions.assertThat(actual).containsExactlyInAnyOrderElementsOf(expected);
7898
}
7999

80100
@Test
81-
void testCreate() throws Exception {
101+
public void testCreate() throws Exception {
82102
var data = Instancio.of(modelGenerator.getUserModel())
83103
.create();
84104

@@ -108,9 +128,22 @@ public void testUpdate() throws Exception {
108128
.content(om.writeValueAsString(data));
109129

110130
mockMvc.perform(request)
111-
.andExpect(status().isOk());
131+
.andExpect(status().isOk());
112132

113133
var user = userRepository.findById(testUser.getId()).get();
114134
assertThat(user.getFirstName()).isEqualTo(("Mike"));
115135
}
136+
137+
@Test
138+
public void testShow() throws Exception {
139+
var request = get("/api/users/" + testUser.getId()).with(jwt());
140+
var result = mockMvc.perform(request)
141+
.andExpect(status().isOk())
142+
.andReturn();
143+
var body = result.getResponse().getContentAsString();
144+
assertThatJson(body).and(
145+
v -> v.node("username").isEqualTo(testUser.getEmail()),
146+
v -> v.node("firstName").isEqualTo(testUser.getFirstName()),
147+
v -> v.node("lastName").isEqualTo(testUser.getLastName()));
148+
}
116149
}

0 commit comments

Comments
 (0)