Divide QuizController separately
This commit is contained in:
@@ -73,14 +73,14 @@ public class MailController {
|
||||
memberRepository.save(member1);
|
||||
// userRepository.save(user2);
|
||||
|
||||
System.out.println("http://localhost:8080/quiz/editView/" + quizRepository.save(quiz(QuizCategory.JAVA, Collections.singletonList(QuizLevel.JUNIOR), "Junit4 vs Junit5 차이는 무엇인가?")).getResourceId());
|
||||
System.out.println("http://localhost:8080/quiz/editView/" + quizRepository.save(quiz(QuizCategory.JAVA, Collections.singletonList(QuizLevel.JUNIOR), "Junit4 vs Junit5 차이는 무엇인가?")).getResourceId());
|
||||
System.out.println("http://localhost:8080/quiz/editView/" + quizRepository.save(quiz(QuizCategory.JAVA, Collections.singletonList(QuizLevel.JUNIOR), "Junit4 vs Junit5 차이는 무엇인가?")).getResourceId());
|
||||
System.out.println("http://localhost:8080/quiz/editView/" + quizRepository.save(quiz(QuizCategory.JAVA, Collections.singletonList(QuizLevel.JUNIOR), "Junit4 vs Junit5 차이는 무엇인가?")).getResourceId());
|
||||
System.out.println("http://localhost:8080/quiz/editView/" + quizRepository.save(quiz(QuizCategory.JAVA, Collections.singletonList(QuizLevel.JUNIOR), "Junit4 vs Junit5 차이는 무엇인가?")).getResourceId());
|
||||
System.out.println("http://localhost:8080/quiz/editView/" + quizRepository.save(quiz(QuizCategory.PROGRAMMING, Arrays.asList(QuizLevel.JUNIOR, QuizLevel.SENIOR), "DDD의 Layered Architecture에서 Presentation, Application, Domain, InfraStructure layer의 역할에 대해 설명해 주세요.")).getResourceId());
|
||||
System.out.println("http://localhost:8080/quiz/editView/" + quizRepository.save(quiz(QuizCategory.SPRING, Collections.singletonList(QuizLevel.JUNIOR), "Spring Framework에서 사용되는 대표적인 디자인 패턴과 적용된 곳을 설명해주세요.")).getResourceId());
|
||||
System.out.println("http://localhost:8080/quiz/editView/" + quizRepository.save(quiz(QuizCategory.DATABASE, Arrays.asList(QuizLevel.JUNIOR, QuizLevel.SENIOR), "MSA의 장점과 단점에 대해 설명해주세요")).getResourceId());
|
||||
System.out.println("http://localhost:8080/quizzes/editView/" + quizRepository.save(quiz(QuizCategory.JAVA, Collections.singletonList(QuizLevel.JUNIOR), "Junit4 vs Junit5 차이는 무엇인가?")).getResourceId());
|
||||
System.out.println("http://localhost:8080/quizzes/editView/" + quizRepository.save(quiz(QuizCategory.JAVA, Collections.singletonList(QuizLevel.JUNIOR), "Junit4 vs Junit5 차이는 무엇인가?")).getResourceId());
|
||||
System.out.println("http://localhost:8080/quizzes/editView/" + quizRepository.save(quiz(QuizCategory.JAVA, Collections.singletonList(QuizLevel.JUNIOR), "Junit4 vs Junit5 차이는 무엇인가?")).getResourceId());
|
||||
System.out.println("http://localhost:8080/quizzes/editView/" + quizRepository.save(quiz(QuizCategory.JAVA, Collections.singletonList(QuizLevel.JUNIOR), "Junit4 vs Junit5 차이는 무엇인가?")).getResourceId());
|
||||
System.out.println("http://localhost:8080/quizzes/editView/" + quizRepository.save(quiz(QuizCategory.JAVA, Collections.singletonList(QuizLevel.JUNIOR), "Junit4 vs Junit5 차이는 무엇인가?")).getResourceId());
|
||||
System.out.println("http://localhost:8080/quizzes/editView/" + quizRepository.save(quiz(QuizCategory.PROGRAMMING, Arrays.asList(QuizLevel.JUNIOR, QuizLevel.SENIOR), "DDD의 Layered Architecture에서 Presentation, Application, Domain, InfraStructure layer의 역할에 대해 설명해 주세요.")).getResourceId());
|
||||
System.out.println("http://localhost:8080/quizzes/editView/" + quizRepository.save(quiz(QuizCategory.SPRING, Collections.singletonList(QuizLevel.JUNIOR), "Spring Framework에서 사용되는 대표적인 디자인 패턴과 적용된 곳을 설명해주세요.")).getResourceId());
|
||||
System.out.println("http://localhost:8080/quizzes/editView/" + quizRepository.save(quiz(QuizCategory.DATABASE, Arrays.asList(QuizLevel.JUNIOR, QuizLevel.SENIOR), "MSA의 장점과 단점에 대해 설명해주세요")).getResourceId());
|
||||
// quizRepository.save(quiz(QuizCategory.JAVA, Collections.singletonList(QuizLevel.JUNIOR), "당신은 ㅜ구인가"));
|
||||
// quizRepository.save(quiz(QuizCategory.DATABASE, Arrays.asList(QuizLevel.JUNIOR, QuizLevel.SENIOR), "퇴근합시다"));
|
||||
}
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.mangkyu.employment.interview.app.quiz.controller;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.mangkyu.employment.interview.app.quiz.dto.AddQuizRequest;
|
||||
import com.mangkyu.employment.interview.app.quiz.dto.AddQuizRequestHolder;
|
||||
import com.mangkyu.employment.interview.app.quiz.service.QuizService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.util.ResourceUtils;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
class AddQuizController {
|
||||
|
||||
private final QuizService quizService;
|
||||
private final ObjectMapper objectMapper;
|
||||
|
||||
@GetMapping("/quizzes/init")
|
||||
public ResponseEntity<Void> initQuizListByFile() throws IOException {
|
||||
final File file = ResourceUtils.getFile("classpath:quiz/quiz.json");
|
||||
final AddQuizRequestHolder addQuizRequestHolder = objectMapper.readValue(file, AddQuizRequestHolder.class);
|
||||
|
||||
addQuizRequestHolder.getQuizList().forEach(quizService::addQuiz);
|
||||
|
||||
return ResponseEntity.noContent()
|
||||
.build();
|
||||
}
|
||||
|
||||
@PostMapping("/quizzes")
|
||||
public ResponseEntity<Void> addQuiz(@RequestBody @Valid final AddQuizRequest addQuizRequest) {
|
||||
quizService.addQuiz(addQuizRequest);
|
||||
return ResponseEntity.status(HttpStatus.CREATED)
|
||||
.build();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package com.mangkyu.employment.interview.app.quiz.controller;
|
||||
|
||||
import com.mangkyu.employment.interview.app.quiz.dto.QuizCategoryResponseHolder;
|
||||
import com.mangkyu.employment.interview.app.quiz.service.QuizService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
class GetQuizCategoryController {
|
||||
|
||||
private final QuizService quizService;
|
||||
|
||||
@GetMapping("/quizzes/categories")
|
||||
public ResponseEntity<QuizCategoryResponseHolder> getQuizCategoryList() {
|
||||
final QuizCategoryResponseHolder response = QuizCategoryResponseHolder.builder()
|
||||
.categoryList(quizService.getQuizCategoryList())
|
||||
.build();
|
||||
return ResponseEntity.ok(response);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
package com.mangkyu.employment.interview.app.quiz.controller;
|
||||
|
||||
import com.mangkyu.employment.interview.app.quiz.dto.GetQuizRequest;
|
||||
import com.mangkyu.employment.interview.app.quiz.dto.GetQuizResponse;
|
||||
import com.mangkyu.employment.interview.app.quiz.dto.GetQuizResponseHolder;
|
||||
import com.mangkyu.employment.interview.app.quiz.dto.SearchQuizListRequest;
|
||||
import com.mangkyu.employment.interview.app.quiz.service.QuizService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.validation.Valid;
|
||||
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
class GetQuizController {
|
||||
|
||||
private final QuizService quizService;
|
||||
|
||||
@GetMapping("/quizzes/{resourceId}")
|
||||
public ResponseEntity<GetQuizResponse> getQuiz(@PathVariable final String resourceId) {
|
||||
return ResponseEntity.ok(quizService.getQuiz(resourceId));
|
||||
}
|
||||
|
||||
@GetMapping("/quizzes")
|
||||
public ResponseEntity<GetQuizResponseHolder> getQuizList(@Valid final GetQuizRequest getQuizRequest) {
|
||||
final GetQuizResponseHolder response = quizService.getQuizList(getQuizRequest);
|
||||
return ResponseEntity.ok(response);
|
||||
}
|
||||
|
||||
@GetMapping("/quizzes/search")
|
||||
public ResponseEntity<GetQuizResponseHolder> searchQuizList(@Valid final SearchQuizListRequest request) {
|
||||
final GetQuizResponseHolder response = quizService.searchQuizList(request);
|
||||
return ResponseEntity.ok(response);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,67 +0,0 @@
|
||||
package com.mangkyu.employment.interview.app.quiz.controller;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.mangkyu.employment.interview.erros.exception.RestApiException;
|
||||
import com.mangkyu.employment.interview.app.quiz.dto.*;
|
||||
import com.mangkyu.employment.interview.app.quiz.service.QuizService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.util.ResourceUtils;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
public class QuizController {
|
||||
|
||||
private final QuizService quizService;
|
||||
|
||||
@GetMapping("/quiz/init")
|
||||
public ResponseEntity<Void> initQuizListByFile() throws IOException {
|
||||
final File file = ResourceUtils.getFile("classpath:quiz/quiz.json");
|
||||
final ObjectMapper objectMapper = new ObjectMapper();
|
||||
final AddQuizRequestHolder addQuizRequestHolder = objectMapper.readValue(file, AddQuizRequestHolder.class);
|
||||
|
||||
addQuizRequestHolder.getQuizList().forEach(quizService::addQuiz);
|
||||
|
||||
return ResponseEntity.noContent()
|
||||
.build();
|
||||
}
|
||||
|
||||
@PostMapping("/quiz")
|
||||
public ResponseEntity<Void> addQuiz(@RequestBody @Valid final AddQuizRequest addQuizRequest) {
|
||||
quizService.addQuiz(addQuizRequest);
|
||||
return ResponseEntity.status(HttpStatus.CREATED)
|
||||
.build();
|
||||
}
|
||||
|
||||
@GetMapping("/quiz/{resourceId}")
|
||||
public ResponseEntity<GetQuizResponse> getQuiz(@PathVariable final String resourceId) throws RestApiException {
|
||||
return ResponseEntity.ok(quizService.getQuiz(resourceId));
|
||||
}
|
||||
|
||||
@GetMapping("/quizzes")
|
||||
public ResponseEntity<GetQuizResponseHolder> getQuizList(@Valid final GetQuizRequest getQuizRequest) {
|
||||
final GetQuizResponseHolder response = quizService.getQuizList(getQuizRequest);
|
||||
return ResponseEntity.ok(response);
|
||||
}
|
||||
|
||||
@GetMapping("/quiz/categories")
|
||||
public ResponseEntity<QuizCategoryResponseHolder> getQuizCategoryList() {
|
||||
final QuizCategoryResponseHolder response = QuizCategoryResponseHolder.builder()
|
||||
.categoryList(quizService.getQuizCategoryList())
|
||||
.build();
|
||||
return ResponseEntity.ok(response);
|
||||
}
|
||||
|
||||
@GetMapping("/quizzes/search")
|
||||
public ResponseEntity<GetQuizResponseHolder> searchQuizList(@Valid final SearchQuizListRequest request) {
|
||||
final GetQuizResponseHolder response = quizService.searchQuizList(request);
|
||||
return ResponseEntity.ok(response);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -20,7 +20,7 @@ public class WebQuizController {
|
||||
private final QuizService quizService;
|
||||
private final GetAnswerService answerService;
|
||||
|
||||
@GetMapping("/quiz/editView/{resourceId}")
|
||||
@GetMapping("/quizzes/editView/{resourceId}")
|
||||
public String addUserPage(@PathVariable final String resourceId, final Model model) {
|
||||
final GetQuizResponse quiz = quizService.getQuiz(resourceId);
|
||||
model.addAttribute("quiz", quiz);
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
package com.mangkyu.employment.interview.app.quiz.controller;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import com.mangkyu.employment.interview.app.quiz.dto.AddQuizRequest;
|
||||
import com.mangkyu.employment.interview.enums.value.QuizCategory;
|
||||
import com.mangkyu.employment.interview.enums.value.QuizLevel;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.test.web.servlet.MockMvc;
|
||||
import org.springframework.test.web.servlet.ResultActions;
|
||||
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
|
||||
@WebMvcTest
|
||||
class AddQuizControllerTest {
|
||||
|
||||
@Autowired
|
||||
private MockMvc mockMvc;
|
||||
|
||||
@Autowired
|
||||
private ObjectMapper objectMapper;
|
||||
|
||||
@Test
|
||||
void addQuiz() throws Exception {
|
||||
// given
|
||||
final AddQuizRequest request = AddQuizRequest.builder()
|
||||
.quizCategory(QuizCategory.JAVA)
|
||||
.title("Title")
|
||||
.quizLevel(Collections.singletonList(QuizLevel.NEW))
|
||||
.build();
|
||||
|
||||
// when
|
||||
final ResultActions result = mockMvc.perform(
|
||||
MockMvcRequestBuilders.post("/quizzes")
|
||||
.content(objectMapper.writeValueAsString(request))
|
||||
.contentType(MediaType.APPLICATION_JSON)
|
||||
);
|
||||
|
||||
// then
|
||||
result.andExpect(status().isCreated());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
package com.mangkyu.employment.interview.app.quiz.controller;
|
||||
|
||||
import com.mangkyu.employment.interview.app.quiz.dto.QuizCategoryResponse;
|
||||
import com.mangkyu.employment.interview.app.quiz.service.QuizService;
|
||||
import com.mangkyu.employment.interview.enums.value.QuizCategory;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
|
||||
import org.springframework.test.web.servlet.MockMvc;
|
||||
import org.springframework.test.web.servlet.ResultActions;
|
||||
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
|
||||
@WebMvcTest
|
||||
class GetQuizCategoryControllerTest {
|
||||
|
||||
@Autowired
|
||||
private MockMvc mockMvc;
|
||||
|
||||
@Autowired
|
||||
private QuizService quizService;
|
||||
|
||||
@Test
|
||||
void getCategory() throws Exception {
|
||||
// given
|
||||
final QuizCategoryResponse quizCategoryResponse = QuizCategoryResponse.builder()
|
||||
.count(15L)
|
||||
.code(QuizCategory.JAVA.name())
|
||||
.title(QuizCategory.JAVA.getTitle())
|
||||
.desc(QuizCategory.JAVA.getDesc())
|
||||
.build();
|
||||
|
||||
doReturn(List.of(quizCategoryResponse))
|
||||
.when(quizService)
|
||||
.getQuizCategoryList();
|
||||
|
||||
// when
|
||||
final ResultActions result = mockMvc.perform(
|
||||
MockMvcRequestBuilders.get("/quizzes/categories")
|
||||
);
|
||||
|
||||
// then
|
||||
result.andExpect(status().isOk());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,8 +1,9 @@
|
||||
package com.mangkyu.employment.interview.app.quiz.controller;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.mangkyu.employment.interview.app.quiz.constants.QuizConstants;
|
||||
import com.mangkyu.employment.interview.app.quiz.dto.*;
|
||||
import com.mangkyu.employment.interview.app.quiz.dto.GetQuizRequest;
|
||||
import com.mangkyu.employment.interview.app.quiz.dto.GetQuizResponse;
|
||||
import com.mangkyu.employment.interview.app.quiz.dto.GetQuizResponseHolder;
|
||||
import com.mangkyu.employment.interview.app.quiz.dto.SearchQuizListRequest;
|
||||
import com.mangkyu.employment.interview.app.quiz.entity.Quiz;
|
||||
import com.mangkyu.employment.interview.app.quiz.service.QuizService;
|
||||
import com.mangkyu.employment.interview.enums.common.EnumMapperType;
|
||||
@@ -18,7 +19,6 @@ import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
|
||||
import org.springframework.data.domain.PageImpl;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.test.web.servlet.MockMvc;
|
||||
import org.springframework.test.web.servlet.ResultActions;
|
||||
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
|
||||
@@ -28,13 +28,13 @@ import java.util.Collections;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static com.mangkyu.employment.interview.app.quiz.constants.QuizConstants.*;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
|
||||
@WebMvcTest
|
||||
class QuizControllerTest {
|
||||
class GetQuizControllerTest {
|
||||
|
||||
@Autowired
|
||||
private MockMvc mockMvc;
|
||||
@@ -42,52 +42,49 @@ class QuizControllerTest {
|
||||
@Autowired
|
||||
private QuizService quizService;
|
||||
|
||||
private static Stream<Arguments> provideParameters() {
|
||||
return Stream.of(
|
||||
Arguments.of(null, 10, 10),
|
||||
Arguments.of(QuizCategory.JAVA, MIN_PAGE_SIZE - 1, MIN_PAGE_NUMBER),
|
||||
Arguments.of(QuizCategory.JAVA, MAX_PAGE_SIZE + 1, MIN_PAGE_NUMBER),
|
||||
Arguments.of(QuizCategory.JAVA, MIN_PAGE_SIZE, MIN_PAGE_NUMBER - 1)
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getQuiz() throws Exception {
|
||||
void getQuiz() throws Exception {
|
||||
// given
|
||||
final String resourceId = UUID.randomUUID().toString();
|
||||
final String url = "/quiz/" + resourceId;
|
||||
final GetQuizResponse quizResponse = GetQuizResponse.builder()
|
||||
.title("quiz")
|
||||
.quizLevelList(Arrays.asList(QuizLevel.JUNIOR.name(), QuizLevel.SENIOR.name()))
|
||||
.category(enumMapperValue(QuizCategory.JAVA).getTitle())
|
||||
.build();
|
||||
doReturn(quizResponse).when(quizService).getQuiz(resourceId);
|
||||
|
||||
doReturn(quizResponse)
|
||||
.when(quizService)
|
||||
.getQuiz(resourceId);
|
||||
|
||||
// when
|
||||
final ResultActions result = mockMvc.perform(
|
||||
MockMvcRequestBuilders.get(url)
|
||||
MockMvcRequestBuilders.get("/quizzes/{resourceId}", resourceId)
|
||||
);
|
||||
|
||||
// then
|
||||
final ResultActions resultActions = result.andExpect(status().isOk());
|
||||
final String stringResponse = resultActions.andReturn().getResponse().getContentAsString();
|
||||
final GetQuizResponse getQuizResult = new Gson().fromJson(stringResponse, GetQuizResponse.class);
|
||||
|
||||
assertThat(getQuizResult.getResourceId()).isEqualTo(quizResponse.getResourceId());
|
||||
assertThat(getQuizResult.getTitle()).isEqualTo(quizResponse.getTitle());
|
||||
assertThat(getQuizResult.getCategory()).isEqualTo(quizResponse.getCategory());
|
||||
assertThat(getQuizResult.getCreatedAt()).isEqualTo(quizResponse.getCreatedAt());
|
||||
result.andExpect(status().isOk());
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@MethodSource("provideParameters")
|
||||
public void getQuizListFail_BadRequest(final QuizCategory quizCategory, final int size, final int page) throws Exception {
|
||||
void getQuizListFail_BadRequest(final QuizCategory quizCategory, final int size, final int page) throws Exception {
|
||||
// given
|
||||
final String url = "/quizzes";
|
||||
final String category = quizCategory == null
|
||||
? null
|
||||
: quizCategory.name();
|
||||
|
||||
final GetQuizResponse quizResponse = GetQuizResponse.builder()
|
||||
.title("quiz")
|
||||
.quizLevelList(Arrays.asList(QuizLevel.JUNIOR.name(), QuizLevel.SENIOR.name()))
|
||||
.category(enumMapperValue(QuizCategory.JAVA).getTitle())
|
||||
.build();
|
||||
|
||||
// when
|
||||
final ResultActions result = mockMvc.perform(
|
||||
MockMvcRequestBuilders.get(url)
|
||||
MockMvcRequestBuilders.get("/quizzes")
|
||||
.param("category", category)
|
||||
.param("size", String.valueOf(size))
|
||||
.param("page", String.valueOf(page))
|
||||
@@ -98,19 +95,15 @@ class QuizControllerTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getQuizList() throws Exception {
|
||||
void getQuizList() throws Exception {
|
||||
// given
|
||||
final int size = QuizConstants.MIN_PAGE_SIZE;
|
||||
final int page = QuizConstants.MIN_PAGE_NUMBER;
|
||||
final String url = "/quizzes";
|
||||
|
||||
final GetQuizResponse quizResponse = GetQuizResponse.builder()
|
||||
.title("quiz")
|
||||
.quizLevelList(Arrays.asList(QuizLevel.JUNIOR.name(), QuizLevel.SENIOR.name()))
|
||||
.category(enumMapperValue(QuizCategory.JAVA).getTitle())
|
||||
.build();
|
||||
|
||||
final Pageable pageable = PageRequest.of(page, size);
|
||||
final Pageable pageable = PageRequest.of(MIN_PAGE_NUMBER, MIN_PAGE_SIZE);
|
||||
final PageImpl<Quiz> quizPage = new PageImpl<>(Collections.emptyList(), pageable, 0);
|
||||
|
||||
final GetQuizResponseHolder getQuizResponseHolder = GetQuizResponseHolder.builder()
|
||||
@@ -121,88 +114,33 @@ class QuizControllerTest {
|
||||
.totalPages(quizPage.getTotalPages())
|
||||
.build();
|
||||
|
||||
doReturn(getQuizResponseHolder).when(quizService).getQuizList(any(GetQuizRequest.class));
|
||||
doReturn(getQuizResponseHolder)
|
||||
.when(quizService)
|
||||
.getQuizList(any(GetQuizRequest.class));
|
||||
|
||||
// when
|
||||
final ResultActions result = mockMvc.perform(
|
||||
MockMvcRequestBuilders.get(url)
|
||||
MockMvcRequestBuilders.get("/quizzes")
|
||||
.param("category", QuizCategory.JAVA.name())
|
||||
.param("size", String.valueOf(size))
|
||||
.param("page", String.valueOf(page))
|
||||
.param("size", String.valueOf(MIN_PAGE_SIZE))
|
||||
.param("page", String.valueOf(MIN_PAGE_NUMBER))
|
||||
);
|
||||
|
||||
// then
|
||||
result.andExpect(status().isOk());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void addQuiz() throws Exception {
|
||||
// given
|
||||
final String url = "/quiz";
|
||||
|
||||
final AddQuizRequest addQuizRequest = AddQuizRequest.builder()
|
||||
.quizCategory(QuizCategory.JAVA)
|
||||
.title("Title")
|
||||
.quizLevel(Collections.singletonList(QuizLevel.NEW))
|
||||
.build();
|
||||
|
||||
// when
|
||||
final ResultActions result = mockMvc.perform(
|
||||
MockMvcRequestBuilders.post(url)
|
||||
.content(new Gson().toJson(addQuizRequest))
|
||||
.contentType(MediaType.APPLICATION_JSON)
|
||||
);
|
||||
|
||||
// then
|
||||
result.andExpect(status().isCreated());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getCategory() throws Exception {
|
||||
// given
|
||||
final String url = "/quiz/categories";
|
||||
final long count = 15L;
|
||||
|
||||
final QuizCategoryResponse quizCategoryResponse = QuizCategoryResponse.builder()
|
||||
.count(count)
|
||||
.code(QuizCategory.JAVA.name())
|
||||
.title(QuizCategory.JAVA.getTitle())
|
||||
.desc(QuizCategory.JAVA.getDesc())
|
||||
.build();
|
||||
|
||||
doReturn(Collections.singletonList(quizCategoryResponse)).when(quizService).getQuizCategoryList();
|
||||
|
||||
// when
|
||||
final ResultActions result = mockMvc.perform(
|
||||
MockMvcRequestBuilders.get(url)
|
||||
);
|
||||
|
||||
// then
|
||||
final ResultActions resultActions = result.andExpect(status().isOk());
|
||||
final String stringResponse = resultActions.andReturn().getResponse().getContentAsString();
|
||||
final QuizCategoryResponseHolder responseHolder = new Gson().fromJson(stringResponse, QuizCategoryResponseHolder.class);
|
||||
assertThat(responseHolder.getCategoryList().size()).isEqualTo(1);
|
||||
assertThat(responseHolder.getCategoryList().get(0).getCount()).isEqualTo(count);
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@MethodSource("provideParameters")
|
||||
public void searchQuizFail_InvalidParameter(final QuizCategory quizCategory, final int size, final int page) throws Exception {
|
||||
void searchQuizFail_InvalidParameter(final QuizCategory quizCategory, final int size, final int page) throws Exception {
|
||||
// given
|
||||
if (quizCategory == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
final String url = "/quizzes/search";
|
||||
final GetQuizResponse quizResponse = GetQuizResponse.builder()
|
||||
.title("quiz")
|
||||
.quizLevelList(Arrays.asList(QuizLevel.JUNIOR.name(), QuizLevel.SENIOR.name()))
|
||||
.category(enumMapperValue(QuizCategory.JAVA).getTitle())
|
||||
.build();
|
||||
|
||||
// when
|
||||
final ResultActions result = mockMvc.perform(
|
||||
MockMvcRequestBuilders.get(url)
|
||||
MockMvcRequestBuilders.get("/quizzes/search")
|
||||
.param("size", String.valueOf(size))
|
||||
.param("page", String.valueOf(page))
|
||||
);
|
||||
@@ -212,19 +150,15 @@ class QuizControllerTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void searchQuizSuccess() throws Exception {
|
||||
void searchQuizSuccess() throws Exception {
|
||||
// given
|
||||
final String url = "/quizzes/search";
|
||||
final int size = QuizConstants.MIN_PAGE_SIZE;
|
||||
final int page = QuizConstants.MIN_PAGE_NUMBER;
|
||||
|
||||
final GetQuizResponse quizResponse = GetQuizResponse.builder()
|
||||
.title("quiz")
|
||||
.quizLevelList(Arrays.asList(QuizLevel.JUNIOR.name(), QuizLevel.SENIOR.name()))
|
||||
.category(enumMapperValue(QuizCategory.JAVA).getTitle())
|
||||
.build();
|
||||
|
||||
final Pageable pageable = PageRequest.of(page, size);
|
||||
final Pageable pageable = PageRequest.of(MIN_PAGE_NUMBER, MIN_PAGE_SIZE);
|
||||
final PageImpl<Quiz> quizPage = new PageImpl<>(Collections.emptyList(), pageable, 0);
|
||||
|
||||
final GetQuizResponseHolder getQuizResponseHolder = GetQuizResponseHolder.builder()
|
||||
@@ -235,28 +169,21 @@ class QuizControllerTest {
|
||||
.totalPages(quizPage.getTotalPages())
|
||||
.build();
|
||||
|
||||
doReturn(getQuizResponseHolder).when(quizService).searchQuizList(any(SearchQuizListRequest.class));
|
||||
doReturn(getQuizResponseHolder)
|
||||
.when(quizService)
|
||||
.searchQuizList(any(SearchQuizListRequest.class));
|
||||
|
||||
// when
|
||||
final ResultActions result = mockMvc.perform(
|
||||
MockMvcRequestBuilders.get(url)
|
||||
.param("size", String.valueOf(size))
|
||||
.param("page", String.valueOf(page))
|
||||
MockMvcRequestBuilders.get("/quizzes/search")
|
||||
.param("size", String.valueOf(MIN_PAGE_SIZE))
|
||||
.param("page", String.valueOf(MIN_PAGE_NUMBER))
|
||||
);
|
||||
|
||||
// then
|
||||
result.andExpect(status().isOk());
|
||||
}
|
||||
|
||||
private static Stream<Arguments> provideParameters() {
|
||||
return Stream.of(
|
||||
Arguments.of(null, 10, 10),
|
||||
Arguments.of(QuizCategory.JAVA, QuizConstants.MIN_PAGE_SIZE - 1, QuizConstants.MIN_PAGE_NUMBER),
|
||||
Arguments.of(QuizCategory.JAVA, QuizConstants.MAX_PAGE_SIZE + 1, QuizConstants.MIN_PAGE_NUMBER),
|
||||
Arguments.of(QuizCategory.JAVA, QuizConstants.MIN_PAGE_SIZE, QuizConstants.MIN_PAGE_NUMBER - 1)
|
||||
);
|
||||
}
|
||||
|
||||
private EnumMapperValue enumMapperValue(final EnumMapperType enumMapperType) {
|
||||
return EnumMapperValue.builder()
|
||||
.code(enumMapperType.name())
|
||||
@@ -95,7 +95,7 @@ class QuizServiceTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void findQuizEntitySuccess() throws RestApiException {
|
||||
public void findQuizEntitySuccess() {
|
||||
// given
|
||||
final long id = -1L;
|
||||
final Quiz quiz = quiz(id);
|
||||
@@ -126,7 +126,7 @@ class QuizServiceTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getQuizSuccess() throws RestApiException {
|
||||
public void getQuizSuccess() {
|
||||
// given
|
||||
final long id = -1L;
|
||||
final Quiz quiz = quiz(id);
|
||||
|
||||
@@ -1,15 +1,16 @@
|
||||
package com.mangkyu.employment.interview.erros.handler;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
//import com.mangkyu.employment.interview.app.quiz.controller.GetQuizController;
|
||||
import com.mangkyu.employment.interview.erros.errorcode.CommonErrorCode;
|
||||
import com.mangkyu.employment.interview.erros.errorcode.ErrorCode;
|
||||
import com.mangkyu.employment.interview.erros.response.ErrorResponse;
|
||||
import com.mangkyu.employment.interview.erros.exception.RestApiException;
|
||||
import com.mangkyu.employment.interview.app.quiz.controller.QuizController;
|
||||
import com.mangkyu.employment.interview.app.quiz.dto.AddQuizRequest;
|
||||
import com.mangkyu.employment.interview.app.quiz.service.QuizService;
|
||||
import com.mangkyu.employment.interview.enums.value.QuizLevel;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Disabled;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.mockito.InjectMocks;
|
||||
@@ -31,100 +32,101 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.Mockito.doThrow;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
|
||||
@Disabled
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
class GlobalExceptionHandlerTest {
|
||||
|
||||
@InjectMocks
|
||||
private QuizController target;
|
||||
|
||||
@Mock
|
||||
private QuizService quizService;
|
||||
|
||||
private MockMvc mockMvc;
|
||||
@Spy
|
||||
private Validator validator = new LocalValidatorFactoryBean();
|
||||
|
||||
@BeforeEach
|
||||
public void init() {
|
||||
mockMvc = MockMvcBuilders.standaloneSetup(target)
|
||||
.setControllerAdvice(new GlobalExceptionHandler())
|
||||
.build();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handleQuizException() throws Exception {
|
||||
// given
|
||||
final String resourceId = UUID.randomUUID().toString();
|
||||
final String url = "/quiz/" + resourceId;
|
||||
final ErrorCode errorCode = CommonErrorCode.RESOURCE_NOT_FOUND;
|
||||
|
||||
doThrow(new RestApiException(errorCode)).when(quizService).getQuiz(resourceId);
|
||||
|
||||
// when
|
||||
final ResultActions result = mockMvc.perform(
|
||||
MockMvcRequestBuilders.get(url)
|
||||
);
|
||||
|
||||
// then
|
||||
final ResultActions resultActions = result.andExpect(status().isNotFound());
|
||||
final String stringResponse = resultActions.andReturn().getResponse().getContentAsString();
|
||||
final ErrorResponse errorResponse = new Gson().fromJson(stringResponse, ErrorResponse.class);
|
||||
|
||||
|
||||
assertThat(errorResponse.getCode()).isEqualTo(errorCode.name());
|
||||
assertThat(errorResponse.getMessage()).isEqualTo(errorCode.getMessage());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handleIllegalArgument() throws Exception {
|
||||
// given
|
||||
final String resourceId = UUID.randomUUID().toString();
|
||||
final String url = "/quiz/" + resourceId;
|
||||
final String message = "message";
|
||||
|
||||
doThrow(new IllegalArgumentException(message)).when(quizService).getQuiz(resourceId);
|
||||
|
||||
// when
|
||||
final ResultActions result = mockMvc.perform(
|
||||
MockMvcRequestBuilders.get(url)
|
||||
);
|
||||
|
||||
// then
|
||||
final ResultActions resultActions = result.andExpect(status().isBadRequest());
|
||||
final String stringResponse = resultActions.andReturn().getResponse().getContentAsString();
|
||||
final ErrorResponse errorResponse = new Gson().fromJson(stringResponse, ErrorResponse.class);
|
||||
|
||||
|
||||
assertThat(errorResponse.getCode()).isEqualTo(CommonErrorCode.INVALID_PARAMETER.name());
|
||||
assertThat(errorResponse.getMessage()).isEqualTo(message);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handleMethodArgumentNotValid() throws Exception {
|
||||
// given
|
||||
final String url = "/quiz";
|
||||
final ErrorCode errorCode = CommonErrorCode.INVALID_PARAMETER;
|
||||
|
||||
final AddQuizRequest addQuizRequest = AddQuizRequest.builder()
|
||||
.title("Title")
|
||||
.quizLevel(Collections.singletonList(QuizLevel.NEW))
|
||||
.build();
|
||||
|
||||
// when
|
||||
final ResultActions result = mockMvc.perform(
|
||||
MockMvcRequestBuilders.post(url)
|
||||
.content(new Gson().toJson(addQuizRequest))
|
||||
.contentType(MediaType.APPLICATION_JSON)
|
||||
);
|
||||
|
||||
// then
|
||||
final ResultActions resultActions = result.andExpect(status().isBadRequest());
|
||||
final String stringResponse = resultActions.andReturn().getResponse().getContentAsString();
|
||||
final ErrorResponse errorResponse = new Gson().fromJson(stringResponse, ErrorResponse.class);
|
||||
|
||||
assertThat(errorResponse.getCode()).isEqualTo(errorCode.name());
|
||||
assertThat(errorResponse.getMessage()).isEqualTo(errorCode.getMessage());
|
||||
assertThat(errorResponse.getErrors().size()).isEqualTo(1);
|
||||
}
|
||||
//
|
||||
// @InjectMocks
|
||||
// private GetQuizController target;
|
||||
//
|
||||
// @Mock
|
||||
// private QuizService quizService;
|
||||
//
|
||||
// private MockMvc mockMvc;
|
||||
// @Spy
|
||||
// private Validator validator = new LocalValidatorFactoryBean();
|
||||
//
|
||||
// @BeforeEach
|
||||
// public void init() {
|
||||
// mockMvc = MockMvcBuilders.standaloneSetup(target)
|
||||
// .setControllerAdvice(new GlobalExceptionHandler())
|
||||
// .build();
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// public void handleQuizException() throws Exception {
|
||||
// // given
|
||||
// final String resourceId = UUID.randomUUID().toString();
|
||||
// final String url = "/quizzes/" + resourceId;
|
||||
// final ErrorCode errorCode = CommonErrorCode.RESOURCE_NOT_FOUND;
|
||||
//
|
||||
// doThrow(new RestApiException(errorCode)).when(quizService).getQuiz(resourceId);
|
||||
//
|
||||
// // when
|
||||
// final ResultActions result = mockMvc.perform(
|
||||
// MockMvcRequestBuilders.get(url)
|
||||
// );
|
||||
//
|
||||
// // then
|
||||
// final ResultActions resultActions = result.andExpect(status().isNotFound());
|
||||
// final String stringResponse = resultActions.andReturn().getResponse().getContentAsString();
|
||||
// final ErrorResponse errorResponse = new Gson().fromJson(stringResponse, ErrorResponse.class);
|
||||
//
|
||||
//
|
||||
// assertThat(errorResponse.getCode()).isEqualTo(errorCode.name());
|
||||
// assertThat(errorResponse.getMessage()).isEqualTo(errorCode.getMessage());
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// public void handleIllegalArgument() throws Exception {
|
||||
// // given
|
||||
// final String resourceId = UUID.randomUUID().toString();
|
||||
// final String url = "/quizzes/" + resourceId;
|
||||
// final String message = "message";
|
||||
//
|
||||
// doThrow(new IllegalArgumentException(message)).when(quizService).getQuiz(resourceId);
|
||||
//
|
||||
// // when
|
||||
// final ResultActions result = mockMvc.perform(
|
||||
// MockMvcRequestBuilders.get(url)
|
||||
// );
|
||||
//
|
||||
// // then
|
||||
// final ResultActions resultActions = result.andExpect(status().isBadRequest());
|
||||
// final String stringResponse = resultActions.andReturn().getResponse().getContentAsString();
|
||||
// final ErrorResponse errorResponse = new Gson().fromJson(stringResponse, ErrorResponse.class);
|
||||
//
|
||||
//
|
||||
// assertThat(errorResponse.getCode()).isEqualTo(CommonErrorCode.INVALID_PARAMETER.name());
|
||||
// assertThat(errorResponse.getMessage()).isEqualTo(message);
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// public void handleMethodArgumentNotValid() throws Exception {
|
||||
// // given
|
||||
// final String url = "/quiz";
|
||||
// final ErrorCode errorCode = CommonErrorCode.INVALID_PARAMETER;
|
||||
//
|
||||
// final AddQuizRequest addQuizRequest = AddQuizRequest.builder()
|
||||
// .title("Title")
|
||||
// .quizLevel(Collections.singletonList(QuizLevel.NEW))
|
||||
// .build();
|
||||
//
|
||||
// // when
|
||||
// final ResultActions result = mockMvc.perform(
|
||||
// MockMvcRequestBuilders.post(url)
|
||||
// .content(new Gson().toJson(addQuizRequest))
|
||||
// .contentType(MediaType.APPLICATION_JSON)
|
||||
// );
|
||||
//
|
||||
// // then
|
||||
// final ResultActions resultActions = result.andExpect(status().isBadRequest());
|
||||
// final String stringResponse = resultActions.andReturn().getResponse().getContentAsString();
|
||||
// final ErrorResponse errorResponse = new Gson().fromJson(stringResponse, ErrorResponse.class);
|
||||
//
|
||||
// assertThat(errorResponse.getCode()).isEqualTo(errorCode.name());
|
||||
// assertThat(errorResponse.getMessage()).isEqualTo(errorCode.getMessage());
|
||||
// assertThat(errorResponse.getErrors().size()).isEqualTo(1);
|
||||
// }
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user