Skip to content

Commit

Permalink
refactor(Solved Test): Solved 테스트 코드 수정
Browse files Browse the repository at this point in the history
반복해 사용되는 값의 경우 상수 처리를 하고, DB DDL 변경 등의 조건에 따라 적합하게 테스트 코드를 개선했습니다.
  • Loading branch information
moomint8 committed Apr 16, 2024
1 parent 2509241 commit 0a58ad4
Showing 1 changed file with 28 additions and 49 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@
import java.time.LocalDate;
import java.util.List;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.*;

@Transactional
@SpringBootTest
class SolvedServiceImplTest {

Expand All @@ -41,85 +41,64 @@ class SolvedServiceImplTest {
@Autowired
private UserRepository userRepository;

@Autowired
private PlatformTransactionManager transactionManager;

@BeforeEach
void setUserToken() {
setUserToContextByUsername();
}

@AfterEach
void rollback() {
TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition());
transactionManager.rollback(status);
}

@DisplayName("사용자가 입력한 답과 정답 비교하여 판정")
@DisplayName("사용자가 정답을 제출한 경우 정답 판정 내리는지 테스트")
@Test
void findSelectedOptionAndCompareAnswer() {
void isCorrectIsTrueWhenRightOption() throws UserNotFoundException {
// Given
int userId = 1;
int quizId = 1;
SolvedRequest solvedRequest = new SolvedRequest(userId, quizId);
int userId = userRepository.findByEmail(userService.findByToken().getEmail()).getId();
SolvedRequest solvedRequest = new SolvedRequest(userId, TEST_QUIZ_ID);
solvedRequest.setSolvedDate(LocalDate.now());
solvedRequest.setSelectedOption(TEST_RIGHT_OPTION);

// When
SolvedDTO solvedDTO = solvedService.findSelectedOptionAndCompareAnswer(solvedRequest);

// Then
Assertions.assertNotNull(solvedDTO);
Assertions.assertEquals(1,solvedDTO.getUserId());
Assertions.assertEquals(1,solvedDTO.getQuizId());
Assertions.assertEquals(true, solvedDTO.isCorrect());
assertNotNull(solvedDTO);
assertTrue(solvedDTO.isCorrect());
}

@DisplayName("사용자가 풀었던 문제 리스트 조회")
@DisplayName("사용자가 오답을 제출한 경우 정답 판정 내리는지 테스트")
@Test
void findSolvedQuizListByUserId() {
void isCorrectIsFalseWhenWrongOption() throws UserNotFoundException {
// Given
int userId = 1;
int quizId = 0;
int userId = userRepository.findByEmail(userService.findByToken().getEmail()).getId();
SolvedRequest solvedRequest = new SolvedRequest(userId, TEST_QUIZ_ID);
solvedRequest.setSolvedDate(LocalDate.now());
solvedRequest.setSelectedOption(TEST_WRONG_OPTION);

// When
SolvedRequest solvedRequest = new SolvedRequest(userId, quizId);
List<Solved> solvedList = solvedService.findSolvedQuizListByUserId(solvedRequest);
SolvedDTO solvedDTO = solvedService.findSelectedOptionAndCompareAnswer(solvedRequest);

// Then
Assertions.assertNotNull(solvedList);
assertNotNull(solvedDTO);
assertFalse(solvedDTO.isCorrect());
}

@DisplayName("사용자가 풀었던 문제 한 개 조회")
@DisplayName("사용자가 풀었던 문제 리스트 조회")
@Test
void findSolvedQuizByUserID() {
void findSolvedQuizListByUserId() throws UserNotFoundException {
// Given
int userId = 1;
int quizId = 1;
SolvedRequest solvedRequest = new SolvedRequest(userId, quizId);
int userId = userRepository.findByEmail(userService.findByToken().getEmail()).getId();

// When
SolvedDTO solvedDTO = solvedService.findSolvedQuizByUserIdAndQuizId(solvedRequest);
SolvedRequest solvedRequest = new SolvedRequest(userId, TEST_QUIZ_ID);
List<Solved> solvedList = solvedService.findSolvedQuizListByUserId(solvedRequest);

// Then
Assertions.assertNotNull(solvedDTO);
Assertions.assertEquals(1, solvedDTO.getUserId());
Assertions.assertEquals(1, solvedDTO.getQuizId());
Assertions.assertEquals(9, solvedDTO.getCategoryId());
Assertions.assertEquals("EELS 로봇에 관한 다음 설명 중 옳은 것은 무엇입니까?", solvedDTO.getContent());
Assertions.assertEquals("EELS 로봇은 지구의 앨버타주에 있는 애서배스카 빙하에서 개발되었습니다.", solvedDTO.getOptionA());
Assertions.assertEquals("이 로봇은 머리 쪽에 자율주행용 라이다와 카메라를 장착하고 있어서 스스로 움직일 수 있습니다.", solvedDTO.getOptionB());
Assertions.assertEquals("EELS 로봇의 목표는 타이탄 위성에서의 탐사를 위한 것입니다.", solvedDTO.getOptionC());
Assertions.assertEquals("이 로봇은 무게가 50kg이며, 액추에이터는 총 24개 달려 있습니다.", solvedDTO.getOptionD());
Assertions.assertEquals("C",solvedDTO.getAnswer());
Assertions.assertEquals("캐나다 앨버타주의 애서배스카 빙하에서 출발한 NASA의 로봇 탐사 임무에 대한 내용을 담고 있습니다. 이 임무는 미 항공우주국이 개발 중인 외계 생명체 탐사로봇인 EELS(일스)를 사용하여 토성의 위성 엔셀라두스에 보내는 것이 목표입니다. 이 로봇은 지구의 극한 환경에서도 작동할 수 있는 고성능을 갖추고 있으며, 엔셀라두스의 얼음 아래에 있는 바다에서 생명체를 찾는 임무를 수행할 예정입니다.", solvedDTO.getExplanation());
Assertions.assertEquals("https://www.ytn.co.kr/_ln/0105_202404012353120871", solvedDTO.getNewsLink());
Assertions.assertEquals(LocalDate.of(2024, 4, 2), solvedDTO.getDate());
assertNotNull(solvedList);
}

@DisplayName("회원이 지정한 날짜에 맞춘 문제 조회")
@Test
void findCorrectQuizByUserIdAndSolvedDate() {
void findCorrectQuizByUserIdAndSolvedDate() throws UserNotFoundException {
// Given
int userId = 1;
int userId = userRepository.findByEmail(userService.findByToken().getEmail()).getId();
boolean isCorrect = true;
LocalDate solvedDate = LocalDate.parse("2024-04-08");
SolvedResultRequest solvedResultRequest = new SolvedResultRequest(userId, isCorrect, solvedDate);
Expand All @@ -128,7 +107,7 @@ void findCorrectQuizByUserIdAndSolvedDate() {
List<Solved> solvedList = solvedService.findCorrectQuizByUserIdAndSolvedDate(solvedResultRequest);

// Then
Assertions.assertNotNull(solvedList);
assertNotNull(solvedList);
}

@DisplayName("퀴즈 정답 제출시 유저 정보 업데이트 테스트")
Expand Down

0 comments on commit 0a58ad4

Please sign in to comment.