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