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.Builder;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
@@ -22,7 +21,7 @@ public class AddAnswerRequest {
|
|||||||
private final String resourceId = String.valueOf(UUID.randomUUID());
|
private final String resourceId = String.valueOf(UUID.randomUUID());
|
||||||
|
|
||||||
@NotBlank
|
@NotBlank
|
||||||
@Size(max = AnswerConstants.MAX_ANSWER_SIZE)
|
@Size(max = 5000)
|
||||||
private final String description;
|
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.Builder;
|
||||||
import lombok.Getter;
|
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;
|
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.common.entity.BaseEntity;
|
||||||
import com.mangkyu.employment.interview.app.quiz.entity.Quiz;
|
import com.mangkyu.employment.interview.app.quiz.entity.Quiz;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
@@ -23,7 +22,7 @@ public class Answer extends BaseEntity {
|
|||||||
|
|
||||||
@Setter
|
@Setter
|
||||||
@Lob
|
@Lob
|
||||||
@Column(length = AnswerConstants.MAX_ANSWER_SIZE)
|
@Column(length = 5000)
|
||||||
private String description;
|
private String description;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.mangkyu.employment.interview.app.answer.service;
|
package com.mangkyu.employment.interview.app.answer.service;
|
||||||
|
|
||||||
import com.mangkyu.employment.interview.app.answer.dto.AddAnswerRequest;
|
import com.mangkyu.employment.interview.app.answer.controller.AddAnswerRequest;
|
||||||
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.entity.Answer;
|
import com.mangkyu.employment.interview.app.answer.entity.Answer;
|
||||||
import com.mangkyu.employment.interview.app.answer.repository.AnswerRepository;
|
import com.mangkyu.employment.interview.app.answer.repository.AnswerRepository;
|
||||||
import com.mangkyu.employment.interview.erros.errorcode.CommonErrorCode;
|
import com.mangkyu.employment.interview.erros.errorcode.CommonErrorCode;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.mangkyu.employment.interview.app.quiz.controller;
|
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.answer.service.AnswerService;
|
||||||
import com.mangkyu.employment.interview.app.quiz.dto.GetQuizResponse;
|
import com.mangkyu.employment.interview.app.quiz.dto.GetQuizResponse;
|
||||||
import com.mangkyu.employment.interview.app.quiz.service.QuizService;
|
import com.mangkyu.employment.interview.app.quiz.service.QuizService;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.mangkyu.employment.interview.app.quiz.converter;
|
package com.mangkyu.employment.interview.app.quiz.converter;
|
||||||
|
|
||||||
import com.mangkyu.employment.interview.app.answer.dto.AddAnswerRequest;
|
import com.mangkyu.employment.interview.app.answer.controller.AddAnswerRequest;
|
||||||
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.entity.Answer;
|
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.dto.GetQuizResponse;
|
||||||
import com.mangkyu.employment.interview.app.quiz.entity.Quiz;
|
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 com.mangkyu.employment.interview.enums.value.QuizLevel;
|
||||||
import lombok.AccessLevel;
|
import lombok.AccessLevel;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
|
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ public class QuizRepositoryImpl implements QuizRepositoryCustom {
|
|||||||
.where(quizLevelsIn(qQuiz, condition.getLevels()))
|
.where(quizLevelsIn(qQuiz, condition.getLevels()))
|
||||||
.offset(pageable.getOffset())
|
.offset(pageable.getOffset())
|
||||||
.limit(pageable.getPageSize())
|
.limit(pageable.getPageSize())
|
||||||
.where(qQuiz.answer.isNotNull())
|
// .where(qQuiz.answer.isNull())
|
||||||
.where(qQuiz.isEnable.isTrue())
|
.where(qQuiz.isEnable.isTrue())
|
||||||
.fetch();
|
.fetch();
|
||||||
|
|
||||||
@@ -43,7 +43,7 @@ public class QuizRepositoryImpl implements QuizRepositoryCustom {
|
|||||||
.where(titleLike(qQuiz, condition.getQuery()))
|
.where(titleLike(qQuiz, condition.getQuery()))
|
||||||
.where(quizCategoriesIn(qQuiz, condition.getCategories()))
|
.where(quizCategoriesIn(qQuiz, condition.getCategories()))
|
||||||
.where(quizLevelsIn(qQuiz, condition.getLevels()))
|
.where(quizLevelsIn(qQuiz, condition.getLevels()))
|
||||||
.where(qQuiz.answer.isNotNull())
|
// .where(qQuiz.answer.isNull())
|
||||||
.where(qQuiz.isEnable.isTrue())
|
.where(qQuiz.isEnable.isTrue())
|
||||||
.stream().count();
|
.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;
|
package com.mangkyu.employment.interview.app.answer.service;
|
||||||
|
|
||||||
import com.mangkyu.employment.interview.app.answer.dto.AddAnswerRequest;
|
import com.mangkyu.employment.interview.app.answer.controller.AddAnswerRequest;
|
||||||
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.entity.Answer;
|
import com.mangkyu.employment.interview.app.answer.entity.Answer;
|
||||||
import com.mangkyu.employment.interview.app.answer.repository.AnswerRepository;
|
import com.mangkyu.employment.interview.app.answer.repository.AnswerRepository;
|
||||||
import com.mangkyu.employment.interview.erros.errorcode.CommonErrorCode;
|
import com.mangkyu.employment.interview.erros.errorcode.CommonErrorCode;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package com.mangkyu.employment.interview.app.quiz.converter;
|
package com.mangkyu.employment.interview.app.quiz.converter;
|
||||||
|
|
||||||
import com.mangkyu.employment.interview.app.answer.dto.AddAnswerRequest;
|
import com.mangkyu.employment.interview.app.answer.controller.AddAnswerRequest;
|
||||||
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.entity.Answer;
|
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.dto.GetQuizResponse;
|
||||||
import com.mangkyu.employment.interview.app.quiz.entity.Quiz;
|
import com.mangkyu.employment.interview.app.quiz.entity.Quiz;
|
||||||
|
|||||||
Reference in New Issue
Block a user