diff --git a/src/test/java/org/mobarena/stats/command/ArenaStatsCommandTest.java b/src/test/java/org/mobarena/stats/command/ArenaStatsCommandTest.java new file mode 100644 index 0000000..b38c814 --- /dev/null +++ b/src/test/java/org/mobarena/stats/command/ArenaStatsCommandTest.java @@ -0,0 +1,61 @@ +package org.mobarena.stats.command; + +import com.garbagemule.MobArena.Messenger; +import com.garbagemule.MobArena.framework.ArenaMaster; +import org.bukkit.command.CommandSender; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mobarena.stats.MobArenaStats; +import org.mobarena.stats.store.ArenaStats; +import org.mobarena.stats.store.StatsStore; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.*; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class ArenaStatsCommandTest { + + MobArenaStats plugin; + ArenaStatsCommand subject; + + @BeforeEach + void setup() { + plugin = mock(MobArenaStats.class); + subject = new ArenaStatsCommand(plugin); + } + + @Test + void noArgumentsReturnsFalse() { + ArenaMaster am = mock(ArenaMaster.class); + CommandSender sender = mock(CommandSender.class); + String[] args = {}; + + boolean result = subject.execute(am, sender, args); + + assertThat(result, equalTo(false)); + } + + @Test + void success() { + String slug = "castle"; + ArenaMaster am = mock(ArenaMaster.class); + CommandSender sender = mock(CommandSender.class); + String[] args = {slug}; + Messenger messenger = mock(Messenger.class); + StatsStore store = mock(StatsStore.class); + ArenaStats stats = new ArenaStats(1, 2, 3, 4, 5, 6, 7); + when(am.getGlobalMessenger()).thenReturn(messenger); + when(plugin.getStatsStore()).thenReturn(store); + when(plugin.getAsyncExecutor()).thenReturn(Runnable::run); + when(store.getArenaStats(slug)).thenReturn(stats); + + boolean result = subject.execute(am, sender, args); + + assertThat(result, equalTo(true)); + verify(messenger).tell(eq(sender), contains(slug)); + } + +} diff --git a/src/test/java/org/mobarena/stats/command/GlobalStatsCommandTest.java b/src/test/java/org/mobarena/stats/command/GlobalStatsCommandTest.java new file mode 100644 index 0000000..d633ae0 --- /dev/null +++ b/src/test/java/org/mobarena/stats/command/GlobalStatsCommandTest.java @@ -0,0 +1,49 @@ +package org.mobarena.stats.command; + +import com.garbagemule.MobArena.Messenger; +import com.garbagemule.MobArena.framework.ArenaMaster; +import org.bukkit.command.CommandSender; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mobarena.stats.MobArenaStats; +import org.mobarena.stats.store.GlobalStats; +import org.mobarena.stats.store.StatsStore; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.*; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class GlobalStatsCommandTest { + + MobArenaStats plugin; + GlobalStatsCommand subject; + + @BeforeEach + void setup() { + plugin = mock(MobArenaStats.class); + subject = new GlobalStatsCommand(plugin); + } + + @Test + void success() { + ArenaMaster am = mock(ArenaMaster.class); + CommandSender sender = mock(CommandSender.class); + String[] args = {}; + Messenger messenger = mock(Messenger.class); + StatsStore store = mock(StatsStore.class); + GlobalStats stats = new GlobalStats(1, 2, 3, 4); + when(am.getGlobalMessenger()).thenReturn(messenger); + when(plugin.getStatsStore()).thenReturn(store); + when(plugin.getAsyncExecutor()).thenReturn(Runnable::run); + when(store.getGlobalStats()).thenReturn(stats); + + boolean result = subject.execute(am, sender, args); + + assertThat(result, equalTo(true)); + verify(messenger).tell(eq(sender), contains("Global stats")); + } + +} diff --git a/src/test/java/org/mobarena/stats/command/PlayerStatsCommandTest.java b/src/test/java/org/mobarena/stats/command/PlayerStatsCommandTest.java new file mode 100644 index 0000000..280825d --- /dev/null +++ b/src/test/java/org/mobarena/stats/command/PlayerStatsCommandTest.java @@ -0,0 +1,83 @@ +package org.mobarena.stats.command; + +import com.garbagemule.MobArena.Messenger; +import com.garbagemule.MobArena.framework.ArenaMaster; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mobarena.stats.MobArenaStats; +import org.mobarena.stats.store.PlayerStats; +import org.mobarena.stats.store.StatsStore; +import org.mockito.junit.jupiter.MockitoExtension; + +import static org.hamcrest.CoreMatchers.*; +import static org.hamcrest.MatcherAssert.*; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class PlayerStatsCommandTest { + + MobArenaStats plugin; + PlayerStatsCommand subject; + + @BeforeEach + void setup() { + plugin = mock(MobArenaStats.class); + subject = new PlayerStatsCommand(plugin); + } + + @Test + void noArgumentsReturnsFalseForConsole() { + ArenaMaster am = mock(ArenaMaster.class); + CommandSender sender = mock(CommandSender.class); + String[] args = {}; + + boolean result = subject.execute(am, sender, args); + + assertThat(result, equalTo(false)); + } + + @Test + void noArgumentsUsesSenderNameForPlayers() { + String name = "alice"; + ArenaMaster am = mock(ArenaMaster.class); + CommandSender sender = mock(Player.class); + String[] args = {}; + Messenger messenger = mock(Messenger.class); + StatsStore store = mock(StatsStore.class); + PlayerStats stats = new PlayerStats(1, 2, 3, 4); + when(sender.getName()).thenReturn(name); + when(am.getGlobalMessenger()).thenReturn(messenger); + when(plugin.getStatsStore()).thenReturn(store); + when(plugin.getAsyncExecutor()).thenReturn(Runnable::run); + when(store.getPlayerStats(name)).thenReturn(stats); + + boolean result = subject.execute(am, sender, args); + + assertThat(result, equalTo(true)); + verify(messenger).tell(eq(sender), contains(name)); + } + + @Test + void success() { + String name = "garbagemule"; + ArenaMaster am = mock(ArenaMaster.class); + CommandSender sender = mock(CommandSender.class); + String[] args = {name}; + Messenger messenger = mock(Messenger.class); + StatsStore store = mock(StatsStore.class); + PlayerStats stats = new PlayerStats(1, 2, 3, 4); + when(am.getGlobalMessenger()).thenReturn(messenger); + when(plugin.getStatsStore()).thenReturn(store); + when(plugin.getAsyncExecutor()).thenReturn(Runnable::run); + when(store.getPlayerStats(name)).thenReturn(stats); + + boolean result = subject.execute(am, sender, args); + + assertThat(result, equalTo(true)); + verify(messenger).tell(eq(sender), contains(name)); + } + +}