Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit bac0145

Browse files
Security_part_11_3: add ContactControllerIT.java
1 parent 295f3a8 commit bac0145

File tree

1 file changed

+117
-0
lines changed

1 file changed

+117
-0
lines changed
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
package me.oldboy.integration.controllers.api_user_details_scenario;
2+
3+
import com.fasterxml.jackson.core.type.TypeReference;
4+
import com.fasterxml.jackson.databind.ObjectMapper;
5+
import lombok.SneakyThrows;
6+
import me.oldboy.config.test_data_source.TestContainerInit;
7+
import me.oldboy.dto.contact_dto.ContactReadDto;
8+
import me.oldboy.integration.annotation.IT;
9+
import org.junit.jupiter.api.BeforeEach;
10+
import org.junit.jupiter.api.Test;
11+
import org.springframework.beans.factory.annotation.Autowired;
12+
import org.springframework.security.test.context.support.WithUserDetails;
13+
import org.springframework.test.web.servlet.MockMvc;
14+
import org.springframework.test.web.servlet.MvcResult;
15+
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
16+
import org.springframework.web.context.WebApplicationContext;
17+
18+
import java.util.List;
19+
20+
import static me.oldboy.test_constant.TestConstantFields.*;
21+
import static org.assertj.core.api.Assertions.assertThat;
22+
import static org.junit.jupiter.api.Assertions.assertAll;
23+
import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity;
24+
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
25+
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
26+
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
27+
28+
@IT
29+
class ContactControllerIT extends TestContainerInit {
30+
31+
@Autowired
32+
private WebApplicationContext webApplicationContext;
33+
private MockMvc mockMvc;
34+
35+
@BeforeEach
36+
void setUp(){
37+
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext)
38+
.apply(springSecurity())
39+
.build();
40+
}
41+
42+
@Test
43+
@SneakyThrows
44+
@WithUserDetails(value = EXIST_EMAIL, userDetailsServiceBeanName = "clientDetailsService")
45+
void getContactDetails_ShouldReturnContactReadDto_Test() {
46+
MvcResult result = mockMvc.perform(get("/api/myContact"))
47+
.andExpect(status().isOk())
48+
.andReturn();
49+
50+
String strResponse = result.getResponse().getContentAsString();
51+
/* Проверяем наличие DTO полей в ответе (он явно не пустой) */
52+
assertAll(
53+
() -> assertThat(strResponse.contains("city")).isTrue(),
54+
() -> assertThat(strResponse.contains("postalCode")).isTrue(),
55+
() -> assertThat(strResponse.contains("address")).isTrue(),
56+
() -> assertThat(strResponse.contains("building")).isTrue(),
57+
() -> assertThat(strResponse.contains("apartment")).isTrue(),
58+
() -> assertThat(strResponse.contains("homePhone")).isTrue(),
59+
() -> assertThat(strResponse.contains("mobilePhone")).isTrue()
60+
);
61+
}
62+
63+
/* Ниже два теста проверяют работу @PreAuthorize("hasRole('ADMIN')") над методом, ну и сам метод в случае успеха */
64+
@Test
65+
@SneakyThrows
66+
@WithUserDetails(value = EXIST_EMAIL, userDetailsServiceBeanName = "clientDetailsService")
67+
void getAllContacts_ShouldReturnDtoList_AdminAuth_Test() {
68+
MvcResult result = mockMvc.perform(get("/api/user-contacts"))
69+
.andExpect(status().isOk())
70+
.andReturn();
71+
72+
String strResultResponse = result.getResponse().getContentAsString();
73+
74+
List<ContactReadDto> listFromResponse = new ObjectMapper()
75+
.readValue(strResultResponse, new TypeReference<List<ContactReadDto>>() {});
76+
77+
assertThat(listFromResponse.size()).isGreaterThan(1);
78+
}
79+
80+
@Test
81+
@SneakyThrows
82+
@WithUserDetails(value = EXIST_EMAIL_WITH_READ_AUTH, userDetailsServiceBeanName = "clientDetailsService")
83+
void getAllContacts_ShouldReturnBadRequest_NotAdminAuth_Test() {
84+
mockMvc.perform(get("/api/user-contacts"))
85+
.andExpect(status().isBadRequest())
86+
.andExpect(content().string("{\"exceptionMsg\":\"Access Denied\"}"));
87+
}
88+
89+
/* Ниже тесты проверяют работу @PostAuthorize("#myCity == returnObject.city") над методом, ну и сам метод в случае успеха */
90+
@Test
91+
@SneakyThrows
92+
@WithUserDetails(value = EXIST_EMAIL, userDetailsServiceBeanName = "clientDetailsService")
93+
void getContactsIfConditionIsGood_ShouldReturnOneRecordOfExistingCity_Test() {
94+
String testCity = "Lovervill";
95+
96+
MvcResult result = mockMvc.perform(get("/api/user-contact-with-condition/" + testCity))
97+
.andExpect(status().isOk())
98+
.andReturn();
99+
100+
String strRes = result.getResponse().getContentAsString();
101+
102+
ContactReadDto respDto = new ObjectMapper().readValue(strRes, ContactReadDto.class);
103+
104+
assertThat(respDto.getCity()).isEqualTo(testCity);
105+
}
106+
107+
@Test
108+
@SneakyThrows
109+
@WithUserDetails(value = EXIST_EMAIL, userDetailsServiceBeanName = "clientDetailsService")
110+
void getContactsIfConditionIsGood_ShouldReturnBadRequest_NotExistingCity_Test() {
111+
String testCity = "Ufa";
112+
113+
mockMvc.perform(get("/api/user-contact-with-condition/" + testCity))
114+
.andExpect(status().isBadRequest())
115+
.andExpect(content().string(""));
116+
}
117+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /