import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import static org.assertj.core.api.Assertions.*;
class EmailValidatorTest {
@ParameterizedTest
@ValueSource(strings = {
"user@example.com",
"test.email+tag@sub.domain.co.uk",
"a@b.c"
})
void validate_validEmail_returnsSuccess(String email) {
var result = EmailValidator.validate(email);
assertThat(result).isEqualTo(EmailValidator.ValidationResult.success());
}
@ParameterizedTest
@ValueSource(strings = {"", " "})
void validate_emptyOrWhitespace_returnsEmptyError(String email) {
var result = EmailValidator.validate(email);
var expected = EmailValidator.ValidationResult.error("Email не может быть пустым");
assertThat(result).isEqualTo(expected);
}
@Test
void validate_nullInput_returnsEmptyError() {
var result = EmailValidator.validate(null);
var expected = EmailValidator.ValidationResult.error("Email не может быть пустым");
assertThat(result).isEqualTo(expected);
}
@ParameterizedTest
@ValueSource(strings = {
"missing-at.com",
"double@@example.com",
"@domain.com"
})
void validate_invalidAtCount_returnsAtError(String email) {
var result = EmailValidator.validate(email);
var expected = EmailValidator.ValidationResult.error(
"Email должен содержать ровно один символ '@'"
);
assertThat(result).isEqualTo(expected);
}
@ParameterizedTest
@ValueSource(strings = {
"user@",
"user@.com",
"user@com.",
"user@com"
})
void validate_invalidDomain_returnsDomainError(String email) {
var result = EmailValidator.validate(email);
var expected = EmailValidator.ValidationResult.error(
"Некорректный домен: должен содержать точку и не начинаться/заканчиваться ею"
);
assertThat(result).isEqualTo(expected);
}
@Test
void validate_emptyLocalPart_returnsLocalError() {
var result = EmailValidator.validate("@example.com");
var expected = EmailValidator.ValidationResult.error(
"Локальная часть email не может быть пустой"
);
assertThat(result).isEqualTo(expected);
}
}
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import static org.assertj.core.api.Assertions.*;
class EmailValidatorTest {
@ParameterizedTest
@ValueSource(strings = {
"user@example.com",
"test.email+tag@sub.domain.co.uk",
"a@b.c"
})
void validate_validEmail_returnsSuccess(String email) {
var result = EmailValidator.validate(email);
assertThat(result).isEqualTo(EmailValidator.ValidationResult.success());
}
@ParameterizedTest
@ValueSource(strings = {"", " "})
void validate_emptyOrWhitespace_returnsEmptyError(String email) {
var result = EmailValidator.validate(email);
var expected = EmailValidator.ValidationResult.error("Email не может быть пустым");
assertThat(result).isEqualTo(expected);
}
@Test
void validate_nullInput_returnsEmptyError() {
var result = EmailValidator.validate(null);
var expected = EmailValidator.ValidationResult.error("Email не может быть пустым");
assertThat(result).isEqualTo(expected);
}
@ParameterizedTest
@ValueSource(strings = {
"missing-at.com",
"double@@example.com",
"@domain.com"
})
void validate_invalidAtCount_returnsAtError(String email) {
var result = EmailValidator.validate(email);
var expected = EmailValidator.ValidationResult.error(
"Email должен содержать ровно один символ '@'"
);
assertThat(result).isEqualTo(expected);
}
@ParameterizedTest
@ValueSource(strings = {
"user@",
"user@.com",
"user@com.",
"user@com"
})
void validate_invalidDomain_returnsDomainError(String email) {
var result = EmailValidator.validate(email);
var expected = EmailValidator.ValidationResult.error(
"Некорректный домен: должен содержать точку и не начинаться/заканчиваться ею"
);
assertThat(result).isEqualTo(expected);
}
@Test
void validate_emptyLocalPart_returnsLocalError() {
var result = EmailValidator.validate("@example.com");
var expected = EmailValidator.ValidationResult.error(
"Локальная часть email не может быть пустой"
);
assertThat(result).isEqualTo(expected);
}
}