Skip to content

Commit eda1baf

Browse files
create TaskControllerTest.java
1 parent fe66829 commit eda1baf

File tree

1 file changed

+140
-0
lines changed

1 file changed

+140
-0
lines changed
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
package hexlet.code.controller.api;
2+
3+
import com.fasterxml.jackson.core.type.TypeReference;
4+
import com.fasterxml.jackson.databind.ObjectMapper;
5+
import hexlet.code.dto.task.TaskCreateDTO;
6+
import hexlet.code.dto.task.TaskDTO;
7+
import hexlet.code.mapper.TaskMapper;
8+
import hexlet.code.model.Task;
9+
import hexlet.code.repository.TaskRepository;
10+
import hexlet.code.util.ModelGenerator;
11+
import org.instancio.Instancio;
12+
import org.junit.jupiter.api.BeforeEach;
13+
import org.junit.jupiter.api.Test;
14+
import org.springframework.beans.factory.annotation.Autowired;
15+
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
16+
import org.springframework.boot.test.context.SpringBootTest;
17+
import org.springframework.http.MediaType;
18+
import org.springframework.test.web.servlet.MockMvc;
19+
20+
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
21+
import org.springframework.web.context.WebApplicationContext;
22+
23+
import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
24+
import static org.assertj.core.api.Assertions.assertThat;
25+
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
26+
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
27+
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put;
28+
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
29+
30+
import java.nio.charset.StandardCharsets;
31+
import java.util.HashMap;
32+
import java.util.List;
33+
34+
35+
@SpringBootTest
36+
@AutoConfigureMockMvc
37+
class TaskControllerTest {
38+
private final String url = "/api/tasks";
39+
@Autowired
40+
private WebApplicationContext wac;
41+
42+
@Autowired
43+
private MockMvc mvc;
44+
45+
@Autowired
46+
private ObjectMapper om;
47+
48+
@Autowired
49+
private ModelGenerator modelGenerator;
50+
51+
@Autowired
52+
private TaskRepository taskRepository;
53+
54+
@Autowired
55+
private TaskMapper taskMapper;
56+
57+
private Task testTask;
58+
59+
@BeforeEach
60+
public void setUp() {
61+
mvc = MockMvcBuilders.webAppContextSetup(wac)
62+
.defaultResponseCharacterEncoding(StandardCharsets.UTF_8)
63+
.build();
64+
65+
testTask = Instancio.of(modelGenerator.getTaskModel()).create();
66+
taskRepository.save(testTask);
67+
}
68+
69+
@Test
70+
void testIndex() throws Exception {
71+
var response = mvc.perform(get(url))
72+
.andExpect(status().isOk())
73+
.andReturn()
74+
.getResponse();
75+
var body = response.getContentAsString();
76+
77+
List<TaskDTO> taskDTOList = om.readValue(body, new TypeReference<>() {});
78+
79+
var actual = taskDTOList.stream().map(taskMapper::map).toList();
80+
var expected = taskRepository.findAll();
81+
assertThat(actual).containsExactlyInAnyOrderElementsOf(expected);
82+
}
83+
84+
@Test
85+
void testShow() throws Exception {
86+
var request = get(url + "/{id}", testTask.getId());
87+
var result = mvc.perform(request)
88+
.andExpect(status().isOk())
89+
.andReturn()
90+
.getResponse();
91+
var body = result.getContentAsString();
92+
93+
assertThatJson(body).and(
94+
v -> v.node("index").isEqualTo(testTask.getIndex()),
95+
v -> v.node("title").isEqualTo(testTask.getName()),
96+
v -> v.node("content").isEqualTo(testTask.getDescription()),
97+
v -> v.node("status").isEqualTo(testTask.getTaskStatus().getSlug()),
98+
v -> v.node("assignee_id").isEqualTo(testTask.getAssignee().getId())
99+
);
100+
}
101+
102+
@Test
103+
void testCreate() throws Exception {
104+
var createData = new TaskCreateDTO();
105+
createData.setIndex(testTask.getIndex());
106+
createData.setTitle("TestTask");
107+
createData.setContent(testTask.getDescription());
108+
createData.setStatus(testTask.getTaskStatus().getSlug());
109+
createData.setAssigneeId(testTask.getAssignee().getId());
110+
111+
var request = post(url)
112+
.contentType(MediaType.APPLICATION_JSON)
113+
.content(om.writeValueAsString(createData));
114+
115+
mvc.perform(request).andExpect(status().isCreated());
116+
117+
var task = taskRepository.findByName(createData.getTitle()).orElse(null);
118+
119+
assertThat(task).isNotNull();
120+
assertThat(task.getIndex()).isEqualTo(createData.getIndex());
121+
assertThat(task.getDescription()).isEqualTo(createData.getContent());
122+
assertThat(task.getTaskStatus().getSlug()).isEqualTo(createData.getStatus());
123+
assertThat(task.getAssignee().getId()).isEqualTo(createData.getAssigneeId());
124+
}
125+
126+
@Test
127+
void testUpdate() throws Exception {
128+
var data = new HashMap<>();
129+
data.put("index", 12345);
130+
131+
var request = put(url + "/{id}", testTask.getId())
132+
.contentType(MediaType.APPLICATION_JSON)
133+
.content(om.writeValueAsString(data));
134+
135+
mvc.perform(request).andExpect(status().isOk());
136+
137+
var task = taskRepository.findById(testTask.getId()).orElse(null);
138+
assertThat(task.getIndex()).isEqualTo(12345);
139+
}
140+
}

0 commit comments

Comments
 (0)