diff --git a/src/main/java/io/wkrzywiec/hexagonal/library/BorrowingDomainConfig.java b/src/main/java/io/wkrzywiec/hexagonal/library/BorrowingDomainConfig.java index c6c1cf3..ff26e6e 100644 --- a/src/main/java/io/wkrzywiec/hexagonal/library/BorrowingDomainConfig.java +++ b/src/main/java/io/wkrzywiec/hexagonal/library/BorrowingDomainConfig.java @@ -2,8 +2,11 @@ package io.wkrzywiec.hexagonal.library; import io.wkrzywiec.hexagonal.library.borrowing.BorrowingFacade; import io.wkrzywiec.hexagonal.library.borrowing.infrastructure.BorrowingDatabaseAdapter; +import io.wkrzywiec.hexagonal.library.borrowing.infrastructure.SpringBorrowingEventPublisherAdapter; import io.wkrzywiec.hexagonal.library.borrowing.ports.incoming.MakeBookAvailable; import io.wkrzywiec.hexagonal.library.borrowing.ports.outgoing.BorrowingDatabase; +import io.wkrzywiec.hexagonal.library.borrowing.ports.outgoing.BorrowingEventPublisher; +import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.core.JdbcTemplate; @@ -17,7 +20,12 @@ public class BorrowingDomainConfig { } @Bean - public MakeBookAvailable makeBookAvailable(BorrowingDatabase database) { - return new BorrowingFacade(database); + public BorrowingEventPublisher borrowingEventPublisher(ApplicationEventPublisher applicationEventPublisher){ + return new SpringBorrowingEventPublisherAdapter(applicationEventPublisher); + } + + @Bean + public MakeBookAvailable makeBookAvailable(BorrowingDatabase database, BorrowingEventPublisher borrowingEventPublisher) { + return new BorrowingFacade(database, borrowingEventPublisher); } } diff --git a/src/main/java/io/wkrzywiec/hexagonal/library/email/model/EmailAddress.java b/src/main/java/io/wkrzywiec/hexagonal/library/email/model/EmailAddress.java index c9b3cc7..49eede0 100644 --- a/src/main/java/io/wkrzywiec/hexagonal/library/email/model/EmailAddress.java +++ b/src/main/java/io/wkrzywiec/hexagonal/library/email/model/EmailAddress.java @@ -17,4 +17,8 @@ public class EmailAddress { } } + + public String getAsString() { + return value; + } } diff --git a/src/test/java/io/wkrzywiec/hexagonal/library/borrowing/BorrowingEventPublisherFake.java b/src/test/java/io/wkrzywiec/hexagonal/library/borrowing/BorrowingEventPublisherFake.java new file mode 100644 index 0000000..31c7bb0 --- /dev/null +++ b/src/test/java/io/wkrzywiec/hexagonal/library/borrowing/BorrowingEventPublisherFake.java @@ -0,0 +1,12 @@ +package io.wkrzywiec.hexagonal.library.borrowing; + +import io.wkrzywiec.hexagonal.library.borrowing.model.BookReservedEvent; +import io.wkrzywiec.hexagonal.library.borrowing.ports.outgoing.BorrowingEventPublisher; + +public class BorrowingEventPublisherFake implements BorrowingEventPublisher { + + @Override + public void publish(BookReservedEvent event) { + + } +} diff --git a/src/test/java/io/wkrzywiec/hexagonal/library/borrowing/BorrowingFacadeTest.java b/src/test/java/io/wkrzywiec/hexagonal/library/borrowing/BorrowingFacadeTest.java index d504a04..5ced4ae 100644 --- a/src/test/java/io/wkrzywiec/hexagonal/library/borrowing/BorrowingFacadeTest.java +++ b/src/test/java/io/wkrzywiec/hexagonal/library/borrowing/BorrowingFacadeTest.java @@ -7,6 +7,7 @@ import io.wkrzywiec.hexagonal.library.borrowing.model.MakeBookAvailableCommand; import io.wkrzywiec.hexagonal.library.borrowing.model.exception.ActiveUserNotFoundException; import io.wkrzywiec.hexagonal.library.borrowing.model.exception.AvailableBookNotFoundExeption; import io.wkrzywiec.hexagonal.library.borrowing.model.exception.TooManyBooksAssignedToUserException; +import io.wkrzywiec.hexagonal.library.borrowing.ports.outgoing.BorrowingEventPublisher; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -19,11 +20,13 @@ public class BorrowingFacadeTest { private BorrowingFacade facade; private InMemoryBorrowingDatabase database; + private BorrowingEventPublisher eventPublisher; @BeforeEach public void init(){ database = new InMemoryBorrowingDatabase(); - facade = new BorrowingFacade(database); + eventPublisher = new BorrowingEventPublisherFake(); + facade = new BorrowingFacade(database, eventPublisher); } @Test diff --git a/src/test/java/io/wkrzywiec/hexagonal/library/email/model/EmailAddressTest.java b/src/test/java/io/wkrzywiec/hexagonal/library/email/model/EmailAddressTest.java new file mode 100644 index 0000000..d15a38a --- /dev/null +++ b/src/test/java/io/wkrzywiec/hexagonal/library/email/model/EmailAddressTest.java @@ -0,0 +1,46 @@ +package io.wkrzywiec.hexagonal.library.email.model; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +public class EmailAddressTest { + + + @Test + @DisplayName("Create correct EmailAddress") + public void givenCorrectEmailString_whenCreateEmailAddress_thenIsCreated(){ + //given + String emailString = "john.doe@test.com"; + + //when + EmailAddress emailAddress = new EmailAddress(emailString); + + //then + assertEquals(emailString, emailAddress.getAsString()); + } + + @Test + @DisplayName("Throw IllegalArgument exception for incorrect email") + public void givenInCorrectEmailString_whenCreateEmailAddress_thenThrowException(){ + //given + String notAnEmailString = "not an email"; + String emailWithoutAt = "tom[at]test.com"; + String emailWithoutDomain = "tom@"; + + //when & then + assertThrows( + IllegalArgumentException.class, + () -> new EmailAddress(notAnEmailString)); + + assertThrows( + IllegalArgumentException.class, + () -> new EmailAddress(emailWithoutAt)); + + assertThrows( + IllegalArgumentException.class, + () -> new EmailAddress(emailWithoutDomain)); + } +}