diff --git a/src/main/java/swiss/fihlon/apus/plugin/social/SocialService.java b/src/main/java/swiss/fihlon/apus/plugin/social/SocialService.java index b677379..7809f94 100644 --- a/src/main/java/swiss/fihlon/apus/plugin/social/SocialService.java +++ b/src/main/java/swiss/fihlon/apus/plugin/social/SocialService.java @@ -25,7 +25,6 @@ import org.springframework.scheduling.TaskScheduler; import org.springframework.stereotype.Service; import swiss.fihlon.apus.configuration.Configuration; -import swiss.fihlon.apus.plugin.social.mastodon.MastodonPlugin; import swiss.fihlon.apus.social.Post; import swiss.fihlon.apus.util.HtmlUtil; @@ -59,8 +58,9 @@ public final class SocialService { private List posts = List.of(); public SocialService(@NotNull final TaskScheduler taskScheduler, - @NotNull final Configuration configuration) { - socialPlugin = new MastodonPlugin(configuration); + @NotNull final Configuration configuration, + @NotNull final SocialPlugin socialPlugin) { + this.socialPlugin = socialPlugin; filterLength = configuration.getFilter().length(); filterReplies = configuration.getFilter().replies(); filterSensitive = configuration.getFilter().sensitive(); diff --git a/src/main/java/swiss/fihlon/apus/plugin/social/mastodon/MastodonPlugin.java b/src/main/java/swiss/fihlon/apus/plugin/social/mastodon/MastodonPlugin.java index aa4d96a..611a93f 100644 --- a/src/main/java/swiss/fihlon/apus/plugin/social/mastodon/MastodonPlugin.java +++ b/src/main/java/swiss/fihlon/apus/plugin/social/mastodon/MastodonPlugin.java @@ -20,6 +20,7 @@ import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; import social.bigbone.MastodonClient; import social.bigbone.api.Pageable; import social.bigbone.api.Range; @@ -38,6 +39,7 @@ import static social.bigbone.api.method.TimelineMethods.StatusOrigin.LOCAL_AND_REMOTE; +@Service public final class MastodonPlugin implements SocialPlugin { private static final Logger LOGGER = LoggerFactory.getLogger(MastodonPlugin.class); @@ -57,7 +59,7 @@ public MastodonPlugin(@NotNull final Configuration configuration) { @Override public boolean isEnabled() { - return instance != null && !instance.isEmpty() && hashtag != null && !hashtag.isEmpty(); + return instance != null && !instance.isBlank() && hashtag != null && !hashtag.isBlank(); } @Override diff --git a/src/test/java/swiss/fihlon/apus/plugin/social/mastodon/MastodonConfigTest.java b/src/test/java/swiss/fihlon/apus/plugin/social/mastodon/MastodonConfigTest.java index e1bb87e..2ed0ecb 100644 --- a/src/test/java/swiss/fihlon/apus/plugin/social/mastodon/MastodonConfigTest.java +++ b/src/test/java/swiss/fihlon/apus/plugin/social/mastodon/MastodonConfigTest.java @@ -36,8 +36,8 @@ class MastodonConfigTest { void testMastodonConfig() { final var mastodonConfig = configuration.getMastodon(); assertNotNull(mastodonConfig); - assertEquals("mastodon.social", mastodonConfig.instance()); - assertEquals("java", mastodonConfig.hashtag()); + assertEquals("localhost", mastodonConfig.instance()); + assertEquals("foobar", mastodonConfig.hashtag()); assertTrue(mastodonConfig.imagesEnabled()); assertEquals(1, mastodonConfig.imageLimit()); } diff --git a/src/test/java/swiss/fihlon/apus/plugin/social/mastodon/MastodonPluginTest.java b/src/test/java/swiss/fihlon/apus/plugin/social/mastodon/MastodonPluginTest.java index dca5c9c..41514f6 100644 --- a/src/test/java/swiss/fihlon/apus/plugin/social/mastodon/MastodonPluginTest.java +++ b/src/test/java/swiss/fihlon/apus/plugin/social/mastodon/MastodonPluginTest.java @@ -18,25 +18,62 @@ package swiss.fihlon.apus.plugin.social.mastodon; import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import swiss.fihlon.apus.configuration.Configuration; import swiss.fihlon.apus.social.Post; import java.util.List; +import java.util.stream.Stream; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -@ExtendWith(MockitoExtension.class) class MastodonPluginTest { - @Mock - private Configuration configuration; + private static Stream provideDisabledData() { + return Stream.of( + Arguments.of("", ""), + Arguments.of(" ", " "), + Arguments.of("", "foobar"), + Arguments.of(" ", "foobar"), + Arguments.of("localhost", ""), + Arguments.of("localhost", " ") + ); + } + + @ParameterizedTest + @MethodSource("provideDisabledData") + void isDisabled(final String instance, final String hashtag) { + final var configuration = mock(Configuration.class); + final var mastodonConfig = mock(MastodonConfig.class); + when(configuration.getMastodon()).thenReturn(mastodonConfig); + when(mastodonConfig.instance()).thenReturn(instance); + when(mastodonConfig.hashtag()).thenReturn(hashtag); + + final var mastodonPlugin = new MastodonPlugin(configuration); + assertFalse(mastodonPlugin.isEnabled()); + } + + @Test + void isEnabled() { + final var configuration = mock(Configuration.class); + final var mastodonConfig = mock(MastodonConfig.class); + when(configuration.getMastodon()).thenReturn(mastodonConfig); + when(mastodonConfig.instance()).thenReturn("localhost"); + when(mastodonConfig.hashtag()).thenReturn("foobar"); + + final var mastodonPlugin = new MastodonPlugin(configuration); + assertTrue(mastodonPlugin.isEnabled()); + } @Test void getPosts() { + final var configuration = mock(Configuration.class); when(configuration.getMastodon()).thenReturn( new MastodonConfig("mastodon.social", "java", true, 0)); diff --git a/src/test/resources/application.properties b/src/test/resources/application.properties index 1f8eb81..932495d 100644 --- a/src/test/resources/application.properties +++ b/src/test/resources/application.properties @@ -6,7 +6,7 @@ apus.filter.sensitive=true apus.filter.words=foo, bar, foobar, barfoo apus.doag.eventId=-1 apus.doag.eventApi=file:src/test/resources/DOAG.json?eventId=%d -apus.mastodon.instance=mastodon.social -apus.mastodon.hashtag=java +apus.mastodon.instance=localhost +apus.mastodon.hashtag=foobar apus.mastodon.imagesEnabled=true apus.mastodon.imageLimit=1