From 160b3648137c0acb1293456edbd7183dcaaa1d62 Mon Sep 17 00:00:00 2001 From: WhitePiano Date: Mon, 19 Aug 2024 20:14:44 +0900 Subject: [PATCH] =?UTF-8?q?test:=20=EC=88=98=EC=A0=95=20=EC=82=AC=ED=95=AD?= =?UTF-8?q?=20=EB=B0=98=EC=98=81=20(=EC=9D=B4=EB=A9=94=EC=9D=BC=20?= =?UTF-8?q?=EC=88=98=EC=8B=A0=EC=9E=90=EC=97=90=20=EC=9D=B4=EB=A6=84=20?= =?UTF-8?q?=EC=86=8D=EC=84=B1=20=EC=B6=94=EA=B0=80)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../email/EmailIntegrationTest.java | 41 +++++++++++---- .../email/EmailServiceHelperTest.java | 6 ++- .../application/email/EmailServiceTest.java | 52 ++++++++++++++++--- .../email/EmailTaskFacadeTest.java | 15 +++++- .../controller/email/EmailControllerTest.java | 44 +++++++++++----- .../domain/email/entity/EmailTaskTest.java | 45 +++++++++++----- .../external/email/EmailClientTest.java | 7 ++- 7 files changed, 162 insertions(+), 48 deletions(-) diff --git a/src/test/java/gdsc/konkuk/platformcore/application/email/EmailIntegrationTest.java b/src/test/java/gdsc/konkuk/platformcore/application/email/EmailIntegrationTest.java index bb76402d..687019de 100644 --- a/src/test/java/gdsc/konkuk/platformcore/application/email/EmailIntegrationTest.java +++ b/src/test/java/gdsc/konkuk/platformcore/application/email/EmailIntegrationTest.java @@ -12,6 +12,7 @@ import static org.springframework.test.util.AssertionErrors.fail; import gdsc.konkuk.platformcore.application.email.exceptions.EmailAlreadyProcessedException; +import gdsc.konkuk.platformcore.controller.email.dtos.EmailReceiverInfo; import gdsc.konkuk.platformcore.controller.email.dtos.EmailSendRequest; import gdsc.konkuk.platformcore.domain.email.entity.EmailTask; import gdsc.konkuk.platformcore.domain.email.repository.EmailTaskRepository; @@ -74,11 +75,15 @@ void should_save_task_at_InMemoryTaskRepository() { EmailSendRequest.builder() .subject("subject") .content("content") - .receivers(Set.of("example1.com", "example2.com")) + .receiverInfos(Set.of( + EmailReceiverInfo.builder().email("example1.com").name("guest1").build(), + EmailReceiverInfo.builder().email("example2.com").name("guest2").build())) .sendAt(LocalDateTime.now().plusHours(1)) .build(); + // when EmailTask emailTask = emailTaskFacade.register(emailRequest); + // then assertNotNull("Task should not be null", emailTask); assertNotNull( @@ -94,15 +99,18 @@ void should_send_task_when_time_is_up() throws InterruptedException { EmailSendRequest.builder() .subject("subject") .content("content") - .receivers(Set.of("example1@gmail.com", "example2@gmail.com")) + .receiverInfos(Set.of( + EmailReceiverInfo.builder().email("example1@gmail.com").name("guest1").build(), + EmailReceiverInfo.builder().email("example2@gmail.com").name("guest2").build())) .sendAt(LocalDateTime.now().plusSeconds(5L)) .build(); + // when emailTaskFacade.register(emailRequest); sleep(10000); + // then verify(emailClient).sendEmailToReceivers(any(EmailTask.class)); - assertEquals(0, executor.getQueue().size()); assertEquals(0, taskInMemoryRepository.size()); } @@ -113,7 +121,6 @@ void should_send_task_when_time_is_up() throws InterruptedException { * 2. 작업 수정 요청 * 3. 기존의 작업 취소, 새로운 작업 예약 * */ - @Test @DisplayName("작업 수정 시 스케줄된 작업 취소 후 다시 스케줄") void should_cancel_and_schedule_new_when_update() { @@ -122,21 +129,29 @@ void should_cancel_and_schedule_new_when_update() { EmailSendRequest.builder() .subject("subject") .content("content") - .receivers(Set.of("example1.com", "example2.com")) + .receiverInfos(Set.of( + EmailReceiverInfo.builder().email("example1.com").name("guest1").build(), + EmailReceiverInfo.builder().email("example2.com").name("guest2").build())) .sendAt(LocalDateTime.now().plusHours(1)) .build(); EmailTask emailTask = emailTaskFacade.register(emailRequest); + assertEquals(1, executor.getQueue().size()); assertEquals(1, taskInMemoryRepository.size()); + EmailSendRequest updatedRequest = EmailSendRequest.builder() .subject("subject") .content("content") - .receivers(Set.of("example1.com", "example2.com")) + .receiverInfos(Set.of( + EmailReceiverInfo.builder().email("example1.com").name("guest1").build(), + EmailReceiverInfo.builder().email("example2.com").name("guest2").build())) .sendAt(LocalDateTime.now().plusHours(2)) .build(); + // when emailTaskFacade.update(emailTask.getId(), updatedRequest); + // then assertEquals(1, executor.getQueue().size()); assertNotNull( @@ -158,7 +173,9 @@ void should_cancel_task() { EmailSendRequest.builder() .subject("subject") .content("content") - .receivers(Set.of("example1.com", "example2.com")) + .receiverInfos(Set.of( + EmailReceiverInfo.builder().email("example1.com").name("guest1").build(), + EmailReceiverInfo.builder().email("example2.com").name("guest2").build())) .sendAt(LocalDateTime.now().plusHours(1)) .build(); EmailTask emailTask = emailTaskFacade.register(emailRequest); @@ -167,7 +184,6 @@ void should_cancel_task() { // when emailTaskFacade.cancel(emailTask.getId()); - // then assertEquals(0, executor.getQueue().size()); assertTrue(emailTaskRepository.findById(emailTask.getId()).isEmpty()); @@ -184,7 +200,9 @@ void should_fail_when_cancel_already_processed_task() throws Exception { EmailSendRequest.builder() .subject("subject") .content("content") - .receivers(Set.of("example1.com", "example2.com")) + .receiverInfos(Set.of( + EmailReceiverInfo.builder().email("example1.com").name("guest1").build(), + EmailReceiverInfo.builder().email("example2.com").name("guest2").build())) .sendAt(LocalDateTime.now().plusSeconds(1L)) .build(); @@ -208,11 +226,14 @@ void should_send_discord_message_when_email_sending_error() throws InterruptedEx EmailSendRequest.builder() .subject("subject") .content("content") - .receivers(Set.of("example1.com", "example2.com")) + .receiverInfos(Set.of( + EmailReceiverInfo.builder().email("example1.com").name("guest1").build(), + EmailReceiverInfo.builder().email("example2.com").name("guest2").build())) .sendAt(LocalDateTime.now().plusSeconds(1L)) .build(); doThrow(EmailSendingException.of(GlobalErrorCode.INTERNAL_SERVER_ERROR)) .when(emailClient).sendEmailToReceivers(any()); + //when EmailTask scheduledTask = emailTaskFacade.register(emailRequest); sleep(2000); diff --git a/src/test/java/gdsc/konkuk/platformcore/application/email/EmailServiceHelperTest.java b/src/test/java/gdsc/konkuk/platformcore/application/email/EmailServiceHelperTest.java index cf3f7210..7419eaad 100644 --- a/src/test/java/gdsc/konkuk/platformcore/application/email/EmailServiceHelperTest.java +++ b/src/test/java/gdsc/konkuk/platformcore/application/email/EmailServiceHelperTest.java @@ -6,6 +6,7 @@ import gdsc.konkuk.platformcore.application.email.exceptions.EmailNotFoundException; import gdsc.konkuk.platformcore.domain.email.entity.EmailDetails; +import gdsc.konkuk.platformcore.domain.email.entity.EmailReceiver; import gdsc.konkuk.platformcore.domain.email.entity.EmailReceivers; import gdsc.konkuk.platformcore.domain.email.entity.EmailTask; import gdsc.konkuk.platformcore.domain.email.repository.EmailTaskRepository; @@ -25,7 +26,10 @@ class EmailServiceHelperTest { EmailTask.builder() .id(1L) .emailDetails(new EmailDetails("subject", "content")) - .receivers(new EmailReceivers(Set.of("example1.com", "example2.com"))) + .receivers(new EmailReceivers( + Set.of( + EmailReceiver.builder().email("example1.com").name("guest1").build(), + EmailReceiver.builder().email("example2.com").name("guest2").build()))) .sendAt(LocalDateTime.of(2021, 1, 1, 1, 1)) .build(); diff --git a/src/test/java/gdsc/konkuk/platformcore/application/email/EmailServiceTest.java b/src/test/java/gdsc/konkuk/platformcore/application/email/EmailServiceTest.java index 3d04b124..908ac57b 100644 --- a/src/test/java/gdsc/konkuk/platformcore/application/email/EmailServiceTest.java +++ b/src/test/java/gdsc/konkuk/platformcore/application/email/EmailServiceTest.java @@ -6,8 +6,10 @@ import gdsc.konkuk.platformcore.application.email.exceptions.EmailAlreadyProcessedException; import gdsc.konkuk.platformcore.application.email.exceptions.EmailNotFoundException; +import gdsc.konkuk.platformcore.controller.email.dtos.EmailReceiverInfo; import gdsc.konkuk.platformcore.controller.email.dtos.EmailSendRequest; import gdsc.konkuk.platformcore.domain.email.entity.EmailDetails; +import gdsc.konkuk.platformcore.domain.email.entity.EmailReceiver; import gdsc.konkuk.platformcore.domain.email.entity.EmailReceivers; import gdsc.konkuk.platformcore.domain.email.entity.EmailTask; import gdsc.konkuk.platformcore.domain.email.repository.EmailTaskRepository; @@ -30,7 +32,10 @@ class EmailServiceTest { EmailTask.builder() .id(1L) .emailDetails(new EmailDetails("subject", "content")) - .receivers(new EmailReceivers(Set.of("example1.com", "example2.com"))) + .receivers(new EmailReceivers( + Set.of( + EmailReceiver.builder().email("example1.com").name("guest1").build(), + EmailReceiver.builder().email("example2.com").name("guest2").build()))) .sendAt(LocalDateTime.of(2021, 1, 1, 1, 1)) .build(); @@ -38,15 +43,23 @@ class EmailServiceTest { EmailTask.builder() .id(2L) .emailDetails(new EmailDetails("subject2", "content2")) - .receivers(new EmailReceivers(Set.of("example1.com", "example2.com"))) + .receivers(new EmailReceivers( + Set.of( + EmailReceiver.builder().email("example1.com").name("guest1").build(), + EmailReceiver.builder().email("example2.com").name("guest2").build()))) .sendAt(LocalDateTime.now()) .build(); + List mockEmailTaskList = List.of(mock1, mock2); + private final EmailTask mockAlreadySent = EmailTask.builder() .id(3L) .emailDetails(new EmailDetails("subject3", "content3")) - .receivers(new EmailReceivers(Set.of("example1.com", "example2.com"))) + .receivers(new EmailReceivers( + Set.of( + EmailReceiver.builder().email("example1.com").name("guest1").build(), + EmailReceiver.builder().email("example2.com").name("guest2").build()))) .sendAt(LocalDateTime.now()) .build(); @@ -65,6 +78,7 @@ void should_success_when_getAllTaskAsList() { // when List actual = subject.getAllTaskAsList(); + // then assertEquals(mockEmailTaskList.size(), actual.size()); assertEquals(mockEmailTaskList.get(0).getId(), actual.get(0).getId()); @@ -76,8 +90,10 @@ void should_success_when_getAllTaskAsList() { void should_success_when_getTaskDetails() { // given given(emailTaskRepository.findById(1L)).willReturn(java.util.Optional.of(mock1)); + // when EmailTask actual = subject.getTaskDetails(1L); + // then assertEquals(mock1.getId(), actual.getId()); assertEquals(mock1.getEmailDetails().getSubject(), actual.getEmailDetails().getSubject()); @@ -89,15 +105,18 @@ void should_success_when_getTaskDetails() { @DisplayName("registerTask : 이메일 전송 작업 등록 성공") void should_success_when_register_task() { // given - EmailSendRequest emailRequest = EmailSendRequest.builder() .subject("subject") .content("content") - .receivers(Set.of("example1.com", "example2.com")) + .receiverInfos( + Set.of( + EmailReceiverInfo.builder().email("example1.com").name("guest1").build(), + EmailReceiverInfo.builder().email("example2.com").name("guest2").build())) .sendAt(LocalDateTime.of(2021, 1, 1, 1, 1)) .build(); given(emailTaskRepository.save(any(EmailTask.class))).willReturn(mock1); + // when EmailTask expected = EmailSendRequest.toEntity(emailRequest); EmailTask actual = subject.registerTask(EmailSendRequest.toEntity(emailRequest)); @@ -115,13 +134,18 @@ void should_success_when_update_task() { EmailSendRequest.builder() .subject("subject2") .content("content2") - .receivers(Set.of("example2.com", "example4.com")) + .receiverInfos( + Set.of( + EmailReceiverInfo.builder().email("example2.com").name("guest2").build(), + EmailReceiverInfo.builder().email("example4.com").name("guest4").build())) .sendAt(LocalDateTime.of(2021, 1, 1, 1, 1)) .build(); given(emailTaskRepository.findById(1L)).willReturn(java.util.Optional.of(mock1)); + // when EmailTask expected = EmailSendRequest.toEntity(emailRequest); EmailTask actual = subject.update(1L, emailRequest); + // then assertEquals(expected.getEmailDetails(), actual.getEmailDetails()); assertEquals(expected.getEmailReceivers(), actual.getEmailReceivers()); @@ -135,11 +159,16 @@ void should_fail_when_update_task_already_sent() { EmailSendRequest.builder() .subject("subject2") .content("content2") - .receivers(Set.of("example2.com", "example4.com")) + .receiverInfos( + Set.of( + EmailReceiverInfo.builder().email("example2.com").name("guest2").build(), + EmailReceiverInfo.builder().email("example4.com").name("guest4").build())) .sendAt(LocalDateTime.of(2021, 1, 1, 1, 1)) .build(); + // when when(emailTaskRepository.findById(1L)).thenReturn(Optional.of(mockAlreadySent)); + // then assertThrows(EmailAlreadyProcessedException.class, () -> subject.update(1L, emailRequest)); } @@ -152,11 +181,16 @@ void should_fail_when_update_task_not_found() { EmailSendRequest.builder() .subject("subject2") .content("content2") - .receivers(Set.of("example2.com", "example4.com")) + .receiverInfos( + Set.of( + EmailReceiverInfo.builder().email("example2.com").name("guest2").build(), + EmailReceiverInfo.builder().email("example4.com").name("guest4").build())) .sendAt(LocalDateTime.of(2021, 1, 1, 1, 1)) .build(); + // when when(emailTaskRepository.findById(1L)).thenReturn(Optional.empty()); + // then assertThrows(EmailNotFoundException.class, () -> subject.update(1L, emailRequest)); } @@ -166,9 +200,11 @@ void should_fail_when_update_task_not_found() { void should_success_when_delete_task() { // given given(emailTaskRepository.findById(1L)).willReturn(Optional.of(mock1)); + // when doNothing().when(emailTaskRepository).delete(mock1); subject.delete(1L); + // then verify(emailTaskRepository).delete(mock1); } diff --git a/src/test/java/gdsc/konkuk/platformcore/application/email/EmailTaskFacadeTest.java b/src/test/java/gdsc/konkuk/platformcore/application/email/EmailTaskFacadeTest.java index 4ec528d4..afb617f4 100644 --- a/src/test/java/gdsc/konkuk/platformcore/application/email/EmailTaskFacadeTest.java +++ b/src/test/java/gdsc/konkuk/platformcore/application/email/EmailTaskFacadeTest.java @@ -4,8 +4,10 @@ import static org.mockito.Mockito.when; import static org.mockito.MockitoAnnotations.openMocks; +import gdsc.konkuk.platformcore.controller.email.dtos.EmailReceiverInfo; import gdsc.konkuk.platformcore.controller.email.dtos.EmailSendRequest; import gdsc.konkuk.platformcore.domain.email.entity.EmailDetails; +import gdsc.konkuk.platformcore.domain.email.entity.EmailReceiver; import gdsc.konkuk.platformcore.domain.email.entity.EmailReceivers; import gdsc.konkuk.platformcore.domain.email.entity.EmailTask; import gdsc.konkuk.platformcore.global.scheduler.TaskScheduler; @@ -31,7 +33,10 @@ class EmailTaskFacadeTest { EmailTask.builder() .id(1L) .emailDetails(new EmailDetails("subject", "content")) - .receivers(new EmailReceivers(Set.of("example1.com", "example2.com"))) + .receivers(new EmailReceivers( + Set.of( + EmailReceiver.builder().email("example1.com").name("guest1").build(), + EmailReceiver.builder().email("example2.com").name("guest2").build()))) .sendAt(LocalDateTime.of(2021, 1, 1, 1, 1)) .build(); @@ -49,11 +54,16 @@ void should_success_when_reschedule_task() { EmailSendRequest.builder() .subject("subject") .content("content") - .receivers(Set.of("example1.com", "example2.com")) + .receiverInfos( + Set.of( + EmailReceiverInfo.builder().email("example1.com").name("guest1").build(), + EmailReceiverInfo.builder().email("example2.com").name("guest2").build())) .sendAt(LocalDateTime.of(2021, 1, 1, 1, 1)) .build(); + //when when(emailService.update(1L, emailRequest)).thenReturn(mock1); + //then subject.update(1L, emailRequest); verify(emailTaskScheduler).cancelTask("1"); @@ -64,6 +74,7 @@ void should_success_when_reschedule_task() { void should_success_when_cancel_task() { //given Long emailId = 1L; + //when subject.cancel(1L); diff --git a/src/test/java/gdsc/konkuk/platformcore/controller/email/EmailControllerTest.java b/src/test/java/gdsc/konkuk/platformcore/controller/email/EmailControllerTest.java index e1edb37b..3cd4589f 100644 --- a/src/test/java/gdsc/konkuk/platformcore/controller/email/EmailControllerTest.java +++ b/src/test/java/gdsc/konkuk/platformcore/controller/email/EmailControllerTest.java @@ -17,8 +17,10 @@ import gdsc.konkuk.platformcore.annotation.RestDocsTest; import gdsc.konkuk.platformcore.application.email.EmailService; import gdsc.konkuk.platformcore.application.email.EmailTaskFacade; +import gdsc.konkuk.platformcore.controller.email.dtos.EmailReceiverInfo; import gdsc.konkuk.platformcore.controller.email.dtos.EmailSendRequest; import gdsc.konkuk.platformcore.domain.email.entity.EmailDetails; +import gdsc.konkuk.platformcore.domain.email.entity.EmailReceiver; import gdsc.konkuk.platformcore.domain.email.entity.EmailReceivers; import gdsc.konkuk.platformcore.domain.email.entity.EmailTask; import java.time.LocalDateTime; @@ -72,11 +74,13 @@ void should_success_when_send_email() throws Exception { EmailSendRequest request = EmailSendRequest.builder() .subject("예시 이메일 제목") .content("Html 문자열") - .receivers(Set.of("ex1@gmail.com", "ex2@naver.com")) + .receiverInfos(Set.of( + EmailReceiverInfo.builder().email("ex1@gmail.com").name("guest1").build(), + EmailReceiverInfo.builder().email("ex2@naver.com").name("guest2").build())) .sendAt(LocalDateTime.of(2024, 7, 20, 12, 30)) .build(); EmailDetails emailDetails = request.toEmailDetails(); - EmailReceivers emailReceivers = request.toEmailReceivers(); + EmailReceivers emailReceivers = new EmailReceivers(request.toEmailReceivers()); EmailTask mockTask = new EmailTask(1L, emailDetails, emailReceivers, request.getSendAt()); //when @@ -103,7 +107,8 @@ void should_success_when_send_email() throws Exception { .requestFields( fieldWithPath("subject").type(JsonFieldType.STRING).description("이메일 제목"), fieldWithPath("content").type(JsonFieldType.STRING).description("이메일 내용"), - fieldWithPath("receivers").type(JsonFieldType.ARRAY).description("수신자 이메일 목록"), + fieldWithPath("receiverInfos[].email").type(JsonFieldType.STRING).description("수신자 email"), + fieldWithPath("receiverInfos[].name").type(JsonFieldType.STRING).description("수신자 이름"), fieldWithPath("sendAt").type(JsonFieldType.STRING).description("수정할 이메일 발송 시간") ) .build())) @@ -118,13 +123,16 @@ void should_success_when_update_emailTask() throws Exception { EmailSendRequest request = EmailSendRequest.builder() .subject("예시 이메일 제목 수정") .content("Html 문자열") - .receivers(Set.of("update@gmail.com", "update2@gmail.com", "update3@gmail.com")) + .receiverInfos(Set.of( + EmailReceiverInfo.builder().email("update@gmail.com").name("guest1").build(), + EmailReceiverInfo.builder().email("update2@gmail.com").name("guest2").build(), + EmailReceiverInfo.builder().email("update3@gmail.com").name("guest3").build())) .sendAt(LocalDateTime.of(2024,7,20,12,30)) .build(); //when ResultActions result = mockMvc.perform( - RestDocumentationRequestBuilders.patch("/api/v1/emails/1") + RestDocumentationRequestBuilders.patch("/api/v1/emails/{emailId}", 1L) .contentType(APPLICATION_JSON) .content(objectMapper.writeValueAsString(request)) .with(csrf())); @@ -134,7 +142,7 @@ void should_success_when_update_emailTask() throws Exception { .andDo(print()); result.andDo( - document("emails", + document("update email task", preprocessRequest(prettyPrint()), resource(ResourceSnippetParameters.builder() .tag("email") @@ -142,7 +150,8 @@ void should_success_when_update_emailTask() throws Exception { .requestFields( fieldWithPath("subject").type(JsonFieldType.STRING).description("수정할 이메일 제목"), fieldWithPath("content").type(JsonFieldType.STRING).description("수정할 이메일 내용"), - fieldWithPath("receivers").type(JsonFieldType.ARRAY).description("수정할 수신자 이메일 목록"), + fieldWithPath("receiverInfos[].email").type(JsonFieldType.STRING).description("수신자 email"), + fieldWithPath("receiverInfos[].name").type(JsonFieldType.STRING).description("수신자 이름"), fieldWithPath("sendAt").type(JsonFieldType.STRING).description("수정할 이메일 발송 시간") ).build())) ); @@ -154,7 +163,11 @@ void should_success_when_update_emailTask() throws Exception { void should_success_when_get_all_task() throws Exception { //given EmailDetails emailDetails = new EmailDetails("예시 이메일 제목", "Html 문자열"); - EmailReceivers emailReceivers = new EmailReceivers(Set.of("example1@gmail.com", "example2@gmail.com", "example3@gmail.com")); + EmailReceivers emailReceivers = new EmailReceivers( + Set.of( + EmailReceiver.builder().email("example1@gmail.com").name("guest1").build(), + EmailReceiver.builder().email("example2@gmail.com").name("guest2").build(), + EmailReceiver.builder().email("example3@gmail.com").name("guest3").build())); EmailTask emailTask = new EmailTask(1L, emailDetails, emailReceivers, LocalDateTime.of(2024, 7, 20, 12, 30)); //when @@ -169,7 +182,7 @@ void should_success_when_get_all_task() throws Exception { .andDo(print()); result.andDo( - document("emails/", + document("get all email", preprocessRequest(prettyPrint()), resource(ResourceSnippetParameters.builder() .tag("email") @@ -181,7 +194,8 @@ void should_success_when_get_all_task() throws Exception { fieldWithPath("data.emailTasks").description("이메일 작업 목록"), fieldWithPath("data.emailTasks[].id").description("이메일 작업의 ID (Mock객체에 대해 null일 수 있음.)"), fieldWithPath("data.emailTasks[].subject").description("이메일 제목"), - fieldWithPath("data.emailTasks[].receiver").description("이메일 수신자"), + fieldWithPath("data.emailTasks[].receiverInfos.email").description("수신자 email"), + fieldWithPath("data.emailTasks[].receiverInfos.name").description("수신자 이름"), fieldWithPath("data.emailTasks[].sendAt").description("이메일 발송 예정 시간 (ISO 8601 형식)"), fieldWithPath("data.emailTasks[].isSent").description("이메일 발송 여부") ).build())) @@ -194,7 +208,10 @@ void should_success_when_get_all_task() throws Exception { void should_success_when_get_specific_task() throws Exception { //given EmailDetails emailDetails = new EmailDetails("예시 이메일 제목", "Html 문자열"); - EmailReceivers emailReceivers = new EmailReceivers(Set.of("example@gmail.com", "example@naver.com")); + EmailReceivers emailReceivers = new EmailReceivers( + Set.of( + EmailReceiver.builder().email("example@gmail.com").name("guest1").build(), + EmailReceiver.builder().email("example@naver.com").name("guest2").build())); EmailTask emailTask = new EmailTask(1L, emailDetails, emailReceivers, LocalDateTime.of(2024, 7, 20, 12, 30)); //when @@ -209,7 +226,7 @@ void should_success_when_get_specific_task() throws Exception { .andDo(print()); result.andDo( - document("emails/{emailId}", + document("get email detail", preprocessRequest(prettyPrint()), resource(ResourceSnippetParameters.builder() .tag("email") @@ -220,7 +237,8 @@ void should_success_when_get_specific_task() throws Exception { fieldWithPath("data").description("이메일 전송 작업 내용"), fieldWithPath("data.subject").description("이메일 제목"), fieldWithPath("data.content").description("이메일 내용"), - fieldWithPath("data.receivers").description("이메일 수신자"), + fieldWithPath("data.receiverInfos[].email").description("수신자 email"), + fieldWithPath("data.receiverInfos[].name").description("수신자 이름"), fieldWithPath("data.sendAt").description("이메일 발송 예정 시간 (ISO 8601 형식)") ) .pathParameters( diff --git a/src/test/java/gdsc/konkuk/platformcore/domain/email/entity/EmailTaskTest.java b/src/test/java/gdsc/konkuk/platformcore/domain/email/entity/EmailTaskTest.java index a7d88c2f..175f647b 100644 --- a/src/test/java/gdsc/konkuk/platformcore/domain/email/entity/EmailTaskTest.java +++ b/src/test/java/gdsc/konkuk/platformcore/domain/email/entity/EmailTaskTest.java @@ -20,13 +20,19 @@ void should_success_when_change_email_receivers() { .subject("예시 이메일 제목") .content("Html 문자열") .build()) - .receivers(new EmailReceivers(Set.of("example@gmail.com", "example3@gmail.com"))) + .receivers(new EmailReceivers( + Set.of( + EmailReceiver.builder().email("example@gmail.com").name("guest1").build(), + EmailReceiver.builder().email("example3@gmail.com").name("guest2").build()))) .sendAt(LocalDateTime.of(2021, 10, 10, 10, 10)) .build(); EmailReceivers newReceivers = new EmailReceivers( - Set.of("aaa@gmail.com", "bbb@gmail.com", "ccc@gmail.com")); - //when + Set.of( + EmailReceiver.builder().email("aaa@gmail.com").name("guest a").build(), + EmailReceiver.builder().email("bbb@gmail.com").name("guest b").build(), + EmailReceiver.builder().email("ccc@gmail.com").name("guest c").build())); + //when emailTask.changeEmailReceivers(newReceivers.getReceivers()); //then @@ -79,13 +85,20 @@ void should_success_when_get_overlapping_receivers() { EmailTask emailTask = EmailTask.builder() .emailDetails(EmailDetails.builder().subject("예시 이메일 제목").content("Html 문자열").build()) - .receivers(new EmailReceivers(Set.of("example1.com", "example2.com"))) + .receivers(new EmailReceivers( + Set.of( + EmailReceiver.builder().email("example1.com").name("guest1").build(), + EmailReceiver.builder().email("example2.com").name("guest2").build()))) .sendAt(LocalDateTime.of(2021, 10, 10, 10, 10)) .build(); - Set newEmailReceivers = Set.of("example2.com", "example3.com"); + Set newEmailReceivers = Set.of( + EmailReceiver.builder().email("example2.com").name("guest2").build(), + EmailReceiver.builder().email("example3.com").name("guest3").build()); + // when - List expected = List.of("example2.com"); - List actual = emailTask.filterReceiversInPrevSet(newEmailReceivers); + List expected = List.of(EmailReceiver.builder().email("example2.com").name("guest2").build()); + List actual = emailTask.filterReceiversInPrevSet(newEmailReceivers); + // then assertEquals(actual, expected); } @@ -97,14 +110,22 @@ void should_success_when_get_receivers_not_in_prev_set() { EmailTask emailTask = EmailTask.builder() .emailDetails(EmailDetails.builder().subject("예시 이메일 제목").content("Html 문자열").build()) - .receivers(new EmailReceivers(Set.of("example1.com", "example2.com"))) + .receivers(new EmailReceivers( + Set.of( + EmailReceiver.builder().email("example1.com").name("guest1").build(), + EmailReceiver.builder().email("example2.com").name("guest2").build()))) .sendAt(LocalDateTime.of(2021, 10, 10, 10, 10)) .build(); - Set newEmailReceivers = Set.of("example2.com", "example3.com"); + Set newEmailReceivers = Set.of( + EmailReceiver.builder().email("example2.com").name("guest2").build(), + EmailReceiver.builder().email("example3.com").name("guest3").build()); + // when - List expected = List.of("example3.com"); - List actual = emailTask.filterReceiversNotInPrevSet(newEmailReceivers); + List expected = List.of( + EmailReceiver.builder().email("example3.com").name("guest3").build()); + List actual = emailTask.filterReceiversNotInPrevSet(newEmailReceivers); + // then assertEquals(actual, expected); } -} \ No newline at end of file +} diff --git a/src/test/java/gdsc/konkuk/platformcore/external/email/EmailClientTest.java b/src/test/java/gdsc/konkuk/platformcore/external/email/EmailClientTest.java index 3748723a..e7caf270 100644 --- a/src/test/java/gdsc/konkuk/platformcore/external/email/EmailClientTest.java +++ b/src/test/java/gdsc/konkuk/platformcore/external/email/EmailClientTest.java @@ -5,6 +5,7 @@ import static org.mockito.MockitoAnnotations.*; import gdsc.konkuk.platformcore.domain.email.entity.EmailDetails; +import gdsc.konkuk.platformcore.domain.email.entity.EmailReceiver; import gdsc.konkuk.platformcore.domain.email.entity.EmailReceivers; import gdsc.konkuk.platformcore.domain.email.entity.EmailTask; import gdsc.konkuk.platformcore.external.email.exceptions.EmailSendingException; @@ -38,9 +39,11 @@ void should_fail_when_email_parsing() { EmailTask emailTask = EmailTask.builder() .emailDetails(EmailDetails.builder().subject("예시 이메일 제목").content("Html 문자열").build()) - .receivers(new EmailReceivers(Set.of("aaa@gmail.com"))) + .receivers(new EmailReceivers( + Set.of(EmailReceiver.builder().email("aaa@gmail.com").name("guest1").build()))) .sendAt(LocalDateTime.of(2021, 10, 10, 10, 10)) .build(); + //when when(javaMailSender.createMimeMessage()).thenThrow(new MailParseException("error")); Executable result = () -> emailClient.sendEmailToReceivers(emailTask); @@ -48,4 +51,4 @@ void should_fail_when_email_parsing() { //then assertThrowsExactly(EmailSendingException.class, result); } -} \ No newline at end of file +}