Add uptime command
[xudocci.git] / src / test / java / net / pterodactylus / xdcc / ui / stdin / UptimeCommandTest.java
diff --git a/src/test/java/net/pterodactylus/xdcc/ui/stdin/UptimeCommandTest.java b/src/test/java/net/pterodactylus/xdcc/ui/stdin/UptimeCommandTest.java
new file mode 100644 (file)
index 0000000..1f4b83a
--- /dev/null
@@ -0,0 +1,77 @@
+package net.pterodactylus.xdcc.ui.stdin;
+
+import java.io.IOException;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.time.Duration;
+import java.util.Arrays;
+import java.util.Collections;
+
+import net.pterodactylus.xdcc.core.Core;
+import net.pterodactylus.xdcc.data.ConnectedNetwork;
+import net.pterodactylus.xdcc.data.Network;
+
+import org.hamcrest.MatcherAssert;
+import org.hamcrest.Matchers;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+/**
+ * Unit test for {@link UptimeCommand}.
+ *
+ * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
+ */
+public class UptimeCommandTest {
+
+       private final Core core = Mockito.mock(Core.class);
+       private final UptimeCommand uptimeCommand = new UptimeCommand(core);
+       private final State state = Mockito.mock(State.class);
+       private final Writer writer = new StringWriter();
+
+       @Test
+       public void commandNameIsCorrect() {
+           MatcherAssert.assertThat(uptimeCommand.getName(), Matchers.is("uptime"));
+       }
+
+       @Test
+       public void aliasesAreEmpty() {
+               MatcherAssert.assertThat(uptimeCommand.getAliases(), Matchers.empty());
+       }
+
+       @Test
+       public void connectionUptimeIsWritten() throws IOException {
+               Mockito.when(core.getUptime()).thenReturn(createDuration(1, 2, 3, 4, 5));
+               uptimeCommand.execute(state, Collections.<String>emptyList(), writer);
+               MatcherAssert.assertThat(writer.toString(), Matchers.containsString("1w 2d 3h 4m 5s"));
+       }
+
+       @Test
+       public void connectionUptimeIsWrittenIfItIsZeroSeconds() throws IOException {
+               Mockito.when(core.getUptime()).thenReturn(createDuration(0, 0, 0, 0, 0));
+               uptimeCommand.execute(state, Collections.<String>emptyList(), writer);
+               MatcherAssert.assertThat(writer.toString(), Matchers.containsString("0s"));
+       }
+
+       @Test
+       public void networkUptimeIsWritten() throws IOException {
+               Mockito.when(core.getUptime()).thenReturn(createDuration(1, 2, 3, 4, 5));
+               ConnectedNetwork connectedNetwork = Mockito.mock(ConnectedNetwork.class);
+               Network network = Mockito.mock(Network.class);
+               Mockito.when(network.name()).thenReturn("Test");
+               Mockito.when(connectedNetwork.getNetwork()).thenReturn(network);
+               Mockito.when(connectedNetwork.getUptime()).thenReturn(createDuration(2, 3, 4, 5, 6));
+               Mockito.when(core.connectedNetworks()).thenReturn(Arrays.asList(connectedNetwork));
+               uptimeCommand.execute(state, Collections.<String>emptyList(), writer);
+               MatcherAssert.assertThat(writer.toString(), Matchers.containsString("2w 3d 4h 5m 6s"));
+       }
+
+       private Duration createDuration(int weeks, int days, int hours, int minutes, int seconds) {
+               return Duration.ofSeconds(
+                               weeks * (7 * 24 * 60 * 60) +
+                                               days * (24 * 60 * 60) +
+                                               hours * (60 * 60) +
+                                               minutes * 60 +
+                                               seconds);
+       }
+
+}