44import com .bobocode .mvc .model .Note ;
55import com .fasterxml .jackson .databind .ObjectMapper ;
66import lombok .SneakyThrows ;
7- import org .junit .jupiter .api .MethodOrderer ;
8- import org .junit .jupiter .api .Order ;
9- import org .junit .jupiter .api .Test ;
10- import org .junit .jupiter .api .TestMethodOrder ;
7+ import org .junit .jupiter .api .*;
118import org .springframework .beans .factory .annotation .Autowired ;
129import org .springframework .boot .test .autoconfigure .web .servlet .WebMvcTest ;
1310import org .springframework .boot .test .mock .mockito .MockBean ;
@@ -38,25 +35,28 @@ class NoteRestControllerTest {
3835 @ Autowired
3936 private MockMvc mockMvc ;
4037
41- @ Order (1 )
4238 @ Test
39+ @ Order (1 )
40+ @ DisplayName ("Class is marked as @RestController" )
4341 void classIsMarkedAsRestController () {
4442 var restControllerAnnotation = NoteRestController .class .getAnnotation (RestController .class );
4543
4644 assertNotNull (restControllerAnnotation );
4745 }
4846
49- @ Order (2 )
5047 @ Test
48+ @ Order (2 )
49+ @ DisplayName ("Base URL `/api/notes` is specified in @RequestMapping" )
5150 void requestMappingIsSpecified () {
5251 var requestMappingAnnotation = NoteRestController .class .getAnnotation (RequestMapping .class );
5352 var urlMapping = extractUrlMapping (requestMappingAnnotation );
5453
5554 assertThat (urlMapping ).isEqualTo ("/api/notes" );
5655 }
5756
58- @ Order (3 )
5957 @ Test
58+ @ Order (3 )
59+ @ DisplayName ("Method that get notes is marked with @GetMapping" )
6060 void getMappingIsImplemented () {
6161 var foundMethodWithGetMapping = Arrays .stream (NoteRestController .class .getDeclaredMethods ())
6262 .anyMatch (
@@ -67,8 +67,9 @@ void getMappingIsImplemented() {
6767 assertTrue (foundMethodWithGetMapping );
6868 }
6969
70- @ Order (4 )
7170 @ Test
71+ @ Order (4 )
72+ @ DisplayName ("Get method has no parameters" )
7273 void getNotesMethodHasNoParameters () {
7374 var getNotesMethod = Arrays .stream (NoteRestController .class .getDeclaredMethods ())
7475 .filter (
@@ -81,9 +82,10 @@ void getNotesMethodHasNoParameters() {
8182 assertThat (getNotesMethod .getParameterCount ()).isZero ();
8283 }
8384
84- @ Order (5 )
8585 @ Test
86+ @ Order (5 )
8687 @ SneakyThrows
88+ @ DisplayName ("Get method returns stored notes as List<Note>" )
8789 void getNotesMethodReturnsNoteList () {
8890 var controller = new NoteRestController (notes );
8991 var noteList = givenNoteList ();
@@ -100,8 +102,9 @@ void getNotesMethodReturnsNoteList() {
100102 assertThat (response ).isEqualTo (noteList );
101103 }
102104
103- @ Order (6 )
104105 @ Test
106+ @ Order (6 )
107+ @ DisplayName ("GET endpoint is completed ✅" )
105108 void getNotes () throws Exception {
106109 List <Note > noteList = List .of (
107110 new Note ("Test" , "Hello, World!" ),
@@ -124,8 +127,9 @@ void getNotes() throws Exception {
124127 "]" ));
125128 }
126129
127- @ Order (7 )
128130 @ Test
131+ @ Order (7 )
132+ @ DisplayName ("Method that adds a note is marked with @PostMapping" )
129133 void postMappingIsImplemented () {
130134 var foundMethodWithGetMapping = Arrays .stream (NoteRestController .class .getDeclaredMethods ())
131135 .anyMatch (
@@ -136,8 +140,9 @@ void postMappingIsImplemented() {
136140 assertTrue (foundMethodWithGetMapping );
137141 }
138142
139- @ Order (8 )
140143 @ Test
144+ @ Order (8 )
145+ @ DisplayName ("Add method accepts Note as a parameter" )
141146 void addNoteMethodAcceptsNewNoteAsParameter () {
142147 var addNoteMethod = Arrays .stream (NoteRestController .class .getDeclaredMethods ())
143148 .filter (
@@ -152,8 +157,9 @@ void addNoteMethodAcceptsNewNoteAsParameter() {
152157
153158 }
154159
155- @ Order (9 )
156160 @ Test
161+ @ Order (9 )
162+ @ DisplayName ("Add method parameter note is marked with @RequestBody" )
157163 void addNoteMethodParameterIsMarkedAsRequestBody () {
158164 var addNoteMethod = Arrays .stream (NoteRestController .class .getDeclaredMethods ())
159165 .filter (
@@ -169,9 +175,10 @@ void addNoteMethodParameterIsMarkedAsRequestBody() {
169175 assertNotNull (requestBodyAnnotation );
170176 }
171177
172- @ Order (10 )
173178 @ Test
179+ @ Order (10 )
174180 @ SneakyThrows
181+ @ DisplayName ("Add method returns void" )
175182 void addNoteMethodReturnsVoid () {
176183 var addNoteMethod = Arrays .stream (NoteRestController .class .getDeclaredMethods ())
177184 .filter (
@@ -187,9 +194,10 @@ void addNoteMethodReturnsVoid() {
187194 assertThat (returnType ).isEqualTo (Void .TYPE );
188195 }
189196
190- @ Order (11 )
191197 @ Test
198+ @ Order (11 )
192199 @ SneakyThrows
200+ @ DisplayName ("Add method uses storage to add a new note" )
193201 void addNotePassPostedNote () {
194202 var note = new Note ("Test" , "Hello, World!" );
195203 var controller = new NoteRestController (notes );
@@ -207,8 +215,20 @@ void addNotePassPostedNote() {
207215 verify (notes ).add (note );
208216 }
209217
218+ @ Test
210219 @ Order (12 )
220+ @ DisplayName ("POST endpoint responds with error when fields are empty" )
221+ void addNoteRespondWithClientErrorWhenFieldsAreEmpty () throws Exception {
222+ mockMvc .perform (post ("/api/notes" )
223+ .contentType (MediaType .APPLICATION_JSON )
224+ .content (asJsonString (new Note ()))
225+ )
226+ .andExpect (status ().is4xxClientError ());
227+ }
228+
211229 @ Test
230+ @ Order (13 )
231+ @ DisplayName ("POST endpoint is completed ✅" )
212232 void addNote () throws Exception {
213233 Note note = new Note ("Test" , "Hello, World!" );
214234
@@ -221,16 +241,6 @@ void addNote() throws Exception {
221241 verify (notes ).add (note );
222242 }
223243
224- @ Order (13 )
225- @ Test
226- void addNoteRespondWithClientErrorWhenFieldsAreEmpty () throws Exception {
227- mockMvc .perform (post ("/api/notes" )
228- .contentType (MediaType .APPLICATION_JSON )
229- .content (asJsonString (new Note ()))
230- )
231- .andExpect (status ().is4xxClientError ());
232- }
233-
234244 @ SneakyThrows
235245 private String asJsonString (Object object ) {
236246 return new ObjectMapper ().writeValueAsString (object );
0 commit comments