Divide AnswerController independently
This commit is contained in:
@@ -1,11 +0,0 @@
|
||||
package com.mangkyu.employment.interview.app.answer.constants;
|
||||
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public final class AnswerConstants {
|
||||
|
||||
public static final int MAX_ANSWER_SIZE = 5000;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.mangkyu.employment.interview.app.answer.controller;
|
||||
|
||||
import com.mangkyu.employment.interview.app.answer.service.AnswerService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
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;
|
||||
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
public class AddAnswerController {
|
||||
|
||||
private final AnswerService answerService;
|
||||
|
||||
@PostMapping("/answers")
|
||||
public ResponseEntity<Void> postAnswer(@RequestBody @Valid final AddAnswerRequest addAnswerRequest) {
|
||||
answerService.addAnswer(addAnswerRequest);
|
||||
return ResponseEntity.noContent()
|
||||
.build();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.mangkyu.employment.interview.app.answer.dto;
|
||||
package com.mangkyu.employment.interview.app.answer.controller;
|
||||
|
||||
import com.mangkyu.employment.interview.app.answer.constants.AnswerConstants;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
@@ -22,7 +21,7 @@ public class AddAnswerRequest {
|
||||
private final String resourceId = String.valueOf(UUID.randomUUID());
|
||||
|
||||
@NotBlank
|
||||
@Size(max = AnswerConstants.MAX_ANSWER_SIZE)
|
||||
@Size(max = 5000)
|
||||
private final String description;
|
||||
|
||||
}
|
||||
@@ -1,44 +0,0 @@
|
||||
package com.mangkyu.employment.interview.app.answer.controller;
|
||||
|
||||
import com.mangkyu.employment.interview.app.answer.dto.AddAnswerRequest;
|
||||
import com.mangkyu.employment.interview.app.answer.dto.GetAnswerResponse;
|
||||
import com.mangkyu.employment.interview.app.answer.service.AnswerService;
|
||||
import com.mangkyu.employment.interview.erros.exception.RestApiException;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.validation.Valid;
|
||||
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
public class AnswerController {
|
||||
|
||||
private final AnswerService answerService;
|
||||
|
||||
@PutMapping("/answers")
|
||||
public ResponseEntity<Void> putAnswer(@RequestBody @Valid final AddAnswerRequest addAnswerRequest) throws RestApiException {
|
||||
answerService.addAnswer(addAnswerRequest);
|
||||
return ResponseEntity.noContent()
|
||||
.build();
|
||||
}
|
||||
|
||||
@PostMapping("/answers")
|
||||
public ResponseEntity<Void> postAnswer(@RequestBody @Valid final AddAnswerRequest addAnswerRequest) throws RestApiException {
|
||||
answerService.addAnswer(addAnswerRequest);
|
||||
return ResponseEntity.noContent()
|
||||
.build();
|
||||
}
|
||||
|
||||
@GetMapping("/answers/{resourceId}")
|
||||
public ResponseEntity<GetAnswerResponse> getAnswer(@PathVariable final String resourceId) throws RestApiException {
|
||||
return ResponseEntity.ok(answerService.getAnswer(resourceId));
|
||||
}
|
||||
|
||||
@DeleteMapping("/answers/{resourceId}")
|
||||
public ResponseEntity<Void> deleteAnswer(@PathVariable final String resourceId) throws RestApiException {
|
||||
answerService.deleteAnswer(resourceId);
|
||||
|
||||
return ResponseEntity.noContent().build();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
package com.mangkyu.employment.interview.app.answer.controller;
|
||||
|
||||
import com.mangkyu.employment.interview.app.answer.service.AnswerService;
|
||||
import com.mangkyu.employment.interview.erros.exception.RestApiException;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
public class DeleteAnswerController {
|
||||
|
||||
private final AnswerService answerService;
|
||||
|
||||
@DeleteMapping("/answers/{resourceId}")
|
||||
public ResponseEntity<Void> deleteAnswer(@PathVariable final String resourceId) {
|
||||
answerService.deleteAnswer(resourceId);
|
||||
|
||||
return ResponseEntity.noContent().build();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.mangkyu.employment.interview.app.answer.controller;
|
||||
|
||||
import com.mangkyu.employment.interview.app.answer.service.AnswerService;
|
||||
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;
|
||||
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
public class GetAnswerController {
|
||||
|
||||
private final AnswerService answerService;
|
||||
|
||||
@GetMapping("/answers/{resourceId}")
|
||||
public ResponseEntity<GetAnswerResponse> getAnswer(@PathVariable final String resourceId) {
|
||||
return ResponseEntity.ok(answerService.getAnswer(resourceId));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.mangkyu.employment.interview.app.answer.dto;
|
||||
package com.mangkyu.employment.interview.app.answer.controller;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.mangkyu.employment.interview.app.answer.controller;
|
||||
|
||||
import com.mangkyu.employment.interview.app.answer.service.AnswerService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.PutMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.validation.Valid;
|
||||
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
public class UpdateAnswerController {
|
||||
|
||||
private final AnswerService answerService;
|
||||
|
||||
@PutMapping("/answers")
|
||||
public ResponseEntity<Void> putAnswer(@RequestBody @Valid final AddAnswerRequest addAnswerRequest) {
|
||||
answerService.addAnswer(addAnswerRequest);
|
||||
return ResponseEntity.noContent()
|
||||
.build();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.mangkyu.employment.interview.app.answer.entity;
|
||||
|
||||
import com.mangkyu.employment.interview.app.answer.constants.AnswerConstants;
|
||||
import com.mangkyu.employment.interview.app.common.entity.BaseEntity;
|
||||
import com.mangkyu.employment.interview.app.quiz.entity.Quiz;
|
||||
import lombok.*;
|
||||
@@ -23,7 +22,7 @@ public class Answer extends BaseEntity {
|
||||
|
||||
@Setter
|
||||
@Lob
|
||||
@Column(length = AnswerConstants.MAX_ANSWER_SIZE)
|
||||
@Column(length = 5000)
|
||||
private String description;
|
||||
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.mangkyu.employment.interview.app.answer.service;
|
||||
|
||||
import com.mangkyu.employment.interview.app.answer.dto.AddAnswerRequest;
|
||||
import com.mangkyu.employment.interview.app.answer.dto.GetAnswerResponse;
|
||||
import com.mangkyu.employment.interview.app.answer.controller.AddAnswerRequest;
|
||||
import com.mangkyu.employment.interview.app.answer.controller.GetAnswerResponse;
|
||||
import com.mangkyu.employment.interview.app.answer.entity.Answer;
|
||||
import com.mangkyu.employment.interview.app.answer.repository.AnswerRepository;
|
||||
import com.mangkyu.employment.interview.erros.errorcode.CommonErrorCode;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.mangkyu.employment.interview.app.quiz.controller;
|
||||
|
||||
import com.mangkyu.employment.interview.app.answer.dto.GetAnswerResponse;
|
||||
import com.mangkyu.employment.interview.app.answer.controller.GetAnswerResponse;
|
||||
import com.mangkyu.employment.interview.app.answer.service.AnswerService;
|
||||
import com.mangkyu.employment.interview.app.quiz.dto.GetQuizResponse;
|
||||
import com.mangkyu.employment.interview.app.quiz.service.QuizService;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.mangkyu.employment.interview.app.quiz.converter;
|
||||
|
||||
import com.mangkyu.employment.interview.app.answer.dto.AddAnswerRequest;
|
||||
import com.mangkyu.employment.interview.app.answer.dto.GetAnswerResponse;
|
||||
import com.mangkyu.employment.interview.app.answer.controller.AddAnswerRequest;
|
||||
import com.mangkyu.employment.interview.app.answer.controller.GetAnswerResponse;
|
||||
import com.mangkyu.employment.interview.app.answer.entity.Answer;
|
||||
import com.mangkyu.employment.interview.app.quiz.dto.GetQuizResponse;
|
||||
import com.mangkyu.employment.interview.app.quiz.entity.Quiz;
|
||||
@@ -9,7 +9,6 @@ import com.mangkyu.employment.interview.enums.common.EnumMapperValue;
|
||||
import com.mangkyu.employment.interview.enums.value.QuizLevel;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.sql.Timestamp;
|
||||
import java.util.List;
|
||||
|
||||
@@ -35,7 +35,7 @@ public class QuizRepositoryImpl implements QuizRepositoryCustom {
|
||||
.where(quizLevelsIn(qQuiz, condition.getLevels()))
|
||||
.offset(pageable.getOffset())
|
||||
.limit(pageable.getPageSize())
|
||||
.where(qQuiz.answer.isNotNull())
|
||||
// .where(qQuiz.answer.isNull())
|
||||
.where(qQuiz.isEnable.isTrue())
|
||||
.fetch();
|
||||
|
||||
@@ -43,7 +43,7 @@ public class QuizRepositoryImpl implements QuizRepositoryCustom {
|
||||
.where(titleLike(qQuiz, condition.getQuery()))
|
||||
.where(quizCategoriesIn(qQuiz, condition.getCategories()))
|
||||
.where(quizLevelsIn(qQuiz, condition.getLevels()))
|
||||
.where(qQuiz.answer.isNotNull())
|
||||
// .where(qQuiz.answer.isNull())
|
||||
.where(qQuiz.isEnable.isTrue())
|
||||
.stream().count();
|
||||
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
package com.mangkyu.employment.interview.app.answer.controller;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.mangkyu.employment.interview.app.answer.service.AnswerService;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.Arguments;
|
||||
import org.junit.jupiter.params.provider.MethodSource;
|
||||
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.UUID;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
|
||||
@WebMvcTest
|
||||
class AddAnswerControllerTest {
|
||||
|
||||
@Autowired
|
||||
private MockMvc mockMvc;
|
||||
|
||||
@Autowired
|
||||
private AnswerService answerService;
|
||||
|
||||
@ParameterizedTest
|
||||
@MethodSource("provideParameters")
|
||||
public void addAnswerFail_InvalidParameter(final String quizResourceId, final String desc) throws Exception {
|
||||
// given
|
||||
final String url = "/answers";
|
||||
|
||||
final AddAnswerRequest addAnswerRequest = AddAnswerRequest.builder()
|
||||
.quizResourceId(quizResourceId)
|
||||
.description(desc)
|
||||
.build();
|
||||
|
||||
// when
|
||||
final ResultActions result = mockMvc.perform(
|
||||
MockMvcRequestBuilders.post(url)
|
||||
.content(new Gson().toJson(addAnswerRequest))
|
||||
.contentType(MediaType.APPLICATION_JSON)
|
||||
);
|
||||
|
||||
// then
|
||||
result.andExpect(status().isBadRequest());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void addAnswerSuccess() throws Exception {
|
||||
// given
|
||||
final String url = "/answers";
|
||||
|
||||
final AddAnswerRequest addAnswerRequest = AddAnswerRequest.builder()
|
||||
.quizResourceId(UUID.randomUUID().toString())
|
||||
.description("desc")
|
||||
.build();
|
||||
|
||||
|
||||
// when
|
||||
final ResultActions result = mockMvc.perform(
|
||||
MockMvcRequestBuilders.post(url)
|
||||
.content(new Gson().toJson(addAnswerRequest))
|
||||
.contentType(MediaType.APPLICATION_JSON)
|
||||
);
|
||||
|
||||
// then
|
||||
result.andExpect(status().isNoContent());
|
||||
}
|
||||
|
||||
private static Stream<Arguments> provideParameters() {
|
||||
return Stream.of(
|
||||
Arguments.of(null, desc(1)),
|
||||
Arguments.of(UUID.randomUUID().toString(), null),
|
||||
Arguments.of(UUID.randomUUID().toString(), desc(1000))
|
||||
);
|
||||
}
|
||||
|
||||
private static String desc(final int count) {
|
||||
final StringBuilder stringBuilder = new StringBuilder();
|
||||
for (int i = 0; i < count; i++) {
|
||||
stringBuilder.append("AAAAAAAAAAAAAAAAAAAAAAAAAAA");
|
||||
}
|
||||
return stringBuilder.toString();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,178 +0,0 @@
|
||||
package com.mangkyu.employment.interview.app.answer.controller;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.mangkyu.employment.interview.app.answer.dto.AddAnswerRequest;
|
||||
import com.mangkyu.employment.interview.app.answer.dto.GetAnswerResponse;
|
||||
import com.mangkyu.employment.interview.app.answer.service.AnswerService;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.Arguments;
|
||||
import org.junit.jupiter.params.provider.MethodSource;
|
||||
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.UUID;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
|
||||
@WebMvcTest
|
||||
class AnswerControllerTest {
|
||||
|
||||
@Autowired
|
||||
private MockMvc mockMvc;
|
||||
|
||||
@Autowired
|
||||
private AnswerService answerService;
|
||||
|
||||
@Test
|
||||
public void getAnswer() throws Exception {
|
||||
// given
|
||||
final String resourceId = UUID.randomUUID().toString();
|
||||
final String url = "/answers/" + resourceId;
|
||||
final GetAnswerResponse getAnswerResponse = GetAnswerResponse.builder()
|
||||
.resourceId(resourceId)
|
||||
.quizResourceId(UUID.randomUUID().toString())
|
||||
.description("설명")
|
||||
.createdAt(System.currentTimeMillis())
|
||||
.build();
|
||||
|
||||
doReturn(getAnswerResponse).when(answerService).getAnswer(resourceId);
|
||||
|
||||
// when
|
||||
final ResultActions result = mockMvc.perform(
|
||||
MockMvcRequestBuilders.get(url)
|
||||
);
|
||||
|
||||
// then
|
||||
result.andExpect(status().isOk())
|
||||
.andExpect(jsonPath("resourceId").value(getAnswerResponse.getResourceId()))
|
||||
.andExpect(jsonPath("quizResourceId").value(getAnswerResponse.getQuizResourceId()))
|
||||
.andExpect(jsonPath("description").value(getAnswerResponse.getDescription()));
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@MethodSource("provideParameters")
|
||||
public void addAnswerFail_InvalidParameter(final String quizResourceId, final String desc) throws Exception {
|
||||
// given
|
||||
final String url = "/answers";
|
||||
|
||||
final AddAnswerRequest addAnswerRequest = AddAnswerRequest.builder()
|
||||
.quizResourceId(quizResourceId)
|
||||
.description(desc)
|
||||
.build();
|
||||
|
||||
// when
|
||||
final ResultActions result = mockMvc.perform(
|
||||
MockMvcRequestBuilders.post(url)
|
||||
.content(new Gson().toJson(addAnswerRequest))
|
||||
.contentType(MediaType.APPLICATION_JSON)
|
||||
);
|
||||
|
||||
// then
|
||||
result.andExpect(status().isBadRequest());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void addAnswerSuccess() throws Exception {
|
||||
// given
|
||||
final String url = "/answers";
|
||||
|
||||
final AddAnswerRequest addAnswerRequest = AddAnswerRequest.builder()
|
||||
.quizResourceId(UUID.randomUUID().toString())
|
||||
.description("desc")
|
||||
.build();
|
||||
|
||||
|
||||
// when
|
||||
final ResultActions result = mockMvc.perform(
|
||||
MockMvcRequestBuilders.post(url)
|
||||
.content(new Gson().toJson(addAnswerRequest))
|
||||
.contentType(MediaType.APPLICATION_JSON)
|
||||
);
|
||||
|
||||
// then
|
||||
result.andExpect(status().isNoContent());
|
||||
}
|
||||
|
||||
@ParameterizedTest
|
||||
@MethodSource("provideParameters")
|
||||
public void putAnswerFail_InvalidParameter(final String quizResourceId, final String desc) throws Exception {
|
||||
// given
|
||||
final String url = "/answers";
|
||||
|
||||
final AddAnswerRequest addAnswerRequest = AddAnswerRequest.builder()
|
||||
.quizResourceId(quizResourceId)
|
||||
.description(desc)
|
||||
.build();
|
||||
|
||||
// when
|
||||
final ResultActions result = mockMvc.perform(
|
||||
MockMvcRequestBuilders.put(url)
|
||||
.content(new Gson().toJson(addAnswerRequest))
|
||||
.contentType(MediaType.APPLICATION_JSON)
|
||||
);
|
||||
|
||||
// then
|
||||
result.andExpect(status().isBadRequest());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void putAnswerSuccess() throws Exception {
|
||||
// given
|
||||
final String url = "/answers";
|
||||
|
||||
final AddAnswerRequest addAnswerRequest = AddAnswerRequest.builder()
|
||||
.quizResourceId(UUID.randomUUID().toString())
|
||||
.description("desc")
|
||||
.build();
|
||||
|
||||
|
||||
// when
|
||||
final ResultActions result = mockMvc.perform(
|
||||
MockMvcRequestBuilders.put(url)
|
||||
.content(new Gson().toJson(addAnswerRequest))
|
||||
.contentType(MediaType.APPLICATION_JSON)
|
||||
);
|
||||
|
||||
// then
|
||||
result.andExpect(status().isNoContent());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void deleteAnswerSuccess() throws Exception {
|
||||
// given
|
||||
final String url = "/answers/" + UUID.randomUUID();
|
||||
|
||||
// when
|
||||
final ResultActions result = mockMvc.perform(
|
||||
MockMvcRequestBuilders.delete(url)
|
||||
);
|
||||
|
||||
// then
|
||||
result.andExpect(status().isNoContent());
|
||||
}
|
||||
|
||||
private static Stream<Arguments> provideParameters() {
|
||||
return Stream.of(
|
||||
Arguments.of(null, desc(1)),
|
||||
Arguments.of(UUID.randomUUID().toString(), null),
|
||||
Arguments.of(UUID.randomUUID().toString(), desc(1000))
|
||||
);
|
||||
}
|
||||
|
||||
private static String desc(final int count) {
|
||||
final StringBuilder stringBuilder = new StringBuilder();
|
||||
for (int i = 0; i < count; i++) {
|
||||
stringBuilder.append("AAAAAAAAAAAAAAAAAAAAAAAAAAA");
|
||||
}
|
||||
return stringBuilder.toString();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package com.mangkyu.employment.interview.app.answer.controller;
|
||||
|
||||
import com.mangkyu.employment.interview.app.answer.service.AnswerService;
|
||||
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.UUID;
|
||||
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
|
||||
@WebMvcTest
|
||||
class DeleteAnswerControllerTest {
|
||||
|
||||
@Autowired
|
||||
private MockMvc mockMvc;
|
||||
|
||||
@Autowired
|
||||
private AnswerService answerService;
|
||||
|
||||
@Test
|
||||
public void deleteAnswerSuccess() throws Exception {
|
||||
// given
|
||||
final String url = "/answers/" + UUID.randomUUID();
|
||||
|
||||
// when
|
||||
final ResultActions result = mockMvc.perform(
|
||||
MockMvcRequestBuilders.delete(url)
|
||||
);
|
||||
|
||||
// then
|
||||
result.andExpect(status().isNoContent());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
package com.mangkyu.employment.interview.app.answer.controller;
|
||||
|
||||
import com.mangkyu.employment.interview.app.answer.service.AnswerService;
|
||||
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.UUID;
|
||||
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
|
||||
@WebMvcTest
|
||||
class GetAnswerControllerTest {
|
||||
|
||||
@Autowired
|
||||
private MockMvc mockMvc;
|
||||
|
||||
@Autowired
|
||||
private AnswerService answerService;
|
||||
|
||||
@Test
|
||||
public void getAnswer() throws Exception {
|
||||
// given
|
||||
final String resourceId = UUID.randomUUID().toString();
|
||||
final String url = "/answers/" + resourceId;
|
||||
final GetAnswerResponse getAnswerResponse = GetAnswerResponse.builder()
|
||||
.resourceId(resourceId)
|
||||
.quizResourceId(UUID.randomUUID().toString())
|
||||
.description("설명")
|
||||
.createdAt(System.currentTimeMillis())
|
||||
.build();
|
||||
|
||||
doReturn(getAnswerResponse).when(answerService).getAnswer(resourceId);
|
||||
|
||||
// when
|
||||
final ResultActions result = mockMvc.perform(
|
||||
MockMvcRequestBuilders.get(url)
|
||||
);
|
||||
|
||||
// then
|
||||
result.andExpect(status().isOk())
|
||||
.andExpect(jsonPath("resourceId").value(getAnswerResponse.getResourceId()))
|
||||
.andExpect(jsonPath("quizResourceId").value(getAnswerResponse.getQuizResourceId()))
|
||||
.andExpect(jsonPath("description").value(getAnswerResponse.getDescription()));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,90 @@
|
||||
package com.mangkyu.employment.interview.app.answer.controller;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.mangkyu.employment.interview.app.answer.service.AnswerService;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.Arguments;
|
||||
import org.junit.jupiter.params.provider.MethodSource;
|
||||
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.UUID;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||
|
||||
@WebMvcTest
|
||||
class UpdateAnswerControllerTest {
|
||||
|
||||
@Autowired
|
||||
private MockMvc mockMvc;
|
||||
|
||||
@Autowired
|
||||
private AnswerService answerService;
|
||||
|
||||
@ParameterizedTest
|
||||
@MethodSource("provideParameters")
|
||||
public void putAnswerFail_InvalidParameter(final String quizResourceId, final String desc) throws Exception {
|
||||
// given
|
||||
final String url = "/answers";
|
||||
|
||||
final AddAnswerRequest addAnswerRequest = AddAnswerRequest.builder()
|
||||
.quizResourceId(quizResourceId)
|
||||
.description(desc)
|
||||
.build();
|
||||
|
||||
// when
|
||||
final ResultActions result = mockMvc.perform(
|
||||
MockMvcRequestBuilders.put(url)
|
||||
.content(new Gson().toJson(addAnswerRequest))
|
||||
.contentType(MediaType.APPLICATION_JSON)
|
||||
);
|
||||
|
||||
// then
|
||||
result.andExpect(status().isBadRequest());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void putAnswerSuccess() throws Exception {
|
||||
// given
|
||||
final String url = "/answers";
|
||||
|
||||
final AddAnswerRequest addAnswerRequest = AddAnswerRequest.builder()
|
||||
.quizResourceId(UUID.randomUUID().toString())
|
||||
.description("desc")
|
||||
.build();
|
||||
|
||||
|
||||
// when
|
||||
final ResultActions result = mockMvc.perform(
|
||||
MockMvcRequestBuilders.put(url)
|
||||
.content(new Gson().toJson(addAnswerRequest))
|
||||
.contentType(MediaType.APPLICATION_JSON)
|
||||
);
|
||||
|
||||
// then
|
||||
result.andExpect(status().isNoContent());
|
||||
}
|
||||
|
||||
private static Stream<Arguments> provideParameters() {
|
||||
return Stream.of(
|
||||
Arguments.of(null, desc(1)),
|
||||
Arguments.of(UUID.randomUUID().toString(), null),
|
||||
Arguments.of(UUID.randomUUID().toString(), desc(1000))
|
||||
);
|
||||
}
|
||||
|
||||
private static String desc(final int count) {
|
||||
final StringBuilder stringBuilder = new StringBuilder();
|
||||
for (int i = 0; i < count; i++) {
|
||||
stringBuilder.append("AAAAAAAAAAAAAAAAAAAAAAAAAAA");
|
||||
}
|
||||
return stringBuilder.toString();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.mangkyu.employment.interview.app.answer.service;
|
||||
|
||||
import com.mangkyu.employment.interview.app.answer.dto.AddAnswerRequest;
|
||||
import com.mangkyu.employment.interview.app.answer.dto.GetAnswerResponse;
|
||||
import com.mangkyu.employment.interview.app.answer.controller.AddAnswerRequest;
|
||||
import com.mangkyu.employment.interview.app.answer.controller.GetAnswerResponse;
|
||||
import com.mangkyu.employment.interview.app.answer.entity.Answer;
|
||||
import com.mangkyu.employment.interview.app.answer.repository.AnswerRepository;
|
||||
import com.mangkyu.employment.interview.erros.errorcode.CommonErrorCode;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.mangkyu.employment.interview.app.quiz.converter;
|
||||
|
||||
import com.mangkyu.employment.interview.app.answer.dto.AddAnswerRequest;
|
||||
import com.mangkyu.employment.interview.app.answer.dto.GetAnswerResponse;
|
||||
import com.mangkyu.employment.interview.app.answer.controller.AddAnswerRequest;
|
||||
import com.mangkyu.employment.interview.app.answer.controller.GetAnswerResponse;
|
||||
import com.mangkyu.employment.interview.app.answer.entity.Answer;
|
||||
import com.mangkyu.employment.interview.app.quiz.dto.GetQuizResponse;
|
||||
import com.mangkyu.employment.interview.app.quiz.entity.Quiz;
|
||||
|
||||
Reference in New Issue
Block a user