1313import dmu .dasom .api .domain .email .enums .MailType ;
1414import dmu .dasom .api .domain .email .service .EmailService ;
1515import dmu .dasom .api .domain .google .service .GoogleApiService ;
16+ import dmu .dasom .api .domain .recruit .dto .ResultCheckRequestDto ;
17+ import dmu .dasom .api .domain .recruit .dto .ResultCheckResponseDto ;
18+ import dmu .dasom .api .domain .recruit .enums .ResultCheckType ;
19+ import dmu .dasom .api .domain .recruit .service .RecruitServiceImpl ;
1620import dmu .dasom .api .global .dto .PageResponse ;
1721import jakarta .mail .MessagingException ;
1822import org .junit .jupiter .api .BeforeEach ;
@@ -44,6 +48,9 @@ class ApplicantServiceTest {
4448 @ Mock
4549 private EmailService emailService ;
4650
51+ @ Mock
52+ private RecruitServiceImpl recruitService ;
53+
4754 @ InjectMocks
4855 private ApplicantServiceImpl applicantService ;
4956
@@ -61,6 +68,7 @@ void apply_success() {
6168 // given
6269 ApplicantCreateRequestDto request = mock (ApplicantCreateRequestDto .class );
6370 when (request .getStudentNo ()).thenReturn ("20210000" );
71+ when (recruitService .isRecruitmentActive ()).thenReturn (true );
6472
6573 Applicant mockApplicant = Applicant .builder ()
6674 .name ("홍길동" )
@@ -100,6 +108,7 @@ void apply_fail() {
100108 ApplicantCreateRequestDto request = mock (ApplicantCreateRequestDto .class );
101109 when (request .getStudentNo ()).thenReturn ("20210000" );
102110 when (applicantRepository .findByStudentNo ("20210000" )).thenReturn (Optional .of (mock (Applicant .class )));
111+ when (recruitService .isRecruitmentActive ()).thenReturn (true );
103112 when (request .getIsOverwriteConfirmed ()).thenReturn (false );
104113
105114 // when
@@ -120,6 +129,7 @@ void apply_overwrite() {
120129 when (request .getStudentNo ()).thenReturn ("20210000" );
121130 Applicant existingApplicant = mock (Applicant .class ); // 기존 Applicant 객체 모킹
122131 when (applicantRepository .findByStudentNo ("20210000" )).thenReturn (Optional .of (existingApplicant ));
132+ when (recruitService .isRecruitmentActive ()).thenReturn (true );
123133 when (request .getIsOverwriteConfirmed ()).thenReturn (true );
124134
125135 // when
@@ -334,6 +344,7 @@ void apply_overwrite_withGoogleSheets() {
334344 // given
335345 ApplicantCreateRequestDto request = mock (ApplicantCreateRequestDto .class );
336346 when (request .getStudentNo ()).thenReturn ("20210000" );
347+ when (recruitService .isRecruitmentActive ()).thenReturn (true );
337348
338349 Applicant existingApplicant = mock (Applicant .class ); // 기존 Applicant 객체 모킹
339350 when (applicantRepository .findByStudentNo ("20210000" )).thenReturn (Optional .of (existingApplicant ));
@@ -348,4 +359,89 @@ void apply_overwrite_withGoogleSheets() {
348359 verify (googleApiService ).updateSheet (List .of (existingApplicant ));
349360 }
350361
362+ @ Test
363+ @ DisplayName ("합격 결과 확인 - 성공" )
364+ void checkResult_success () {
365+ // given
366+ LocalDateTime pastDateTime = LocalDateTime .now ().minusHours (1 );
367+ when (recruitService .getResultAnnouncementSchedule (ResultCheckType .DOCUMENT_PASS )).thenReturn (pastDateTime );
368+
369+ ResultCheckRequestDto request = mock (ResultCheckRequestDto .class );
370+ when (request .getType ()).thenReturn (ResultCheckType .DOCUMENT_PASS );
371+ when (request .getStudentNo ()).thenReturn ("20210000" );
372+ when (request .getContactLastDigit ()).thenReturn ("1234" );
373+
374+ Applicant applicant = mock (Applicant .class );
375+ when (applicantRepository .findByStudentNo ("20210000" )).thenReturn (Optional .of (applicant ));
376+
377+ ApplicantDetailsResponseDto responseDto = mock (ApplicantDetailsResponseDto .class );
378+ when (responseDto .getContact ()).thenReturn ("010-5678-1234" );
379+ when (responseDto .getStatus ()).thenReturn (ApplicantStatus .DOCUMENT_PASSED );
380+ when (responseDto .getStudentNo ()).thenReturn ("20210000" );
381+ when (responseDto .getName ()).thenReturn ("TestName" );
382+
383+ when (applicant .toApplicantDetailsResponse ()).thenReturn (responseDto );
384+
385+ when (recruitService .generateReservationCode ("20210000" , "1234" )).thenReturn ("202100001234" );
386+
387+ // when
388+ ResultCheckResponseDto result = applicantService .checkResult (request );
389+
390+ // then
391+ assertNotNull (result );
392+ assertTrue (result .getIsPassed ());
393+ verify (recruitService ).getResultAnnouncementSchedule (ResultCheckType .DOCUMENT_PASS );
394+ verify (applicantRepository ).findByStudentNo ("20210000" );
395+ }
396+
397+ @ Test
398+ @ DisplayName ("합격 결과 확인 - 실패 (확인 기간 아님)" )
399+ void checkResult_fail_inquiryPeriod () {
400+ // given
401+ LocalDateTime futureDateTime = LocalDateTime .now ().plusHours (1 );
402+ when (recruitService .getResultAnnouncementSchedule (ResultCheckType .DOCUMENT_PASS )).thenReturn (futureDateTime );
403+
404+ ResultCheckRequestDto request = mock (ResultCheckRequestDto .class );
405+ when (request .getType ()).thenReturn (ResultCheckType .DOCUMENT_PASS );
406+
407+ // when
408+ CustomException exception = assertThrows (CustomException .class , () -> {
409+ applicantService .checkResult (request );
410+ });
411+
412+ // then
413+ assertEquals (ErrorCode .INVALID_INQUIRY_PERIOD , exception .getErrorCode ());
414+ verify (recruitService ).getResultAnnouncementSchedule (ResultCheckType .DOCUMENT_PASS );
415+ }
416+
417+ @ Test
418+ @ DisplayName ("합격 결과 확인 - 실패 (연락처 뒷자리 불일치)" )
419+ void checkResult_fail_contactMismatch () {
420+ // given
421+ LocalDateTime pastDateTime = LocalDateTime .now ().minusHours (1 );
422+ when (recruitService .getResultAnnouncementSchedule (ResultCheckType .DOCUMENT_PASS )).thenReturn (pastDateTime );
423+
424+ ResultCheckRequestDto request = mock (ResultCheckRequestDto .class );
425+ when (request .getType ()).thenReturn (ResultCheckType .DOCUMENT_PASS );
426+ when (request .getStudentNo ()).thenReturn ("20210000" );
427+ when (request .getContactLastDigit ()).thenReturn ("0000" );
428+
429+ Applicant applicant = mock (Applicant .class );
430+ when (applicantRepository .findByStudentNo ("20210000" )).thenReturn (Optional .of (applicant ));
431+
432+ ApplicantDetailsResponseDto responseDto = mock (ApplicantDetailsResponseDto .class );
433+ when (responseDto .getContact ()).thenReturn ("010-5678-1234" );
434+ when (applicant .toApplicantDetailsResponse ()).thenReturn (responseDto );
435+
436+ // when
437+ CustomException exception = assertThrows (CustomException .class , () -> {
438+ applicantService .checkResult (request );
439+ });
440+
441+ // then
442+ assertEquals (ErrorCode .ARGUMENT_NOT_VALID , exception .getErrorCode ());
443+ verify (recruitService ).getResultAnnouncementSchedule (ResultCheckType .DOCUMENT_PASS );
444+ verify (applicantRepository ).findByStudentNo ("20210000" );
445+ }
446+
351447}
0 commit comments