From b41ffa22f24a76558d1fdab7c130ba21f0ca476d Mon Sep 17 00:00:00 2001 From: Xisco Bibiloni Date: Sun, 24 Apr 2022 22:10:54 +0200 Subject: [PATCH 01/10] feat:Add Lombok library and refactor get method names --- src/mooc/build.gradle | 1 + ...SendPushToSubscribersOnVideoPublished.java | 4 +-- .../tv/codely/mooc/video/domain/Video.java | 4 +++ .../mooc/video/domain/VideoDescription.java | 5 ++++ .../mooc/video/domain/VideoPublished.java | 29 +++---------------- .../codely/mooc/video/domain/VideoTitle.java | 5 ++++ 6 files changed, 21 insertions(+), 27 deletions(-) diff --git a/src/mooc/build.gradle b/src/mooc/build.gradle index 986f161..d7f0a04 100644 --- a/src/mooc/build.gradle +++ b/src/mooc/build.gradle @@ -1,3 +1,4 @@ dependencies { + implementation 'org.projectlombok:lombok:1.18.20' compile project(":src:shared") } diff --git a/src/mooc/main/tv/codely/mooc/notification/application/create/SendPushToSubscribersOnVideoPublished.java b/src/mooc/main/tv/codely/mooc/notification/application/create/SendPushToSubscribersOnVideoPublished.java index 9ec26c4..a12ae86 100644 --- a/src/mooc/main/tv/codely/mooc/notification/application/create/SendPushToSubscribersOnVideoPublished.java +++ b/src/mooc/main/tv/codely/mooc/notification/application/create/SendPushToSubscribersOnVideoPublished.java @@ -14,8 +14,8 @@ public void consume(VideoPublished event) { System.out.println( String.format( "Hey! There is a new video with title <%s> and description <%s>", - event.title(), - event.description() + event.getTitle(), + event.getDescription() ) ); } diff --git a/src/mooc/main/tv/codely/mooc/video/domain/Video.java b/src/mooc/main/tv/codely/mooc/video/domain/Video.java index 425a8ec..70c9c9c 100644 --- a/src/mooc/main/tv/codely/mooc/video/domain/Video.java +++ b/src/mooc/main/tv/codely/mooc/video/domain/Video.java @@ -1,7 +1,11 @@ package tv.codely.mooc.video.domain; +import lombok.Builder; +import lombok.Data; import tv.codely.shared.domain.AggregateRoot; +@Builder +@Data public final class Video extends AggregateRoot { private final VideoTitle title; private final VideoDescription description; diff --git a/src/mooc/main/tv/codely/mooc/video/domain/VideoDescription.java b/src/mooc/main/tv/codely/mooc/video/domain/VideoDescription.java index 55c431b..8fffe7a 100644 --- a/src/mooc/main/tv/codely/mooc/video/domain/VideoDescription.java +++ b/src/mooc/main/tv/codely/mooc/video/domain/VideoDescription.java @@ -1,5 +1,10 @@ package tv.codely.mooc.video.domain; +import lombok.Builder; +import lombok.Data; + +@Builder +@Data public final class VideoDescription { private final String value; diff --git a/src/mooc/main/tv/codely/mooc/video/domain/VideoPublished.java b/src/mooc/main/tv/codely/mooc/video/domain/VideoPublished.java index e3b2193..37c7f1b 100644 --- a/src/mooc/main/tv/codely/mooc/video/domain/VideoPublished.java +++ b/src/mooc/main/tv/codely/mooc/video/domain/VideoPublished.java @@ -1,7 +1,11 @@ package tv.codely.mooc.video.domain; +import lombok.Builder; +import lombok.Data; import tv.codely.shared.domain.DomainEvent; +@Builder +@Data public final class VideoPublished implements DomainEvent { private static final String FULL_QUALIFIED_EVENT_NAME = "codelytv.video.video.event.1.video.published"; @@ -17,29 +21,4 @@ public String fullQualifiedEventName() { return FULL_QUALIFIED_EVENT_NAME; } - public String title() { - return title; - } - - public String description() { - return description; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - VideoPublished that = (VideoPublished) o; - - if (!title.equals(that.title)) return false; - return description.equals(that.description); - } - - @Override - public int hashCode() { - int result = title.hashCode(); - result = 31 * result + description.hashCode(); - return result; - } } diff --git a/src/mooc/main/tv/codely/mooc/video/domain/VideoTitle.java b/src/mooc/main/tv/codely/mooc/video/domain/VideoTitle.java index 05ecc83..3875cb9 100644 --- a/src/mooc/main/tv/codely/mooc/video/domain/VideoTitle.java +++ b/src/mooc/main/tv/codely/mooc/video/domain/VideoTitle.java @@ -1,5 +1,10 @@ package tv.codely.mooc.video.domain; +import lombok.Builder; +import lombok.Data; + +@Builder +@Data public final class VideoTitle { private final String value; From 4f579f23b4efa4d20634734f7796bd603f13adae Mon Sep 17 00:00:00 2001 From: Xisco Bibiloni Date: Mon, 25 Apr 2022 20:13:08 +0200 Subject: [PATCH 02/10] feat:Add new libraries to log4j, mapstructs and jackson --- src/mooc/build.gradle | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/mooc/build.gradle b/src/mooc/build.gradle index d7f0a04..d3a5200 100644 --- a/src/mooc/build.gradle +++ b/src/mooc/build.gradle @@ -1,4 +1,20 @@ +ext { + mapstructVersion = "1.5.0.RC1" +} + dependencies { implementation 'org.projectlombok:lombok:1.18.20' + implementation "org.mapstruct:mapstruct:${mapstructVersion}" + implementation 'org.apache.logging.log4j:log4j-api:2.17.2' + implementation 'org.apache.logging.log4j:log4j-core:2.17.2' + implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.13.2.2' compile project(":src:shared") } + +tasks.withType(JavaCompile) { + options.compilerArgs = [ + '-Amapstruct.suppressGeneratorTimestamp=true', + '-Amapstruct.suppressGeneratorVersionInfoComment=true', + '-Amapstruct.unmappedTargetPolicy=ERROR' + ] +} From d245fa018b39eaaf011f56717128111a01a3a734 Mon Sep 17 00:00:00 2001 From: Xisco Bibiloni Date: Mon, 25 Apr 2022 20:14:10 +0200 Subject: [PATCH 03/10] feat:Add new Port to manage videos and publish a new video --- .../mooc/video/domain/port/VideoManagementPort.java | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 src/mooc/main/tv/codely/mooc/video/domain/port/VideoManagementPort.java diff --git a/src/mooc/main/tv/codely/mooc/video/domain/port/VideoManagementPort.java b/src/mooc/main/tv/codely/mooc/video/domain/port/VideoManagementPort.java new file mode 100644 index 0000000..10867fe --- /dev/null +++ b/src/mooc/main/tv/codely/mooc/video/domain/port/VideoManagementPort.java @@ -0,0 +1,9 @@ +package tv.codely.mooc.video.domain.port; + +import tv.codely.mooc.video.domain.Video; + +public interface VideoManagementPort { + + void publish(final Video video); + +} From c3362928dbc21ec8627b63df27fe44a38d2a247e Mon Sep 17 00:00:00 2001 From: Xisco Bibiloni Date: Sun, 8 May 2022 10:40:09 +0200 Subject: [PATCH 04/10] feat:Configure unit test environment --- src/mooc/build.gradle | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/mooc/build.gradle b/src/mooc/build.gradle index d3a5200..a0b1609 100644 --- a/src/mooc/build.gradle +++ b/src/mooc/build.gradle @@ -2,12 +2,27 @@ ext { mapstructVersion = "1.5.0.RC1" } +test { + useJUnitPlatform() +} + dependencies { - implementation 'org.projectlombok:lombok:1.18.20' + compileOnly 'org.projectlombok:lombok:1.18.24' + annotationProcessor 'org.projectlombok:lombok:1.18.24' + testCompileOnly 'org.projectlombok:lombok:1.18.24' + testAnnotationProcessor 'org.projectlombok:lombok:1.18.24' implementation "org.mapstruct:mapstruct:${mapstructVersion}" + annotationProcessor "org.mapstruct:mapstruct-processor:${mapstructVersion}" + testAnnotationProcessor "org.mapstruct:mapstruct-processor:${mapstructVersion}" implementation 'org.apache.logging.log4j:log4j-api:2.17.2' implementation 'org.apache.logging.log4j:log4j-core:2.17.2' implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.13.2.2' + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' + testImplementation 'org.mockito:mockito-core:2.21.0' + testImplementation 'org.mockito:mockito-junit-jupiter:2.23.0' + testImplementation 'org.assertj:assertj-core:3.22.0' + implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.0' compile project(":src:shared") } From 25eab8ebc2f137e13b3792530df187df4941e8ac Mon Sep 17 00:00:00 2001 From: Xisco Bibiloni Date: Sun, 8 May 2022 10:41:33 +0200 Subject: [PATCH 05/10] refactor:Configure lombok --- .../tv/codely/mooc/video/domain/Video.java | 11 ++++----- .../codely/mooc/video/domain/VideoTitle.java | 24 ++----------------- 2 files changed, 7 insertions(+), 28 deletions(-) diff --git a/src/mooc/main/tv/codely/mooc/video/domain/Video.java b/src/mooc/main/tv/codely/mooc/video/domain/Video.java index 70c9c9c..42eeeea 100644 --- a/src/mooc/main/tv/codely/mooc/video/domain/Video.java +++ b/src/mooc/main/tv/codely/mooc/video/domain/Video.java @@ -1,24 +1,23 @@ package tv.codely.mooc.video.domain; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; +import lombok.EqualsAndHashCode; import tv.codely.shared.domain.AggregateRoot; @Builder @Data +@EqualsAndHashCode(callSuper = false) +@AllArgsConstructor public final class Video extends AggregateRoot { private final VideoTitle title; private final VideoDescription description; - private Video(VideoTitle title, VideoDescription description) { - this.title = title; - this.description = description; - } - public static Video publish(VideoTitle title, VideoDescription description) { var video = new Video(title, description); - var videoCreated = new VideoPublished(title.value(), description.value()); + var videoCreated = new VideoPublished(title.getValue(), description.getValue()); video.record(videoCreated); diff --git a/src/mooc/main/tv/codely/mooc/video/domain/VideoTitle.java b/src/mooc/main/tv/codely/mooc/video/domain/VideoTitle.java index 3875cb9..8736d4f 100644 --- a/src/mooc/main/tv/codely/mooc/video/domain/VideoTitle.java +++ b/src/mooc/main/tv/codely/mooc/video/domain/VideoTitle.java @@ -1,33 +1,13 @@ package tv.codely.mooc.video.domain; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @Builder @Data +@AllArgsConstructor public final class VideoTitle { private final String value; - public VideoTitle(String value) { - this.value = value; - } - - public String value() { - return value; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - VideoTitle that = (VideoTitle) o; - - return value.equals(that.value); - } - - @Override - public int hashCode() { - return value.hashCode(); - } } From c82ef5253fd10d3e37f7e7d45b4b9bc02874878a Mon Sep 17 00:00:00 2001 From: Xisco Bibiloni Date: Sun, 8 May 2022 10:42:16 +0200 Subject: [PATCH 06/10] refactor:Configure lombok --- .../mooc/video/domain/VideoDescription.java | 26 +++---------------- 1 file changed, 3 insertions(+), 23 deletions(-) diff --git a/src/mooc/main/tv/codely/mooc/video/domain/VideoDescription.java b/src/mooc/main/tv/codely/mooc/video/domain/VideoDescription.java index 8fffe7a..78b7464 100644 --- a/src/mooc/main/tv/codely/mooc/video/domain/VideoDescription.java +++ b/src/mooc/main/tv/codely/mooc/video/domain/VideoDescription.java @@ -1,33 +1,13 @@ package tv.codely.mooc.video.domain; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @Builder @Data -public final class VideoDescription { +@AllArgsConstructor +public class VideoDescription { private final String value; - public VideoDescription(final String value) { - this.value = value; - } - - public String value() { - return value; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - VideoDescription that = (VideoDescription) o; - - return value.equals(that.value); - } - - @Override - public int hashCode() { - return value.hashCode(); - } } From 667146ecfe2f9cbe80d47787da58290b7d9a16ed Mon Sep 17 00:00:00 2001 From: Xisco Bibiloni Date: Sun, 8 May 2022 10:43:51 +0200 Subject: [PATCH 07/10] refactor:Add new custom runtime exception --- .../video/domain/exception/RuntimeServiceException.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/mooc/main/tv/codely/mooc/video/domain/exception/RuntimeServiceException.java diff --git a/src/mooc/main/tv/codely/mooc/video/domain/exception/RuntimeServiceException.java b/src/mooc/main/tv/codely/mooc/video/domain/exception/RuntimeServiceException.java new file mode 100644 index 0000000..af50307 --- /dev/null +++ b/src/mooc/main/tv/codely/mooc/video/domain/exception/RuntimeServiceException.java @@ -0,0 +1,8 @@ +package tv.codely.mooc.video.domain.exception; + +public class RuntimeServiceException extends RuntimeException { + + public RuntimeServiceException(final String message) { + super(message); + } +} From 49d924ae9c9fa229f67be0461f67a5769cc2796b Mon Sep 17 00:00:00 2001 From: Xisco Bibiloni Date: Sun, 8 May 2022 10:46:52 +0200 Subject: [PATCH 08/10] feat:Add new Port to publish video in "CustomMeta" --- .../mooc/video/application/publish/VideoPublisher.java | 7 ++++++- .../video/application/publish/VideoPublisherShould.java | 4 +++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/mooc/main/tv/codely/mooc/video/application/publish/VideoPublisher.java b/src/mooc/main/tv/codely/mooc/video/application/publish/VideoPublisher.java index cf8225a..52212ae 100644 --- a/src/mooc/main/tv/codely/mooc/video/application/publish/VideoPublisher.java +++ b/src/mooc/main/tv/codely/mooc/video/application/publish/VideoPublisher.java @@ -3,13 +3,16 @@ import tv.codely.mooc.video.domain.Video; import tv.codely.mooc.video.domain.VideoDescription; import tv.codely.mooc.video.domain.VideoTitle; +import tv.codely.mooc.video.domain.port.VideoManagementPort; import tv.codely.shared.domain.EventBus; public final class VideoPublisher { private final EventBus eventBus; + private final VideoManagementPort videoManagementPort; - public VideoPublisher(EventBus eventBus) { + public VideoPublisher(EventBus eventBus, VideoManagementPort videoManagementPort) { this.eventBus = eventBus; + this.videoManagementPort = videoManagementPort; } public void publish(String rawTitle, String rawDescription) { @@ -19,5 +22,7 @@ public void publish(String rawTitle, String rawDescription) { final var video = Video.publish(title, description); eventBus.publish(video.pullDomainEvents()); + + videoManagementPort.publish(video); } } diff --git a/src/mooc/test/tv/codely/mooc/video/application/publish/VideoPublisherShould.java b/src/mooc/test/tv/codely/mooc/video/application/publish/VideoPublisherShould.java index 7f47296..0a6dfa4 100644 --- a/src/mooc/test/tv/codely/mooc/video/application/publish/VideoPublisherShould.java +++ b/src/mooc/test/tv/codely/mooc/video/application/publish/VideoPublisherShould.java @@ -2,6 +2,7 @@ import org.junit.jupiter.api.Test; import tv.codely.mooc.video.domain.VideoPublished; +import tv.codely.mooc.video.domain.port.VideoManagementPort; import tv.codely.shared.domain.EventBus; import java.util.List; @@ -13,7 +14,8 @@ final class VideoPublisherShould { @Test void publish_the_video_published_domain_event() { final EventBus eventBus = mock(EventBus.class); - final var videoPublisher = new VideoPublisher(eventBus); + final VideoManagementPort videoManagementPort = mock(VideoManagementPort.class); + final var videoPublisher = new VideoPublisher(eventBus, videoManagementPort); final var videoTitle = "\uD83C\uDF89 New YouTube.com/CodelyTV video title"; final var videoDescription = "This should be the video description \uD83D\uDE42"; From 6631f82df631f87a8e1440e6aba5a40e4bc23b84 Mon Sep 17 00:00:00 2001 From: Xisco Bibiloni Date: Sun, 8 May 2022 10:48:00 +0200 Subject: [PATCH 09/10] feat:Implement videomanagementport, the adapter --- .../VideoPublisherCliController.java | 5 +- .../adapter/MetaVideoManagementAdapter.java | 91 +++++++++++++++++++ .../dto/youtube/VideoResourceDTO.java | 17 ++++ .../MetaVideoManagementAdapterTest.java | 64 +++++++++++++ 4 files changed, 176 insertions(+), 1 deletion(-) create mode 100644 src/mooc/main/tv/codely/mooc/video/infrastructure/adapter/MetaVideoManagementAdapter.java create mode 100644 src/mooc/main/tv/codely/mooc/video/infrastructure/dto/youtube/VideoResourceDTO.java create mode 100644 src/mooc/test/tv/codely/mooc/video/infrastructure/adapter/MetaVideoManagementAdapterTest.java diff --git a/src/mooc/main/tv/codely/mooc/video/infrastructure/VideoPublisherCliController.java b/src/mooc/main/tv/codely/mooc/video/infrastructure/VideoPublisherCliController.java index 864eb8e..d6e5766 100644 --- a/src/mooc/main/tv/codely/mooc/video/infrastructure/VideoPublisherCliController.java +++ b/src/mooc/main/tv/codely/mooc/video/infrastructure/VideoPublisherCliController.java @@ -2,6 +2,8 @@ import tv.codely.mooc.notification.application.create.SendPushToSubscribersOnVideoPublished; import tv.codely.mooc.video.application.publish.VideoPublisher; +import tv.codely.mooc.video.domain.port.VideoManagementPort; +import tv.codely.mooc.video.infrastructure.adapter.MetaVideoManagementAdapter; import tv.codely.shared.application.DomainEventSubscriber; import tv.codely.shared.domain.EventBus; import tv.codely.shared.infrastructure.bus.ReactorEventBus; @@ -14,7 +16,8 @@ public static void main(String[] args) { new SendPushToSubscribersOnVideoPublished() ); final EventBus eventBus = new ReactorEventBus(subscribers); - final var videoPublisher = new VideoPublisher(eventBus); + final VideoManagementPort videoManagementPort = new MetaVideoManagementAdapter(); + final var videoPublisher = new VideoPublisher(eventBus, videoManagementPort); final var videoTitle = "\uD83C\uDF89 New YouTube.com/CodelyTV video title"; final var videoDescription = "This should be the video description \uD83D\uDE42"; diff --git a/src/mooc/main/tv/codely/mooc/video/infrastructure/adapter/MetaVideoManagementAdapter.java b/src/mooc/main/tv/codely/mooc/video/infrastructure/adapter/MetaVideoManagementAdapter.java new file mode 100644 index 0000000..62da786 --- /dev/null +++ b/src/mooc/main/tv/codely/mooc/video/infrastructure/adapter/MetaVideoManagementAdapter.java @@ -0,0 +1,91 @@ +package tv.codely.mooc.video.infrastructure.adapter; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.Setter; +import lombok.extern.log4j.Log4j2; +import tv.codely.mooc.video.domain.Video; +import tv.codely.mooc.video.domain.exception.RuntimeServiceException; +import tv.codely.mooc.video.domain.port.VideoManagementPort; +import tv.codely.mooc.video.infrastructure.dto.youtube.VideoResourceDTO; + +import java.io.IOException; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.Objects; + +@Log4j2 +public class MetaVideoManagementAdapter implements VideoManagementPort { + + private static final String YOUTUBE_UPLOAD_URL = "https://youtube.googleapis.com/youtube/v3/videos?part=requestPArt&autoLevels=true&uploadType=mp4&key=TokeApiKey"; + private static final String YOUTUBE_API_ACCESS_TOKEN = "BearerTokeApiKey"; + private static final String HEADER_AUTHORIZATION = "Authorization"; + private static final String HEADER_ACCEPT = "Accept"; + private static final String HEADER_CONTENT_TYPE = "Content-Type"; + private static final String POST_METHOD = "POST"; + private static final String APPLICATION_JSON = "application/json"; + + @Setter + private HttpURLConnection connection; + + @Override + public void publish(final Video video) { + + validateParameters(video); + + try { + final URL url = new URL(YOUTUBE_UPLOAD_URL); + connection = getHttpURLConnection(url); + final String bodyJson = retrieveBodyJson(video); + + injectBodyInConnection(connection, bodyJson); + + if (connection.getResponseCode() != 200) { + log.error("Failed : HTTP error code : " + connection.getResponseCode()); + throw new RuntimeServiceException("Error connection"); + } + + connection.disconnect(); + } catch (IOException e) { + log.error(e.getMessage(), e); + } + } + + private void validateParameters(final Video video) { + if (Objects.isNull(video) + || Objects.isNull(video.getTitle()) + || Objects.isNull(video.getDescription())) { + throw new RuntimeServiceException("The video is empty"); + } + } + + private void injectBodyInConnection(final HttpURLConnection conn, final String bodyJson) throws IOException { + OutputStream os = conn.getOutputStream(); + os.write(bodyJson.getBytes()); + os.flush(); + } + + private String retrieveBodyJson(final Video video) throws JsonProcessingException { + final VideoResourceDTO videoResourceDTO = mapVideoToVideResource(video); + return new ObjectMapper().writeValueAsString(videoResourceDTO); + } + + private VideoResourceDTO mapVideoToVideResource(final Video video) { + return VideoResourceDTO.builder() + .fileDetails(VideoResourceDTO.FileDetailsDTO.builder() + .name(video.getTitle().getValue()) + .container(video.getDescription().getValue()) + .build()) + .build(); + } + + private HttpURLConnection getHttpURLConnection(final URL url) throws IOException { + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod(POST_METHOD); + conn.setRequestProperty(HEADER_AUTHORIZATION, YOUTUBE_API_ACCESS_TOKEN); + conn.setRequestProperty(HEADER_ACCEPT, APPLICATION_JSON); + conn.setRequestProperty(HEADER_CONTENT_TYPE, APPLICATION_JSON); + return conn; + } +} diff --git a/src/mooc/main/tv/codely/mooc/video/infrastructure/dto/youtube/VideoResourceDTO.java b/src/mooc/main/tv/codely/mooc/video/infrastructure/dto/youtube/VideoResourceDTO.java new file mode 100644 index 0000000..1ef3a34 --- /dev/null +++ b/src/mooc/main/tv/codely/mooc/video/infrastructure/dto/youtube/VideoResourceDTO.java @@ -0,0 +1,17 @@ +package tv.codely.mooc.video.infrastructure.dto.youtube; + +import lombok.Builder; +import lombok.Data; + +@Data +@Builder +public class VideoResourceDTO { + private FileDetailsDTO fileDetails; + + @Data + @Builder + public static class FileDetailsDTO { + private String name; + private String container; + } +} diff --git a/src/mooc/test/tv/codely/mooc/video/infrastructure/adapter/MetaVideoManagementAdapterTest.java b/src/mooc/test/tv/codely/mooc/video/infrastructure/adapter/MetaVideoManagementAdapterTest.java new file mode 100644 index 0000000..5d0b376 --- /dev/null +++ b/src/mooc/test/tv/codely/mooc/video/infrastructure/adapter/MetaVideoManagementAdapterTest.java @@ -0,0 +1,64 @@ +package tv.codely.mooc.video.infrastructure.adapter; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import tv.codely.mooc.video.domain.exception.RuntimeServiceException; + +import java.net.HttpURLConnection; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +@ExtendWith(MockitoExtension.class) +class MetaVideoManagementAdapterTest { + + @InjectMocks + private MetaVideoManagementAdapter metaVideoManagementAdapterTested; + + @Mock + private HttpURLConnection httpUrlConnectionMock; + + @BeforeEach + public void setUp() { + this.httpUrlConnectionMock.setDoOutput(true); + } + + @Test + @DisplayName("should return error when video parameter is empty") + void should_return_error_when_video_parameter_is_empty() { + + // Arrange + + // Action - Assert + assertThatThrownBy(() -> metaVideoManagementAdapterTested.publish(null)) + .isInstanceOf(RuntimeServiceException.class) + .hasMessage("The video is empty"); + + } + +// +// @Test +// @DisplayName("should return error connection when client not response") +// void should_return_error_connection_when_client_not_response() throws IOException { +// +// // Arrange +// this.httpUrlConnectionMock.setDoOutput(true); +// metaVideoManagementAdapterTested.setConnection(httpUrlConnectionMock); +// final Video videoMock = Video.builder() +// .title(VideoTitle.builder().value("title").build()) +// .description(VideoDescription.builder().value("description").build()) +// .build(); +// when(httpUrlConnectionMock.getResponseCode()).thenReturn(509); +// +// // Action - Assert +// assertThatThrownBy(() -> metaVideoManagementAdapterTested.publish(videoMock)) +// .isInstanceOf(RuntimeServiceException.class) +// .hasMessage("Error connection"); +// +// // Assert +// } +} From 1e93088dc531cddec4ccf45e975b989eae2bef18 Mon Sep 17 00:00:00 2001 From: Xisco Bibiloni Date: Sun, 8 May 2022 16:57:19 +0200 Subject: [PATCH 10/10] feat:Add comments and rename class --- .../codely/mooc/video/application/publish/VideoPublisher.java | 1 + ...VideoPublisherShould.java => VideoPublisherShouldTest.java} | 3 ++- .../infrastructure/adapter/MetaVideoManagementAdapterTest.java | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) rename src/mooc/test/tv/codely/mooc/video/application/publish/{VideoPublisherShould.java => VideoPublisherShouldTest.java} (96%) diff --git a/src/mooc/main/tv/codely/mooc/video/application/publish/VideoPublisher.java b/src/mooc/main/tv/codely/mooc/video/application/publish/VideoPublisher.java index 52212ae..d90aae9 100644 --- a/src/mooc/main/tv/codely/mooc/video/application/publish/VideoPublisher.java +++ b/src/mooc/main/tv/codely/mooc/video/application/publish/VideoPublisher.java @@ -23,6 +23,7 @@ public void publish(String rawTitle, String rawDescription) { eventBus.publish(video.pullDomainEvents()); + // Publicar el vídeo sobre META, aunque no sea algo realmente funcional es para llevar a cabo el ejercicio videoManagementPort.publish(video); } } diff --git a/src/mooc/test/tv/codely/mooc/video/application/publish/VideoPublisherShould.java b/src/mooc/test/tv/codely/mooc/video/application/publish/VideoPublisherShouldTest.java similarity index 96% rename from src/mooc/test/tv/codely/mooc/video/application/publish/VideoPublisherShould.java rename to src/mooc/test/tv/codely/mooc/video/application/publish/VideoPublisherShouldTest.java index 0a6dfa4..8b06329 100644 --- a/src/mooc/test/tv/codely/mooc/video/application/publish/VideoPublisherShould.java +++ b/src/mooc/test/tv/codely/mooc/video/application/publish/VideoPublisherShouldTest.java @@ -10,7 +10,8 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; -final class VideoPublisherShould { +final class VideoPublisherShouldTest { + @Test void publish_the_video_published_domain_event() { final EventBus eventBus = mock(EventBus.class); diff --git a/src/mooc/test/tv/codely/mooc/video/infrastructure/adapter/MetaVideoManagementAdapterTest.java b/src/mooc/test/tv/codely/mooc/video/infrastructure/adapter/MetaVideoManagementAdapterTest.java index 5d0b376..cdc71bb 100644 --- a/src/mooc/test/tv/codely/mooc/video/infrastructure/adapter/MetaVideoManagementAdapterTest.java +++ b/src/mooc/test/tv/codely/mooc/video/infrastructure/adapter/MetaVideoManagementAdapterTest.java @@ -40,6 +40,8 @@ void should_return_error_when_video_parameter_is_empty() { } +// // TODO - Acabar de reviar como hacer le mock del HttpUrlConnection para poder probar el código, imposible llevar a cabo el TDD +// // // // @Test // @DisplayName("should return error connection when client not response")