diff --git a/pom.xml b/pom.xml index 37bb6189..39f80878 100644 --- a/pom.xml +++ b/pom.xml @@ -255,7 +255,7 @@ org.slf4j slf4j-api - 1.7.12 + 1.7.30 @@ -483,5 +483,11 @@ 2.0.11-beta test + + org.mock-server + mockserver-junit-rule + 5.11.1 + test + diff --git a/src/test/java/com/commafeed/backend/service/PubSubServiceTest.java b/src/test/java/com/commafeed/backend/service/PubSubServiceTest.java new file mode 100644 index 00000000..7ea4707c --- /dev/null +++ b/src/test/java/com/commafeed/backend/service/PubSubServiceTest.java @@ -0,0 +1,104 @@ +package com.commafeed.backend.service; + +import com.commafeed.CommaFeedConfiguration; +import com.commafeed.backend.feed.FeedQueues; +import com.commafeed.backend.model.Feed; +import org.apache.http.HttpHeaders; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Answers; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.mockserver.client.MockServerClient; +import org.mockserver.junit.MockServerRule; +import org.mockserver.model.MediaType; + +import static org.mockito.Mockito.*; +import static org.mockserver.model.HttpRequest.request; +import static org.mockserver.model.HttpResponse.response; + +@RunWith(MockitoJUnitRunner.class) +public class PubSubServiceTest { + + PubSubService underTest; + + @Rule + public MockServerRule mockServerRule = new MockServerRule(this, 22441); + public MockServerClient mockServerClient; + + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + CommaFeedConfiguration config; + + @Mock + FeedQueues queues; + + @Mock + Feed feed; + + + @Before + public void init() { + underTest = new PubSubService(config, queues); + + // setup feed + feed = mock(Feed.class); + when(feed.getPushHub()).thenReturn("http://localhost:22441/hub"); + when(feed.getPushTopic()).thenReturn("foo"); + + // setup config + when(config.getApplicationSettings().getPublicUrl()).thenReturn("http://localhost:22441/hub"); + } + + @Test + public void subscribe_200() { + // Arrange + mockServerClient + .when(request().withMethod("POST")) + .respond(response().withStatusCode(200)); + + // Act + underTest.subscribe(feed); + + // Assert + mockServerClient.verify(request() + .withContentType(MediaType.APPLICATION_FORM_URLENCODED) + .withHeader(HttpHeaders.USER_AGENT, "CommaFeed") + .withMethod("POST") + .withPath("/hub")); + verify(feed, never()).setPushTopic(anyString()); + verifyZeroInteractions(queues); + } + + @Test + public void subscribe_400_withPushpressError() { + // Arrange + mockServerClient + .when(request().withMethod("POST")) + .respond(response().withStatusCode(400).withBody(" is value is not allowed. You may only subscribe to")); + + // Act + underTest.subscribe(feed); + + // Assert + verify(feed).setPushTopic(anyString()); + verify(queues).giveBack(feed); + } + + @Test + public void subscribe_400_withoutPushpressError() { + // Arrange + mockServerClient + .when(request().withMethod("POST")) + .respond(response().withStatusCode(400)); + + // Act + underTest.subscribe(feed); + + // Assert + verify(feed, never()).setPushTopic(anyString()); + verifyZeroInteractions(queues); + } + +} \ No newline at end of file