X-Git-Url: https://git.pterodactylus.net/?p=Sone.git;a=blobdiff_plain;f=src%2Ftest%2Fjava%2Fnet%2Fpterodactylus%2Fsone%2Fcore%2FSoneInserterTest.java;h=31d7b6bec10bbe660ba41f8a81536bb7351db92e;hp=c44ced600ce91eae3c661d5a12c8ab7fcdddf6f1;hb=b9fc06f5bf20b1c0d5e7c5e9b49e87581a843ee7;hpb=b2b444224f9ad00d75bf58d07efb554dbdcb4226 diff --git a/src/test/java/net/pterodactylus/sone/core/SoneInserterTest.java b/src/test/java/net/pterodactylus/sone/core/SoneInserterTest.java index c44ced6..31d7b6b 100644 --- a/src/test/java/net/pterodactylus/sone/core/SoneInserterTest.java +++ b/src/test/java/net/pterodactylus/sone/core/SoneInserterTest.java @@ -1,27 +1,29 @@ package net.pterodactylus.sone.core; -import static com.google.common.base.Optional.absent; -import static com.google.common.base.Optional.of; -import static com.google.common.util.concurrent.MoreExecutors.sameThreadExecutor; +import static com.google.common.io.ByteStreams.toByteArray; +import static com.google.common.util.concurrent.MoreExecutors.directExecutor; +import static java.lang.System.currentTimeMillis; import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.containsInAnyOrder; +import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.is; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyString; -import static org.mockito.Matchers.argThat; -import static org.mockito.Matchers.eq; +import static org.hamcrest.Matchers.nullValue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doAnswer; -import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import static org.mockito.hamcrest.MockitoHamcrest.argThat; +import java.io.IOException; import java.util.HashMap; +import java.util.Map; -import net.pterodactylus.sone.core.SoneInserter.InsertInformation; +import net.pterodactylus.sone.core.SoneInserter.ManifestCreator; import net.pterodactylus.sone.core.event.InsertionDelayChangedEvent; import net.pterodactylus.sone.core.event.SoneEvent; import net.pterodactylus.sone.core.event.SoneInsertAbortedEvent; @@ -29,9 +31,12 @@ import net.pterodactylus.sone.core.event.SoneInsertedEvent; import net.pterodactylus.sone.core.event.SoneInsertingEvent; import net.pterodactylus.sone.data.Album; import net.pterodactylus.sone.data.Sone; +import net.pterodactylus.sone.main.SonePlugin; import freenet.keys.FreenetURI; +import freenet.support.api.ManifestElement; +import com.google.common.base.Charsets; import com.google.common.base.Optional; import com.google.common.eventbus.AsyncEventBus; import com.google.common.eventbus.EventBus; @@ -43,8 +48,6 @@ import org.mockito.stubbing.Answer; /** * Unit test for {@link SoneInserter} and its subclasses. - * - * @author David ‘Bombe’ Roden */ public class SoneInserterTest { @@ -56,36 +59,23 @@ public class SoneInserterTest { public void setupCore() { UpdateChecker updateChecker = mock(UpdateChecker.class); when(core.getUpdateChecker()).thenReturn(updateChecker); - when(core.getSone(anyString())).thenReturn(Optional.absent()); + when(core.getSone(anyString())).thenReturn(null); } @Test public void insertionDelayIsForwardedToSoneInserter() { - EventBus eventBus = new AsyncEventBus(sameThreadExecutor()); + EventBus eventBus = new AsyncEventBus(directExecutor()); eventBus.register(new SoneInserter(core, eventBus, freenetInterface, "SoneId")); eventBus.post(new InsertionDelayChangedEvent(15)); assertThat(SoneInserter.getInsertionDelay().get(), is(15)); } - @Test - /* this test is hilariously bad. */ - public void manifestEntriesAreCreated() { - FreenetURI insertUri = mock(FreenetURI.class); - String fingerprint = "fingerprint"; - Sone sone = createSone(insertUri, fingerprint); - SoneInserter soneInserter = new SoneInserter(core, eventBus, freenetInterface, "SoneId"); - InsertInformation insertInformation = soneInserter.new InsertInformation(sone); - HashMap manifestEntries = insertInformation.generateManifestEntries(); - assertThat(manifestEntries.keySet(), containsInAnyOrder("index.html", "sone.xml")); - assertThat(insertInformation.getFingerprint(), is(fingerprint)); - } - private Sone createSone(FreenetURI insertUri, String fingerprint) { Sone sone = mock(Sone.class); when(sone.getInsertUri()).thenReturn(insertUri); when(sone.getFingerprint()).thenReturn(fingerprint); when(sone.getRootAlbum()).thenReturn(mock(Album.class)); - when(core.getSone(anyString())).thenReturn(of(sone)); + when(core.getSone(anyString())).thenReturn(sone); return sone; } @@ -230,7 +220,7 @@ public class SoneInserterTest { new SoneInserter(core, eventBus, freenetInterface, "SoneId", soneModificationDetector, 1); when(soneModificationDetector.isEligibleForInsert()).thenReturn(true); - when(core.getSone("SoneId")).thenReturn(Optional.absent()); + when(core.getSone("SoneId")).thenReturn(null); soneInserter.serviceRun(); } @@ -255,4 +245,42 @@ public class SoneInserterTest { soneInserter.serviceRun(); } + @Test + public void templateIsRenderedCorrectlyForManifestElement() + throws IOException { + Map soneProperties = new HashMap<>(); + soneProperties.put("id", "SoneId"); + ManifestCreator manifestCreator = new ManifestCreator(core, soneProperties); + long now = currentTimeMillis(); + when(core.getStartupTime()).thenReturn(now); + ManifestElement manifestElement = manifestCreator.createManifestElement("test.txt", "plain/text; charset=utf-8", "sone-inserter-manifest.txt"); + assertThat(manifestElement.getName(), is("test.txt")); + assertThat(manifestElement.getMimeTypeOverride(), is("plain/text; charset=utf-8")); + String templateContent = new String(toByteArray(manifestElement.getData().getInputStream()), Charsets.UTF_8); + assertThat(templateContent, containsString("Sone Version: " + SonePlugin.getPluginVersion() + "\n")); + assertThat(templateContent, containsString("Core Startup: " + now + "\n")); + assertThat(templateContent, containsString("Sone ID: " + "SoneId" + "\n")); + } + + @Test + public void invalidTemplateReturnsANullManifestElement() { + Map soneProperties = new HashMap<>(); + ManifestCreator manifestCreator = new ManifestCreator(core, soneProperties); + assertThat(manifestCreator.createManifestElement("test.txt", + "plain/text; charset=utf-8", + "sone-inserter-invalid-manifest.txt"), + nullValue()); + } + + @Test + public void errorWhileRenderingTemplateReturnsANullManifestElement() { + Map soneProperties = new HashMap<>(); + ManifestCreator manifestCreator = new ManifestCreator(core, soneProperties); + when(core.toString()).thenThrow(NullPointerException.class); + assertThat(manifestCreator.createManifestElement("test.txt", + "plain/text; charset=utf-8", + "sone-inserter-faulty-manifest.txt"), + nullValue()); + } + }