+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);
+ }
+
+}