diff --git a/spring-di-4/src/main/java/com/baeldung/fieldinjection/EmailService.java b/spring-di-4/src/main/java/com/baeldung/fieldinjection/EmailService.java new file mode 100644 index 0000000000..2c28b5baf4 --- /dev/null +++ b/spring-di-4/src/main/java/com/baeldung/fieldinjection/EmailService.java @@ -0,0 +1,21 @@ +package com.baeldung.fieldinjection; + +import org.springframework.stereotype.Service; + +@Service +public class EmailService { + + public static final String INVALID_EMAIL = "Invalid email"; + private final EmailValidator emailValidator; + + public EmailService(final EmailValidator emailValidator) { + this.emailValidator = emailValidator; + } + + public void process(String email) { + if (!emailValidator.isValid(email)) { + throw new IllegalArgumentException(INVALID_EMAIL); + } + // ... + } +} \ No newline at end of file diff --git a/spring-di-4/src/main/java/com/baeldung/fieldinjection/EmailValidator.java b/spring-di-4/src/main/java/com/baeldung/fieldinjection/EmailValidator.java new file mode 100644 index 0000000000..884a139781 --- /dev/null +++ b/spring-di-4/src/main/java/com/baeldung/fieldinjection/EmailValidator.java @@ -0,0 +1,17 @@ +package com.baeldung.fieldinjection; + +import org.springframework.stereotype.Component; + +import java.util.regex.Pattern; + +@Component +public class EmailValidator { + + private static final String REGEX_PATTERN = "^(.+)@(\\S+)$"; + + public boolean isValid(final String email) { + return Pattern.compile(REGEX_PATTERN) + .matcher(email) + .matches(); + } +} diff --git a/spring-di-4/src/test/java/com/baeldung/fieldinjection/EmailServiceUnitTest.java b/spring-di-4/src/test/java/com/baeldung/fieldinjection/EmailServiceUnitTest.java new file mode 100644 index 0000000000..b2bcbad811 --- /dev/null +++ b/spring-di-4/src/test/java/com/baeldung/fieldinjection/EmailServiceUnitTest.java @@ -0,0 +1,38 @@ +package com.baeldung.fieldinjection; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mockito; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class EmailServiceUnitTest { + + private EmailValidator emailValidator; + + private EmailService emailService; + + @BeforeEach + public void setup() { + this.emailValidator = Mockito.mock(EmailValidator.class); + this.emailService = new EmailService(emailValidator); + } + + @Test + void givenInvalidEmail_whenProcess_thenThrowException() { + String email = "testbaeldung.com"; + + when(emailValidator.isValid(email)).thenReturn(false); + + IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> emailService.process(email)); + + assertNotNull(exception); + assertEquals(EmailService.INVALID_EMAIL, exception.getMessage()); + } +}