From 066a15c2af8fac03195066e5e18a7ccfb09cafe5 Mon Sep 17 00:00:00 2001 From: Andreas Troelsen Date: Mon, 2 Aug 2021 01:32:01 +0200 Subject: [PATCH] Add query command tests. Not a lot of variation in these commands, but the output is a little difficult to write robust tests for because it's all stringly typed. These tests will break pretty hard (or require lots of adapting) if we introduce i18n. The tests don't cover tab completion. That will have to come later. --- .../stats/command/ArenaStatsCommandTest.java | 61 ++++++++++++++ .../stats/command/GlobalStatsCommandTest.java | 49 +++++++++++ .../stats/command/PlayerStatsCommandTest.java | 83 +++++++++++++++++++ 3 files changed, 193 insertions(+) create mode 100644 src/test/java/org/mobarena/stats/command/ArenaStatsCommandTest.java create mode 100644 src/test/java/org/mobarena/stats/command/GlobalStatsCommandTest.java create mode 100644 src/test/java/org/mobarena/stats/command/PlayerStatsCommandTest.java 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)); + } + +}