1
+ package me .oldboy .integration .controllers .api_user_details_scenario ;
2
+
3
+ import com .fasterxml .jackson .databind .ObjectMapper ;
4
+ import lombok .SneakyThrows ;
5
+ import me .oldboy .config .test_data_source .TestContainerInit ;
6
+ import me .oldboy .dto .client_dto .ClientCreateDto ;
7
+ import me .oldboy .dto .client_dto .ClientReadDto ;
8
+ import me .oldboy .dto .details_dto .DetailsCreateDto ;
9
+ import me .oldboy .integration .annotation .IT ;
10
+ import me .oldboy .services .ClientService ;
11
+ import org .junit .jupiter .api .BeforeEach ;
12
+ import org .junit .jupiter .api .Test ;
13
+ import org .springframework .beans .factory .annotation .Autowired ;
14
+ import org .springframework .http .MediaType ;
15
+ import org .springframework .test .web .servlet .MockMvc ;
16
+ import org .springframework .test .web .servlet .MvcResult ;
17
+ import org .springframework .test .web .servlet .setup .MockMvcBuilders ;
18
+ import org .springframework .web .context .WebApplicationContext ;
19
+
20
+ import java .util .List ;
21
+
22
+ import static me .oldboy .test_constant .TestConstantFields .*;
23
+ import static org .assertj .core .api .Assertions .assertThat ;
24
+ import static org .junit .jupiter .api .Assertions .assertAll ;
25
+ import static org .springframework .security .test .web .servlet .setup .SecurityMockMvcConfigurers .springSecurity ;
26
+ import static org .springframework .test .web .servlet .request .MockMvcRequestBuilders .post ;
27
+ import static org .springframework .test .web .servlet .result .MockMvcResultMatchers .status ;
28
+
29
+ @ IT
30
+ class ClientControllerIT extends TestContainerInit {
31
+
32
+ @ Autowired
33
+ private WebApplicationContext webApplicationContext ;
34
+ @ Autowired
35
+ private ClientService clientService ;
36
+ private MockMvc mockMvc ;
37
+ private ClientCreateDto testClientCreateDto , notValidClientCreateDto , existClientCreateDto ;
38
+ private DetailsCreateDto testDetailsCreateDto , notValidClientDetailsDto ;
39
+ private ObjectMapper objectMapper ;
40
+
41
+ @ BeforeEach
42
+ void setUp (){
43
+ mockMvc = MockMvcBuilders .webAppContextSetup (webApplicationContext )
44
+ .apply (springSecurity ())
45
+ .build ();
46
+
47
+ objectMapper = new ObjectMapper ();
48
+
49
+ /* Валидные данные для сохранения при регистрации */
50
+ testDetailsCreateDto = DetailsCreateDto .builder ()
51
+ .clientName (TEST_CLIENT_NAME )
52
+ .clientSurName (TEST_CLIENT_SUR_NAME )
53
+ .age (TEST_AGE )
54
+ .build ();
55
+ testClientCreateDto = ClientCreateDto .builder ()
56
+ .email (TEST_EMAIL )
57
+ .password (TEST_PASS )
58
+ .details (testDetailsCreateDto )
59
+ .build ();
60
+ existClientCreateDto = ClientCreateDto .builder ()
61
+ .email (EXIST_EMAIL )
62
+ .password (TEST_PASS )
63
+ .details (testDetailsCreateDto )
64
+ .build ();
65
+
66
+ /* НЕ валидные данные для проверки валидатора при регистрации */
67
+ notValidClientDetailsDto = DetailsCreateDto .builder ()
68
+ .clientName ("A" )
69
+ .clientSurName ("A" )
70
+ .age (-5 )
71
+ .build ();
72
+ notValidClientCreateDto = ClientCreateDto .builder ()
73
+ .email ("er" )
74
+ .password ("1" )
75
+ .details (notValidClientDetailsDto )
76
+ .build ();
77
+ }
78
+
79
+ @ Test
80
+ @ SneakyThrows
81
+ void registrationClient_ValidRegData_ShouldReturnOk_AndSavedClientDto_Test () {
82
+ String requestBodyData = objectMapper .writeValueAsString (testClientCreateDto ); // Подготовим данные для сохранения
83
+ List <ClientReadDto > beforeSaveBase = clientService .findAll (); // Получим копию списка клиентов до сохранения
84
+
85
+ /* Имитируем запрос на сохранение клиента */
86
+ MvcResult result = mockMvc .perform (post ("/api/regClient" )
87
+ .contentType (MediaType .APPLICATION_JSON )
88
+ .content (requestBodyData ))
89
+ .andExpect (status ().isOk ())
90
+ .andReturn ();
91
+
92
+ List <ClientReadDto > afterSaveBase = clientService .findAll (); // Получим копию списка клиентов после сохранения
93
+
94
+ /* Получим результат запроса, обработаем до нужного формата и сравним с исходным */
95
+ String strReturn = result .getResponse ().getContentAsString ();
96
+ ClientReadDto savedClientDto = objectMapper .readValue (strReturn , ClientReadDto .class );
97
+
98
+ assertAll (
99
+ () -> assertThat (savedClientDto .getEmail ()).isEqualTo (testClientCreateDto .getEmail ()),
100
+ () -> assertThat (savedClientDto .getClientName ()).isEqualTo (testClientCreateDto .getDetails ().clientName ()),
101
+ () -> assertThat (savedClientDto .getClientSurName ()).isEqualTo (testClientCreateDto .getDetails ().clientSurName ()),
102
+ () -> assertThat (savedClientDto .getAge ()).isEqualTo (testClientCreateDto .getDetails ().age ())
103
+ );
104
+
105
+ assertThat (afterSaveBase .size ()).isGreaterThan (beforeSaveBase .size ()); // Сравним размер списка клиентов до и после сохранения
106
+ }
107
+
108
+ @ Test
109
+ @ SneakyThrows
110
+ void registrationClient_NotValidRegData_ShouldReturnBadRequest_AndErrorWarnings_Test () {
111
+ String requestBodyData = objectMapper .writeValueAsString (notValidClientCreateDto );
112
+
113
+ MvcResult result = mockMvc .perform (post ("/api/regClient" )
114
+ .contentType (MediaType .APPLICATION_JSON )
115
+ .content (requestBodyData ))
116
+ .andExpect (status ().isBadRequest ())
117
+ .andReturn ();
118
+
119
+ String strReturn = result .getResponse ().getContentAsString ();
120
+
121
+ assertAll (
122
+ () -> assertThat (strReturn .contains ("Standard e-mail structure - email_name@email_domain.top_lavel_domain (for example: paul@tradsystem.ru)" )).isTrue (),
123
+ () -> assertThat (strReturn .contains ("Age can't be lass then 0, unless you come from a counter-directional universe!" )).isTrue (),
124
+ () -> assertThat (strReturn .contains ("Password size can be between 2 and 64" )).isTrue ()
125
+ );
126
+ }
127
+
128
+ @ Test
129
+ @ SneakyThrows
130
+ void registrationClient_TryToDuplicateReg_ShouldReturnBadRequest_AndErrorWarnings_Test () {
131
+ String requestBodyData = objectMapper .writeValueAsString (existClientCreateDto );
132
+
133
+ MvcResult result = mockMvc .perform (post ("/api/regClient" )
134
+ .contentType (MediaType .APPLICATION_JSON )
135
+ .content (requestBodyData ))
136
+ .andExpect (status ().isBadRequest ())
137
+ .andReturn ();
138
+
139
+ String strReturn = result .getResponse ().getContentAsString ();
140
+
141
+ assertThat (strReturn .contains ("Email: " + EXIST_EMAIL + " is exist, can not duplicate data." )).isTrue ();
142
+ }
143
+ }
0 commit comments