패스트캠퍼스
패스트캠퍼스 환급챌린지 43일차 : 9개 도메인 프로젝트로 끝내는 백엔드 웹 개발 (Java/Spring) 초격차 패키지 Online 강의 후기
이태우(1990년)
2025. 4. 16. 23:08
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
공부 시작 시각 인증
수강 인증 사진
DataLoader.java
package org.fastcampus.acceptance.utils;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import org.fastcampus.auth.application.dto.*;
import org.fastcampus.user.application.dto.*;
import org.springframework.stereotype.Component;
import static org.fastcampus.acceptance.steps.SignUpAcceptanceSteps.*;
import static org.fastcampus.acceptance.steps.UserAcceptanceSteps.*;
@Component
public class DataLoader {
@PersistenceContext
private EntityManager entityManager;
public void loadData() {
for (int i = 1; i <= 3; i++) {
createUser("user" + i + "@test.com");
}
followUser(new FollowUserRequestDto(1L, 2L));
followUser(new FollowUserRequestDto(1L, 3L));
}
public String getEmailToken(String email) {
return entityManager.createNativeQuery("SELECT token FROM community_email_verification WHERE email = ?", String.class)
.setParameter(1, email)
.getSingleResult()
.toString();
}
public boolean isEmailVerified(String email) {
return entityManager.createQuery("SELECT isVerified FROM EmailVerificationEntity WHERE email = :email", Boolean.class)
.setParameter("email", email)
.getSingleResult();
}
public Long getUserId(String email) {
return entityManager.createQuery("SELECT userId FROM UserAuthEntity WHERE email = :email", Long.class)
.setParameter("email", email)
.getSingleResult();
}
public void createUser(String email) {
requestSendEmail(new SendEmailRequestDto(email));
String token = this.getEmailToken(email);
requestVerifyEmail(email, token);
registerUser(new CreateUserAuthRequestDto(email, "password", "name", "USER", null));
}
}
AcceptanceTestTemplate.java
package org.fastcampus.acceptance.utils;
import org.junit.jupiter.api.BeforeEach;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.test.context.ActiveProfiles;
@ActiveProfiles("test")
@SpringBootTest(webEnvironment = WebEnvironment.DEFINED_PORT)
public class AcceptanceTestTemplate {
@Autowired
private DatabaseCleanUp cleanUp;
@Autowired
private DataLoader loader;
@BeforeEach
public void init() {
cleanUp.execute();
loader.loadData();
}
protected void cleanUp() {
cleanUp.execute();
}
protected String getEmailToken(String email) {
return loader.getEmailToken(email);
}
protected boolean isEmailVerified(String email) {
return loader.isEmailVerified(email);
}
protected Long getUserId(String email) {
return loader.getUserId(email);
}
protected void createUser(String email) {
loader.createUser(email);
}
}
LoginAcceptanceSteps.java
package org.fastcampus.acceptance.steps;
import io.restassured.RestAssured;
import org.fastcampus.auth.application.dto.LoginRequestDto;
import org.fastcampus.auth.application.dto.UserAccessTokenResponseDto;
import org.springframework.http.MediaType;
public class LoginAcceptanceSteps {
public static String requestLoginGetToken(LoginRequestDto dto) {
UserAccessTokenResponseDto res = RestAssured
.given()
.body(dto)
.contentType(MediaType.APPLICATION_JSON_VALUE)
.when()
.post("/login")
.then()
.extract()
.jsonPath()
.getObject("value", UserAccessTokenResponseDto.class);
return res.accessToken();
}
public static Integer requestLoginGetResponseCode(LoginRequestDto dto) {
return RestAssured
.given()
.body(dto)
.contentType(MediaType.APPLICATION_JSON_VALUE)
.when()
.post("/login")
.then()
.extract()
.jsonPath().getInt("code");
}
}
LoginAcceptanceTest.java
package org.fastcampus.acceptance.auth;
import org.fastcampus.acceptance.utils.*;
import org.fastcampus.auth.application.dto.LoginRequestDto;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.fastcampus.acceptance.steps.LoginAcceptanceSteps.*;
import static org.junit.jupiter.api.Assertions.*;
class LoginAcceptanceTest extends AcceptanceTestTemplate {
private final String email = "email@email.com";
@BeforeEach
void setUp() {
this.cleanUp();
this.createUser(email);
}
@Test
void givenEmailAndPassword_whenLogin_thenReturnToken() {
// given
LoginRequestDto dto = new LoginRequestDto(email, "password");
// when
String token = requestLoginGetToken(dto);
// then
assertNotNull(token);
}
@Test
void givenEmailAndWrongPassword_whenLogin_thenReturnCodeNot200() {
// given
LoginRequestDto dto = new LoginRequestDto(email, "wrong-password");
// when
Integer code = requestLoginGetResponseCode(dto);
// then
assertEquals(400, code);
}
}