From 01e399a55d077c12c48581337e32740af1c6714a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Gargalovi=C4=8D?= <xgargal@fi.muni.cz> Date: Sun, 16 Apr 2023 23:06:25 +0200 Subject: [PATCH] modified ExerciseTest --- .../moduleexercise/exercise/ExerciseTest.java | 178 ++++++++---------- 1 file changed, 79 insertions(+), 99 deletions(-) diff --git a/application/module-exercise/src/test/java/org/fuseri/moduleexercise/exercise/ExerciseTest.java b/application/module-exercise/src/test/java/org/fuseri/moduleexercise/exercise/ExerciseTest.java index 30a025a3..3fc47c68 100644 --- a/application/module-exercise/src/test/java/org/fuseri/moduleexercise/exercise/ExerciseTest.java +++ b/application/module-exercise/src/test/java/org/fuseri/moduleexercise/exercise/ExerciseTest.java @@ -2,7 +2,8 @@ package org.fuseri.moduleexercise.exercise; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import org.fuseri.model.dto.common.Result; +//import org.fuseri.model.dto.common.Result; +import jakarta.persistence.EntityNotFoundException; import org.fuseri.model.dto.exercise.ExerciseCreateDto; import org.fuseri.model.dto.exercise.ExerciseDto; import org.junit.jupiter.api.AfterEach; @@ -11,9 +12,18 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.data.domain.PageImpl; import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; import org.springframework.test.web.servlet.MockMvc; + +import java.util.ArrayList; +import java.util.List; + import static org.hamcrest.Matchers.is; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.when; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; @@ -30,6 +40,10 @@ public class ExerciseTest { @Autowired private MockMvc mockMvc; + + @MockBean + ExerciseFacade facade; + public static String asJsonString(final Object obj) { try { return new ObjectMapper().writeValueAsString(obj); @@ -38,20 +52,42 @@ public class ExerciseTest { } } - private ExerciseCreateDto exercise1; - private ExerciseCreateDto exercise2; - private ExerciseCreateDto exercise3; +// private ExerciseCreateDto exercise; + private ExerciseDto exerciseDto; + private ExerciseDto exerciseDto1; + private ExerciseDto exerciseDto2; + private ExerciseCreateDto exerciseCreateDto; + private ExerciseCreateDto exerciseCreateDto1; + private ExerciseCreateDto exerciseCreateDto2; @BeforeEach void init() { - exercise1 = new ExerciseCreateDto("idioms", "exercise on basic idioms", 2, 0); - exercise2 = new ExerciseCreateDto("idioms1", "exercise on intermediate idioms", 2, 0); - exercise3 = new ExerciseCreateDto("idioms2", "exercise on basic idioms", 1, 0L); + exerciseDto = new ExerciseDto(); + exerciseDto.setName("idioms"); + exerciseDto.setDescription("exercise on basic idioms"); + exerciseDto.setDifficulty(2); + exerciseDto.setCourseId(0); + + exerciseDto1 = new ExerciseDto(); + exerciseDto1.setName("idioms1"); + exerciseDto1.setDescription("exercise on basic idioms"); + exerciseDto1.setDifficulty(2); + exerciseDto1.setCourseId(0); + + exerciseDto2 = new ExerciseDto(); + exerciseDto2.setName("idioms2"); + exerciseDto2.setDescription("exercise on basic idioms"); + exerciseDto2.setDifficulty(1); + exerciseDto2.setCourseId(0); + + exerciseCreateDto = new ExerciseCreateDto("idioms", "exercise on basic idioms", 2, 0); + exerciseCreateDto1 = new ExerciseCreateDto("idioms1", "exercise on intermediate idioms", 2, 0); + exerciseCreateDto2 = new ExerciseCreateDto("idioms2", "exercise on basic idioms", 1, 0L); try { - mockMvc.perform(post("/exercises").content(asJsonString(exercise1)).contentType(MediaType.APPLICATION_JSON)); - mockMvc.perform(post("/exercises").content(asJsonString(exercise2)).contentType(MediaType.APPLICATION_JSON)); - mockMvc.perform(post("/exercises").content(asJsonString(exercise3)).contentType(MediaType.APPLICATION_JSON)); + mockMvc.perform(post("/exercises").content(asJsonString(exerciseCreateDto)).contentType(MediaType.APPLICATION_JSON)); + mockMvc.perform(post("/exercises").content(asJsonString(exerciseCreateDto1)).contentType(MediaType.APPLICATION_JSON)); + mockMvc.perform(post("/exercises").content(asJsonString(exerciseCreateDto2)).contentType(MediaType.APPLICATION_JSON)); } catch (Exception e) { assert (false); } @@ -72,14 +108,15 @@ public class ExerciseTest { @Test void getExercise() { long id = 1L; + when(facade.find(id)).thenReturn(exerciseDto); try { var theId = String.format("/exercises/%s", id); var smth = mockMvc.perform(get(theId)); smth.andExpect(status().isOk()) - .andExpect(jsonPath("$.name", is(exercise1.getName()))) - .andExpect(jsonPath("$.description", is(exercise1.getDescription()))) - .andExpect(jsonPath("$.courseId", is((int) exercise1.getCourseId()))) - .andExpect(jsonPath("$.difficulty", is(exercise1.getDifficulty()))); + .andExpect(jsonPath("$.name", is(exerciseCreateDto.getName()))) + .andExpect(jsonPath("$.description", is(exerciseCreateDto.getDescription()))) + .andExpect(jsonPath("$.courseId", is((int) exerciseCreateDto.getCourseId()))) + .andExpect(jsonPath("$.difficulty", is(exerciseCreateDto.getDifficulty()))); } catch (Exception e) { //do absolutely nothing } @@ -88,6 +125,7 @@ public class ExerciseTest { @Test void deleteExercise() { long id = 1L; +// when(facade.delete(id)); try { var theId = String.format("/exercises/%s", id); var smth = mockMvc.perform(delete(theId)); @@ -113,6 +151,7 @@ public class ExerciseTest { @Test void getExercise_notFound() { long id = 999999L; + when(facade.find(id)).thenThrow(new EntityNotFoundException("")); try { var theId = String.format("/exercises/%s", id); var smth = mockMvc.perform(get(theId)); @@ -125,24 +164,14 @@ public class ExerciseTest { @Test void FindAll() { + + when(facade.findAll(0)).thenReturn(new PageImpl<>(new ArrayList<>())); try { - var dis = mockMvc.perform(get("/exercises").param("page", "0")); - - dis.andExpect(status().isOk()) - .andExpect(jsonPath("$.total", is(3))) - .andExpect(jsonPath("$.items[0].name", is(exercise1.getName()))) - .andExpect(jsonPath("$.items[0].description", is(exercise1.getDescription()))) - .andExpect(jsonPath("$.items[0].difficulty", is(exercise1.getDifficulty()))) - .andExpect(jsonPath("$.items[0].courseId", is((int) exercise1.getCourseId()))) - .andExpect(jsonPath("$.items[1].name", is(exercise2.getName()))) - .andExpect(jsonPath("$.items[1].description", is(exercise2.getDescription()))) - .andExpect(jsonPath("$.items[1].difficulty", is(exercise2.getDifficulty()))) - .andExpect(jsonPath("$.items[1].courseId", is((int) exercise2.getCourseId()))) - .andExpect(jsonPath("$.items[2].name", is(exercise3.getName()))) - .andExpect(jsonPath("$.items[2].description", is(exercise3.getDescription()))) - .andExpect(jsonPath("$.items[2].difficulty", is(exercise3.getDifficulty()))) - .andExpect(jsonPath("$.items[2].courseId", is((int) exercise3.getCourseId()))); + var response = mockMvc.perform(get("/exercises").param("page", "0")); + var dis = response.andExpect(status().isOk()) + .andExpect(status().is2xxSuccessful()).andReturn().getResponse().getContentAsString(); + assertTrue(dis.contains("\"content\":[]")); } catch (Exception e) { throw new RuntimeException(e); } @@ -152,40 +181,21 @@ public class ExerciseTest { @Test void getFiltered() { - + when(facade.findByCourseIdAndDifficulty(0,2,0)).thenReturn(new PageImpl<>(new ArrayList<>())); try { var filtered = mockMvc.perform(get("/exercises/filter").param("page", "0").param("courseId", "0").param("difficulty", "2")); var content = filtered.andReturn().getResponse().getContentAsString(); - var res = objectMapper.readValue(content, new TypeReference<Result<ExerciseDto>>() { - }); - assert (res.getTotal() == 2); + assertTrue(content.contains("\"content\":[]")); } catch (Exception e) { assert (false); } } -// @Test -// void getByExercise() throws Exception { -// var theId = String.format("/questions/exercise/%s", 9); -// -// var smth = mockMvc.perform(get(theId).param("page", "0")); -// -// var content = smth.andReturn().getResponse().getContentAsString(); -// -// var res = objectMapper.readValue(content, new TypeReference<Result<QuestionDto>>() { -// }); -// -// -// -//// assert (res.getItems().get(0).equals(question)); -// } - @Test void testCreateExercise() throws Exception { - var postExercise = new ExerciseCreateDto("idioms", "exercise on basic idioms", 2, 0L); - - mockMvc.perform(post("/exercises").content(asJsonString(postExercise)).contentType(MediaType.APPLICATION_JSON)) + when(facade.create(exerciseCreateDto)).thenReturn(exerciseDto); + mockMvc.perform(post("/exercises").content(asJsonString(exerciseCreateDto)).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isCreated()) .andExpect(jsonPath("$.name").value("idioms")) .andExpect(jsonPath("$.description").value("exercise on basic idioms")) @@ -196,7 +206,6 @@ public class ExerciseTest { @Test void testCreateExerciseEmptyBody() throws Exception { var postExercise = ""; - mockMvc.perform(post("/exercises").content((postExercise)).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().is4xxClientError()).andReturn().getResponse().getContentAsString(); } @@ -261,47 +270,24 @@ public class ExerciseTest { @Test void testUpdate() { - var postExercise = new ExerciseCreateDto("idioms", "exercise on basic idioms", 2, 0L); - long id = 1L; - - try { - var dis = mockMvc.perform(post("/exercises").content(asJsonString(postExercise)).contentType(MediaType.APPLICATION_JSON)); - var ok = dis.andReturn().getResponse().getContentAsString(); - - var ll = objectMapper.readValue(ok, ExerciseDto.class); - - id = ll.getId(); - } catch (Exception e) { - assert (false); - } - - var expectedExercise = new ExerciseDto(); - expectedExercise.setId(id); - expectedExercise.setName("idioms"); - expectedExercise.setDifficulty(2); - expectedExercise.setCourseId(0L); - expectedExercise.setDescription("exercise on basic idioms"); - - var content = """ - { - "name": "idioms", - "description": "exercise on basic idioms", - "difficulty": 2, - "courseId": 0 - } - """; - + when(facade.update(id,exerciseCreateDto)).thenReturn(exerciseDto); try { var theId = String.format("/exercises/%d", id); - var dis = mockMvc.perform(put(theId).content(content).contentType(MediaType.APPLICATION_JSON)); + var dis = mockMvc.perform(put(theId).content(asJsonString(exerciseCreateDto)).contentType(MediaType.APPLICATION_JSON)); - var str = dis.andReturn().getResponse().getContentAsString(); - var res = objectMapper.readValue(str, ExerciseDto.class); - - assert res.equals(expectedExercise); + dis.andExpect(status().isOk()).andExpect(jsonPath("$.name",is(exerciseDto.getName()))) + .andExpect(jsonPath("$.difficulty",is(exerciseDto.getDifficulty()))) + .andExpect(jsonPath("$.description",is(exerciseDto.getDescription()))) + .andExpect(jsonPath("$.courseId",is(exerciseDto.getCourseId()))); +// +// var str = dis.andReturn().getResponse().getContentAsString(); +// +// var res = objectMapper.readValue(str, ExerciseDto.class); +// +// assert res.equals(exerciseDto); } catch (Exception e) { throw new RuntimeException(e); @@ -311,18 +297,12 @@ public class ExerciseTest { @Test void testUpdateNotFound() { - long id = 999999L; - var content = """ - { - "name": "idioms", - "description": "exercise on basic idioms", - "difficulty": 2, - "courseId": 0 - } - """; + long id = 9999L; + when(facade.update(id,exerciseCreateDto)).thenThrow(new EntityNotFoundException()); + try { var theId = String.format("/exercises/%d", id); - mockMvc.perform(put(theId).content(content).contentType(MediaType.APPLICATION_JSON)) + mockMvc.perform(put(theId).content(asJsonString(exerciseCreateDto)).contentType(MediaType.APPLICATION_JSON)) .andExpect(status().isNotFound()); } catch (Exception e) { -- GitLab