- package com.fosspowered.peist.controller;
- import static org.assertj.core.api.Assertions.assertThat;
- import static org.mockito.BDDMockito.given;
- import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
- import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
- import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
- import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import com.fosspowered.peist.model.exceptions.PeistInvalidRequestException;
- import com.fosspowered.peist.model.json.PasteRequest;
- import com.fosspowered.peist.model.json.PasteResponse;
- import com.fosspowered.peist.service.CRUDService;
- import java.util.List;
- import java.util.stream.Collectors;
- import java.util.stream.IntStream;
- import org.junit.jupiter.api.Test;
- import org.junit.jupiter.api.extension.ExtendWith;
- import org.mockito.Mockito;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
- import org.springframework.boot.test.mock.mockito.MockBean;
- import org.springframework.http.MediaType;
- import org.springframework.test.context.junit.jupiter.SpringExtension;
- import org.springframework.test.web.servlet.MockMvc;
- import org.springframework.test.web.servlet.MvcResult;
- @ExtendWith(SpringExtension.class)
- @WebMvcTest(PasteController.class)
- class PasteControllerTest {
- @Autowired private MockMvc mvc;
- @Autowired private ObjectMapper objectMapper;
- @MockBean private CRUDService CRUDService;
- @Test
- void whenPing_Normal_ReturnPong() throws Exception {
- mvc.perform(get("/paste/ping")).andExpect(content().string("pong"));
- }
- @Test
- void whenAddPaste_ValidRequest_PersistAndReturnPaste() throws Exception {
- given(CRUDService.addPaste(Mockito.any(PasteRequest.class)))
- .willReturn(PasteResponse.builder().title("title").build());
- MvcResult mvcResult =
- mvc.perform(
- post("/paste")
- .contentType(MediaType.APPLICATION_JSON)
- .content(objectMapper.writeValueAsString(PasteRequest.builder().build())))
- .andExpect(status().isCreated())
- .andReturn();
- PasteResponse pasteResponse =
- objectMapper.readValue(mvcResult.getResponse().getContentAsString(), PasteResponse.class);
- assertThat(pasteResponse).isNotNull();
- assertThat(pasteResponse.getTitle()).isEqualTo("title");
- }
- @Test
- void whenGetPaste_PasteExists_ReturnsPaste() throws Exception {
- given(CRUDService.fetchPaste(Mockito.eq("id")))
- .willReturn(PasteResponse.builder().title("title").build());
- MvcResult mvcResult = mvc.perform(get("/paste/id")).andExpect(status().isOk()).andReturn();
- PasteResponse pasteResponse =
- objectMapper.readValue(mvcResult.getResponse().getContentAsString(), PasteResponse.class);
- assertThat(pasteResponse).isNotNull();
- assertThat(pasteResponse.getTitle()).isEqualTo("title");
- }
- @Test
- void whenGetPaste_NoPasteExists_Show404() throws Exception {
- given(CRUDService.fetchPaste(Mockito.eq("id"))).willThrow(PeistInvalidRequestException.class);
- mvc.perform(get("/paste/id")).andExpect(status().isNotFound());
- }
- @Test
- void whenGetAllPaste_Normal_ReturnsAll() throws Exception {
- given(CRUDService.fetchRecentPastes())
- .willReturn(
- IntStream.of(1, 2, 3)
- .mapToObj(i -> PasteResponse.builder().build())
- .collect(Collectors.toList()));
- MvcResult mvcResult = mvc.perform(get("/paste")).andExpect(status().isOk()).andReturn();
- @SuppressWarnings("unchecked")
- List<PasteResponse> response =
- objectMapper.readValue(mvcResult.getResponse().getContentAsString(), List.class);
- assertThat(response).hasSize(3);
- }
- }