Add test for DI constructability of SoneDownloader
authorDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Thu, 1 Feb 2018 17:55:43 +0000 (18:55 +0100)
committerDavid ‘Bombe’ Roden <bombe@pterodactylus.net>
Thu, 1 Feb 2018 19:33:43 +0000 (20:33 +0100)
src/main/java/net/pterodactylus/sone/core/SoneDownloader.java
src/main/java/net/pterodactylus/sone/core/SoneDownloaderImpl.java
src/test/java/net/pterodactylus/sone/core/SoneDownloaderTest.java
src/test/java/net/pterodactylus/sone/web/AllPagesTest.kt

index be0be02..039faad 100644 (file)
@@ -5,12 +5,15 @@ import net.pterodactylus.util.service.Service;
 
 import freenet.keys.FreenetURI;
 
+import com.google.inject.ImplementedBy;
+
 /**
  * Downloads and parses Sone and {@link Core#updateSone(Sone) updates the
  * core}.
  *
  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
  */
+@ImplementedBy(SoneDownloaderImpl.class)
 public interface SoneDownloader extends Service {
 
        void addSone(Sone sone);
index a859106..d3f23ed 100644 (file)
@@ -29,6 +29,8 @@ import java.util.Set;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import javax.inject.Inject;
+
 import net.pterodactylus.sone.core.FreenetInterface.Fetched;
 import net.pterodactylus.sone.data.Sone;
 import net.pterodactylus.sone.data.Sone.SoneStatus;
@@ -75,6 +77,7 @@ public class SoneDownloaderImpl extends AbstractService implements SoneDownloade
         * @param freenetInterface
         *              The Freenet interface
         */
+       @Inject
        public SoneDownloaderImpl(Core core, FreenetInterface freenetInterface) {
                this(core, freenetInterface, new SoneParser(core));
        }
index 9043974..be697b3 100644 (file)
@@ -6,8 +6,10 @@ import static java.util.concurrent.TimeUnit.DAYS;
 import static net.pterodactylus.sone.data.Sone.SoneStatus.downloading;
 import static net.pterodactylus.sone.data.Sone.SoneStatus.idle;
 import static net.pterodactylus.sone.data.Sone.SoneStatus.unknown;
+import static net.pterodactylus.sone.web.AllPagesTestKt.getBaseInjector;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.notNullValue;
 import static org.mockito.ArgumentCaptor.forClass;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
@@ -193,4 +195,9 @@ public class SoneDownloaderTest {
                return new Fetched(uri, fetchResult);
        }
 
+       @Test
+       public void soneDownloaderCanBeCreatedByDependencyInjection() {
+           assertThat(getBaseInjector().getInstance(SoneDownloader.class), notNullValue());
+       }
+
 }
index da05926..9e395f2 100644 (file)
@@ -1,6 +1,8 @@
 package net.pterodactylus.sone.web
 
 import com.google.inject.Guice.createInjector
+import net.pterodactylus.sone.core.Core
+import net.pterodactylus.sone.core.FreenetInterface
 import net.pterodactylus.sone.main.SonePlugin.PluginHomepage
 import net.pterodactylus.sone.main.SonePlugin.PluginVersion
 import net.pterodactylus.sone.main.SonePlugin.PluginYear
@@ -34,6 +36,8 @@ class AllPagesTest {
 
 val baseInjector by lazy {
        createInjector(
+                       Core::class.isProvidedByMock(),
+                       FreenetInterface::class.isProvidedByMock(),
                        Template::class.isProvidedByMock(),
                        WebInterface::class.isProvidedByMock()
        )!!