Skip to content

Commit 5e4495b

Browse files
committed
test : add various email certification code tests
1 parent e2cd9a9 commit 5e4495b

File tree

3 files changed

+142
-9
lines changed

3 files changed

+142
-9
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package org.benchmarker.bmcontroller.mail.common.factory;
2+
3+
import org.junit.jupiter.api.DisplayName;
4+
import org.junit.jupiter.api.Test;
5+
6+
import static org.assertj.core.api.Assertions.assertThat;
7+
import static org.junit.jupiter.api.Assertions.*;
8+
9+
class EmailVerificationFactoryTest {
10+
11+
@Test
12+
@DisplayName("mail 본문 생성 테스트")
13+
void mailBodyCreate() {
14+
// given
15+
EmailBodyGenerator emailBodyGenerator = new EmailVerificationFactory();
16+
17+
String result = "안녕하세요!\n\n, 회원 가입을 위한 인증 코드를 안내드립니다. 아래의 인증 코드를 입력하여 계정을 활성화하세요:\n\n인증 코드: 123456";
18+
19+
// when
20+
String body = emailBodyGenerator.createBody("123456");
21+
22+
// then
23+
assertThat(body).isEqualTo(result);
24+
}
25+
26+
}

bm-controller/src/test/java/org/benchmarker/bmcontroller/mail/controller/MailControllerTest.java

Lines changed: 114 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,22 @@
33
import com.fasterxml.jackson.databind.ObjectMapper;
44
import jakarta.transaction.Transactional;
55
import org.benchmarker.bmcontroller.common.error.ErrorCode;
6-
import org.benchmarker.bmcontroller.mail.controller.dto.EmailCertificationDto;
7-
import org.benchmarker.bmcontroller.mail.controller.dto.EmailResDto;
6+
import org.benchmarker.bmcontroller.mail.controller.dto.*;
87
import org.benchmarker.bmcontroller.mail.service.impl.MailSenderImpl;
98
import org.benchmarker.bmcontroller.user.service.UserContext;
9+
import org.junit.jupiter.api.AfterEach;
1010
import org.junit.jupiter.api.DisplayName;
1111
import org.junit.jupiter.api.Test;
1212
import org.springframework.beans.factory.annotation.Autowired;
1313
import org.springframework.boot.test.context.SpringBootTest;
1414
import org.springframework.boot.test.mock.mockito.MockBean;
1515
import org.springframework.http.MediaType;
16+
import org.springframework.mock.web.MockHttpSession;
1617
import org.springframework.test.web.servlet.MockMvc;
1718
import org.util.annotations.RestDocsTest;
1819

1920
import java.nio.charset.StandardCharsets;
21+
import java.time.LocalDateTime;
2022

2123
import static org.assertj.core.api.Assertions.assertThat;
2224
import static org.mockito.ArgumentMatchers.any;
@@ -43,6 +45,14 @@ class MailControllerTest {
4345
@MockBean
4446
UserContext userContext;
4547

48+
@MockBean
49+
private MockHttpSession httpSession;
50+
51+
@AfterEach
52+
public void clean(){
53+
httpSession.clearAttributes();
54+
}
55+
4656
@Test
4757
@DisplayName("메일 Send 테스트")
4858
public void mailSender() throws Exception {
@@ -106,4 +116,106 @@ public void mailFormatErrorTest() throws Exception {
106116
.andExpect(jsonPath("$.code").value(ErrorCode.BAD_REQUEST.name()));
107117
}
108118

119+
@Test
120+
@DisplayName("메일 인증 코드 비교 테스트")
121+
public void mailCertification() throws Exception {
122+
123+
//given
124+
EmailCodeDto req = EmailCodeDto.builder()
125+
.code("123456")
126+
.build();
127+
128+
UserSessionInfo userSessionInfo = UserSessionInfo.builder()
129+
.userMail("test@naver.com")
130+
.certificationCode("123456")
131+
.isVerification(false)
132+
.verificationTime(LocalDateTime.now())
133+
.build();
134+
135+
httpSession = new MockHttpSession();
136+
httpSession.setAttribute("userSessionInfo", userSessionInfo);
137+
138+
// when & then
139+
mockMvc.perform(post("/api/mail/certification/code")
140+
.session(httpSession)
141+
.contentType(MediaType.APPLICATION_JSON)
142+
.content(objectMapper.writeValueAsString(req)))
143+
.andDo(print())
144+
.andDo(result -> {
145+
assertThat(result.getResponse().getStatus()).isEqualTo(200);
146+
147+
EmailCodeCertificationResultDto resEmailInfo = objectMapper.readValue(
148+
result.getResponse().getContentAsString(StandardCharsets.UTF_8),
149+
EmailCodeCertificationResultDto.class);
150+
151+
assertThat(resEmailInfo.getStatus()).isEqualTo("success");
152+
assertThat(resEmailInfo.getMessage()).isEqualTo("Authentication successful!!");
153+
});
154+
}
155+
156+
@Test
157+
@DisplayName("session 값이 Null 일 경우 에러 테스트")
158+
public void sessionInfoNullExceptionTest() throws Exception {
159+
160+
//given
161+
EmailCodeDto req = EmailCodeDto.builder()
162+
.code("123456")
163+
.build();
164+
165+
when(httpSession.getAttribute("userSessionInfo")).thenReturn(null);
166+
167+
// when & then
168+
mockMvc.perform(post("/api/mail/certification/code")
169+
.contentType(MediaType.APPLICATION_JSON)
170+
.content(objectMapper.writeValueAsString(req)))
171+
.andDo(print())
172+
.andDo(result -> {
173+
assertThat(result.getResponse().getStatus()).isEqualTo(200);
174+
175+
EmailCodeCertificationResultDto resEmailInfo = objectMapper.readValue(
176+
result.getResponse().getContentAsString(StandardCharsets.UTF_8),
177+
EmailCodeCertificationResultDto.class);
178+
179+
assertThat(resEmailInfo.getStatus()).isEqualTo("fail");
180+
assertThat(resEmailInfo.getMessage()).isEqualTo("Session expired or invalid. Please try again.");
181+
});
182+
}
183+
184+
@Test
185+
@DisplayName("인증 번호가 틀렸을 때 에러 테스트")
186+
public void certificationNumberExceptionTest() throws Exception {
187+
188+
//given
189+
EmailCodeDto req = EmailCodeDto.builder()
190+
.code("123456")
191+
.build();
192+
193+
UserSessionInfo userSessionInfo = UserSessionInfo.builder()
194+
.userMail("test@naver.com")
195+
.certificationCode("123457")
196+
.isVerification(false)
197+
.verificationTime(LocalDateTime.now())
198+
.build();
199+
200+
httpSession = new MockHttpSession();
201+
httpSession.setAttribute("userSessionInfo", userSessionInfo);
202+
203+
// when & then
204+
mockMvc.perform(post("/api/mail/certification/code")
205+
.session(httpSession)
206+
.contentType(MediaType.APPLICATION_JSON)
207+
.content(objectMapper.writeValueAsString(req)))
208+
.andDo(print())
209+
.andDo(result -> {
210+
assertThat(result.getResponse().getStatus()).isEqualTo(200);
211+
212+
EmailCodeCertificationResultDto resEmailInfo = objectMapper.readValue(
213+
result.getResponse().getContentAsString(StandardCharsets.UTF_8),
214+
EmailCodeCertificationResultDto.class);
215+
216+
assertThat(resEmailInfo.getStatus()).isEqualTo("fail");
217+
assertThat(resEmailInfo.getMessage()).isEqualTo("Please enter the authentication number correctly");
218+
});
219+
}
220+
109221
}

bm-controller/src/test/java/org/benchmarker/bmcontroller/mail/service/MailSenderImplTest.java

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package org.benchmarker.bmcontroller.mail.service;
22

3-
import jakarta.mail.MessagingException;
4-
import jakarta.mail.internet.MimeMessage;
53
import jakarta.transaction.Transactional;
64
import org.benchmarker.bmcontroller.mail.common.factory.EmailBodyGenerator;
75
import org.benchmarker.bmcontroller.mail.common.factory.EmailVerificationFactory;
@@ -11,15 +9,12 @@
119
import org.benchmarker.bmcontroller.mail.strategy.IRandomCodeGenerator;
1210
import org.junit.jupiter.api.DisplayName;
1311
import org.junit.jupiter.api.Test;
14-
import org.mockito.InjectMocks;
1512
import org.mockito.Mock;
1613
import org.springframework.boot.test.context.SpringBootTest;
17-
import org.springframework.boot.test.mock.mockito.SpyBean;
18-
import org.springframework.mail.javamail.JavaMailSender;
19-
import org.springframework.mail.javamail.MimeMessageHelper;
2014

2115
import static org.assertj.core.api.Assertions.assertThat;
22-
import static org.mockito.Mockito.*;
16+
import static org.mockito.Mockito.any;
17+
import static org.mockito.Mockito.when;
2318

2419
@Transactional
2520
@SpringBootTest

0 commit comments

Comments
 (0)