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 f5ceaf33f2e4269e53716884151d63c5957e9b21..950c7a9952dce1b412cd44b19e4683ff14690088 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 @@ -1,30 +1,27 @@ package org.fuseri.moduleexercise.exercise; +import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import jakarta.persistence.EntityNotFoundException; +import org.fuseri.model.dto.common.Result; import org.fuseri.model.dto.exercise.ExerciseCreateDto; import org.fuseri.model.dto.exercise.ExerciseDto; 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.autoconfigure.web.servlet.WebMvcTest; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.equalTo; -//import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.patch; -//import static org.assertj.core.api.ClassBasedNavigableIterableAssert.assertThat; +import java.util.Map; + import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; - @SpringBootTest @AutoConfigureMockMvc public class ExerciseTest { @@ -42,47 +39,83 @@ public class ExerciseTest { } - @Test void getExercise() { - var postExercise = new ExerciseCreateDto("idioms","exercise on basic idioms",2,"0"); + var postExercise = new ExerciseCreateDto("idioms", "exercise on basic idioms", 2, "0"); String id = ""; try { - var dis = mockMvc.perform(post("/exercises") + var dis = mockMvc.perform(post("/exercises") .content(asJsonString(postExercise)) .contentType(MediaType.APPLICATION_JSON)); - var ok = dis.andReturn().getResponse().getContentAsString(); + var ok = dis.andReturn().getResponse().getContentAsString(); - var ll = objectMapper.readValue(ok,ExerciseDto.class); + var ll = objectMapper.readValue(ok, ExerciseDto.class); id = ll.getId(); - } - catch (Exception e) { - assert(false); + } catch (Exception e) { + assert (false); } -// no underlying database try { - var theId = String.format("/exercises/%s",id); + var theId = String.format("/exercises/%s", id); var smth = mockMvc.perform(get(theId)); } catch (Exception e) { -// throw new RuntimeException(e); + //do absolutely nothing } + } + + @Test + void getFiltered() { + var postExercise = new ExerciseCreateDto("idioms", "exercise on basic idioms", 0, "0"); + var postExercise1 = new ExerciseCreateDto("idioms1", "exercise on basic idioms", 0, "0"); + var postExercise2 = new ExerciseCreateDto("idioms2", "exercise on basic idioms", 1, "0"); + + try { + var exercise1 = mockMvc.perform(post("/exercises") + .content(asJsonString(postExercise)) + .contentType(MediaType.APPLICATION_JSON)); + + var exercise2 = mockMvc.perform(post("/exercises") + .content(asJsonString(postExercise1)) + .contentType(MediaType.APPLICATION_JSON)); + var exercise3 = mockMvc.perform(post("/exercises") + .content(asJsonString(postExercise2)) + .contentType(MediaType.APPLICATION_JSON)); + } catch (Exception e) { +//do absolutly nothing + } + + + Map<String, String> params; +// params.put("page","0") + + try { + var filtered = mockMvc.perform(get("/exercises/filter") + .param("page", "0") + .param("courseId", "0") + .param("difficulty", "0")); + + var content = filtered.andReturn().getResponse().getContentAsString(); + + var res = objectMapper.readValue(content, new TypeReference<Result<ExerciseDto>>() { + }); + + assert (res.getTotal() == 2); + } catch (Exception e) { + assert (false); + } } @Test void testCreateExercise() throws Exception { var expectedResponse = new ExerciseDto(); - - - - var postExercise = new ExerciseCreateDto("idioms","exercise on basic idioms",2,"0"); + var postExercise = new ExerciseCreateDto("idioms", "exercise on basic idioms", 2, "0"); mockMvc.perform(post("/exercises") .content(asJsonString(postExercise)) @@ -95,4 +128,58 @@ public class ExerciseTest { .andReturn().getResponse().getContentAsString(); } + @Test + void TestUpdate() { + var postExercise = new ExerciseCreateDto("idioms", "exercise on basic idioms", 2, "0"); + + String id = ""; + + 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("idioms"); + expectedExercise.setDescription("exercise on basic idioms"); + + var content = """ + { + "name": "idioms", + "description": "exercise on basic idioms", + "difficulty": 2, + "courseId": "idioms" + } + """; + + + try { + var theId = String.format("/exercises/%s", id); + var dis = mockMvc.perform(put(theId).content(content).contentType(MediaType.APPLICATION_JSON)); + + var str = dis.andReturn().getResponse().getContentAsString(); + + var res = objectMapper.readValue(str, ExerciseDto.class); + + var eq = res.equals(expectedExercise); + + assert res.equals(expectedExercise); + + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + }