Add uptime command
[xudocci.git] / src / test / java / net / pterodactylus / xdcc / ui / stdin / UptimeCommandTest.java
1 package net.pterodactylus.xdcc.ui.stdin;
2
3 import java.io.IOException;
4 import java.io.StringWriter;
5 import java.io.Writer;
6 import java.time.Duration;
7 import java.util.Arrays;
8 import java.util.Collections;
9
10 import net.pterodactylus.xdcc.core.Core;
11 import net.pterodactylus.xdcc.data.ConnectedNetwork;
12 import net.pterodactylus.xdcc.data.Network;
13
14 import org.hamcrest.MatcherAssert;
15 import org.hamcrest.Matchers;
16 import org.junit.Test;
17 import org.mockito.Mockito;
18
19 /**
20  * Unit test for {@link UptimeCommand}.
21  *
22  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
23  */
24 public class UptimeCommandTest {
25
26         private final Core core = Mockito.mock(Core.class);
27         private final UptimeCommand uptimeCommand = new UptimeCommand(core);
28         private final State state = Mockito.mock(State.class);
29         private final Writer writer = new StringWriter();
30
31         @Test
32         public void commandNameIsCorrect() {
33             MatcherAssert.assertThat(uptimeCommand.getName(), Matchers.is("uptime"));
34         }
35
36         @Test
37         public void aliasesAreEmpty() {
38                 MatcherAssert.assertThat(uptimeCommand.getAliases(), Matchers.empty());
39         }
40
41         @Test
42         public void connectionUptimeIsWritten() throws IOException {
43                 Mockito.when(core.getUptime()).thenReturn(createDuration(1, 2, 3, 4, 5));
44                 uptimeCommand.execute(state, Collections.<String>emptyList(), writer);
45                 MatcherAssert.assertThat(writer.toString(), Matchers.containsString("1w 2d 3h 4m 5s"));
46         }
47
48         @Test
49         public void connectionUptimeIsWrittenIfItIsZeroSeconds() throws IOException {
50                 Mockito.when(core.getUptime()).thenReturn(createDuration(0, 0, 0, 0, 0));
51                 uptimeCommand.execute(state, Collections.<String>emptyList(), writer);
52                 MatcherAssert.assertThat(writer.toString(), Matchers.containsString("0s"));
53         }
54
55         @Test
56         public void networkUptimeIsWritten() throws IOException {
57                 Mockito.when(core.getUptime()).thenReturn(createDuration(1, 2, 3, 4, 5));
58                 ConnectedNetwork connectedNetwork = Mockito.mock(ConnectedNetwork.class);
59                 Network network = Mockito.mock(Network.class);
60                 Mockito.when(network.name()).thenReturn("Test");
61                 Mockito.when(connectedNetwork.getNetwork()).thenReturn(network);
62                 Mockito.when(connectedNetwork.getUptime()).thenReturn(createDuration(2, 3, 4, 5, 6));
63                 Mockito.when(core.connectedNetworks()).thenReturn(Arrays.asList(connectedNetwork));
64                 uptimeCommand.execute(state, Collections.<String>emptyList(), writer);
65                 MatcherAssert.assertThat(writer.toString(), Matchers.containsString("2w 3d 4h 5m 6s"));
66         }
67
68         private Duration createDuration(int weeks, int days, int hours, int minutes, int seconds) {
69                 return Duration.ofSeconds(
70                                 weeks * (7 * 24 * 60 * 60) +
71                                                 days * (24 * 60 * 60) +
72                                                 hours * (60 * 60) +
73                                                 minutes * 60 +
74                                                 seconds);
75         }
76
77 }