package Funssion.Inforum.domain.member.dto.request;
import jakarta.validation.ConstraintViolation;
import jakarta.validation.Validation;
import jakarta.validation.Validator;
import jakarta.validation.ValidatorFactory;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import java.util.Set;
class NonSocialMemberLoginDtoTest {
private static ValidatorFactory factory;
private static Validator validator;
@BeforeAll
public static void init() {
factory = Validation.buildDefaultValidatorFactory();
validator = factory.getValidator();
}
@AfterAll
public static void close() {
factory.close();
}
@Test
@DisplayName("로그인 양식 유효성 검사")
public void loginValidMember() {
Set<ConstraintViolation<NonSocialMemberLoginDto>> violations = validator.validate(new NonSocialMemberLoginDto("test@gmail", "a4567!")); // 유효하지 않은 경우 violations 값을 가지고 있다.
System.out.println("violations = " + violations);
}
}
테스트코드로 로그인 양식에 대한 검증을 하던 중에, "test@gmail" 이라는 이메일을 넣어보았다.
근데, 어떠한 violation도 없었다. 분명 유효하지 않은 이메일인데..하던 중,
@Email 어노테이션이 생각보다 문제가 많다는 사실을 찾아보면서 알게되었다.
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class NonSocialMemberLoginDto {
@NotBlank
@Email(message="이메일 주소 양식을 확인해주세요")
@JsonProperty("user_email")
private String userEmail; // 소셜 로그인 이메일, 개인 인증 이메일 둘다 user_email에 속함
@NotBlank
@JsonProperty("user_pw")
private String userPw;
}
다음 @Email어노테이션은 구멍이 많다고 한다.
그래서 정규표현식으로 바꾸기로 결정했다.
테스트코드는 여러모로 좋은 것 같다.
물론 예외의 경우를 테스트케이스에 잘 넣는다면!
package Funssion.Inforum.domain.member.dto.request;
import com.fasterxml.jackson.annotation.JsonProperty;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class NonSocialMemberLoginDto {
@NotBlank
@Pattern(regexp="^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])+[.][a-zA-Z]{2,3}$", message="이메일 주소 양식을 확인해주세요")
@JsonProperty("user_email")
private String userEmail; // 소셜 로그인 이메일, 개인 인증 이메일 둘다 user_email에 속함
@NotBlank
@JsonProperty("user_pw")
private String userPw;
}
정규표현식으로 +[.][[a-zA_Z]{2,3}
을 넣어서 '.'도 추가시켰다.
정보에 감사드립니다.