Skip to content

Commit 43c898e

Browse files
committed
Added test for Stats command
1 parent 77884f0 commit 43c898e

File tree

4 files changed

+389
-200
lines changed

4 files changed

+389
-200
lines changed

src/main/java/world/bentobox/level/commands/AdminStatsCommand.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,12 @@ public void setup() {
3737
@Override
3838
public boolean execute(User user, String label, List<String> args) {
3939
user.sendMessage("admin.stats.title");
40-
for (Entry<World, TopTenData> en : level.getManager().getTopTenLists().entrySet()) {
40+
Map<World, TopTenData> topTenLists = level.getManager().getTopTenLists();
41+
if (topTenLists.isEmpty()) {
42+
user.sendMessage("admin.stats.no-data");
43+
return false;
44+
}
45+
for (Entry<World, TopTenData> en : topTenLists.entrySet()) {
4146
user.sendMessage("admin.stats.world", TextVariables.NAME,
4247
level.getPlugin().getIWM().getWorldName(en.getKey()));
4348
Map<UUID, Long> topTen = en.getValue().getTopTen();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,183 @@
1+
package world.bentobox.level.commands;
2+
3+
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.assertFalse;
5+
import static org.junit.Assert.assertTrue;
6+
import static org.mockito.ArgumentMatchers.any;
7+
import static org.mockito.ArgumentMatchers.anyString;
8+
import static org.mockito.Mockito.mock;
9+
import static org.mockito.Mockito.never;
10+
import static org.mockito.Mockito.verify;
11+
import static org.mockito.Mockito.when;
12+
13+
import java.util.HashMap;
14+
import java.util.List;
15+
import java.util.Map;
16+
import java.util.Random;
17+
import java.util.UUID;
18+
19+
import org.bukkit.Bukkit;
20+
import org.bukkit.Server;
21+
import org.bukkit.World;
22+
import org.bukkit.entity.Player;
23+
import org.bukkit.inventory.ItemFactory;
24+
import org.bukkit.inventory.meta.ItemMeta;
25+
import org.junit.After;
26+
import org.junit.Before;
27+
import org.junit.Test;
28+
import org.junit.runner.RunWith;
29+
import org.mockito.Mock;
30+
import org.powermock.api.mockito.PowerMockito;
31+
import org.powermock.core.classloader.annotations.PrepareForTest;
32+
import org.powermock.modules.junit4.PowerMockRunner;
33+
import org.powermock.reflect.Whitebox;
34+
35+
import world.bentobox.bentobox.BentoBox;
36+
import world.bentobox.bentobox.api.addons.GameModeAddon;
37+
import world.bentobox.bentobox.api.commands.CompositeCommand;
38+
import world.bentobox.bentobox.api.user.User;
39+
import world.bentobox.bentobox.database.objects.Island;
40+
import world.bentobox.bentobox.managers.IslandWorldManager;
41+
import world.bentobox.bentobox.managers.IslandsManager;
42+
import world.bentobox.bentobox.managers.LocalesManager;
43+
import world.bentobox.bentobox.managers.PlayersManager;
44+
import world.bentobox.level.Level;
45+
import world.bentobox.level.LevelsManager;
46+
import world.bentobox.level.objects.TopTenData;
47+
48+
/**
49+
* @author tastybento
50+
*/
51+
@RunWith(PowerMockRunner.class)
52+
@PrepareForTest({ Bukkit.class, BentoBox.class })
53+
public class AdminStatsCommandTest {
54+
55+
@Mock
56+
private CompositeCommand ic;
57+
private UUID uuid;
58+
@Mock
59+
private User user;
60+
@Mock
61+
private IslandsManager im;
62+
@Mock
63+
private Island island;
64+
@Mock
65+
private Level addon;
66+
@Mock
67+
private World world;
68+
@Mock
69+
private IslandWorldManager iwm;
70+
@Mock
71+
private GameModeAddon gameModeAddon;
72+
@Mock
73+
private Player p;
74+
@Mock
75+
private LocalesManager lm;
76+
@Mock
77+
private PlayersManager pm;
78+
79+
private AdminStatsCommand asc;
80+
private TopTenData ttd;
81+
@Mock
82+
private LevelsManager manager;
83+
@Mock
84+
private Server server;
85+
86+
@Before
87+
public void setUp() {
88+
// Set up plugin
89+
BentoBox plugin = mock(BentoBox.class);
90+
Whitebox.setInternalState(BentoBox.class, "instance", plugin);
91+
User.setPlugin(plugin);
92+
when(addon.getPlugin()).thenReturn(plugin);
93+
94+
// Addon
95+
when(ic.getAddon()).thenReturn(addon);
96+
when(ic.getPermissionPrefix()).thenReturn("bskyblock.");
97+
when(ic.getLabel()).thenReturn("island");
98+
when(ic.getTopLabel()).thenReturn("island");
99+
when(ic.getWorld()).thenReturn(world);
100+
when(ic.getTopLabel()).thenReturn("bsb");
101+
102+
// IWM friendly name
103+
when(plugin.getIWM()).thenReturn(iwm);
104+
when(iwm.getFriendlyName(any())).thenReturn("BSkyBlock");
105+
106+
// World
107+
when(world.toString()).thenReturn("world");
108+
when(world.getName()).thenReturn("BSkyBlock_world");
109+
110+
// Player manager
111+
when(plugin.getPlayers()).thenReturn(pm);
112+
when(pm.getUser(anyString())).thenReturn(user);
113+
// topTen
114+
when(addon.getManager()).thenReturn(manager);
115+
// User
116+
uuid = UUID.randomUUID();
117+
when(user.getUniqueId()).thenReturn(uuid);
118+
when(user.getTranslation(any())).thenAnswer(invocation -> invocation.getArgument(0, String.class));
119+
120+
// Bukkit
121+
PowerMockito.mockStatic(Bukkit.class);
122+
when(Bukkit.getServer()).thenReturn(server);
123+
// Mock item factory (for itemstacks)
124+
ItemFactory itemFactory = mock(ItemFactory.class);
125+
ItemMeta itemMeta = mock(ItemMeta.class);
126+
when(itemFactory.getItemMeta(any())).thenReturn(itemMeta);
127+
when(server.getItemFactory()).thenReturn(itemFactory);
128+
when(Bukkit.getItemFactory()).thenReturn(itemFactory);
129+
130+
// Top ten
131+
ttd = new TopTenData(world);
132+
Map<UUID, Long> topten = new HashMap<>();
133+
Random r = new Random();
134+
for (int i = 0; i < 1000; i++) {
135+
topten.put(UUID.randomUUID(), r.nextLong(20000));
136+
}
137+
ttd.setTopTen(topten);
138+
asc = new AdminStatsCommand(addon, ic);
139+
}
140+
141+
@After
142+
public void tearDown() {
143+
User.clearUsers();
144+
}
145+
146+
/**
147+
* Test method for
148+
* {@link world.bentobox.level.commands.AdminStatsCommand#setup()}.
149+
*/
150+
@Test
151+
public void testSetup() {
152+
assertEquals("bskyblock.admin.stats", asc.getPermission());
153+
assertFalse(asc.isOnlyPlayer());
154+
assertEquals("admin.stats.description", asc.getDescription());
155+
156+
}
157+
158+
/**
159+
* Test method for
160+
* {@link world.bentobox.level.commands.AdminStatsCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}.
161+
*/
162+
@Test
163+
public void testExecuteUserStringListOfString() {
164+
assertFalse(asc.execute(user, "", List.of()));
165+
verify(user).sendMessage("admin.stats.title");
166+
verify(user).sendMessage("admin.stats.no-data");
167+
}
168+
169+
/**
170+
* Test method for
171+
* {@link world.bentobox.level.commands.AdminStatsCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}.
172+
*/
173+
@Test
174+
public void testExecuteUserStringListOfStringLevels() {
175+
Map<World, TopTenData> map = new HashMap<>();
176+
map.put(world, ttd);
177+
when(manager.getTopTenLists()).thenReturn(map);
178+
assertTrue(asc.execute(user, "", List.of()));
179+
verify(user).sendMessage("admin.stats.title");
180+
verify(user, never()).sendMessage("admin.stats.no-data");
181+
}
182+
183+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,200 @@
1+
package world.bentobox.level.commands;
2+
3+
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.assertFalse;
5+
import static org.junit.Assert.assertTrue;
6+
import static org.mockito.ArgumentMatchers.any;
7+
import static org.mockito.ArgumentMatchers.anyString;
8+
import static org.mockito.ArgumentMatchers.eq;
9+
import static org.mockito.Mockito.mock;
10+
import static org.mockito.Mockito.verify;
11+
import static org.mockito.Mockito.when;
12+
13+
import java.util.Collections;
14+
import java.util.UUID;
15+
16+
import org.bukkit.Bukkit;
17+
import org.bukkit.Server;
18+
import org.bukkit.World;
19+
import org.bukkit.entity.Player;
20+
import org.bukkit.inventory.ItemFactory;
21+
import org.bukkit.inventory.meta.ItemMeta;
22+
import org.junit.After;
23+
import org.junit.Before;
24+
import org.junit.Test;
25+
import org.junit.runner.RunWith;
26+
import org.mockito.Mock;
27+
import org.powermock.api.mockito.PowerMockito;
28+
import org.powermock.core.classloader.annotations.PrepareForTest;
29+
import org.powermock.modules.junit4.PowerMockRunner;
30+
import org.powermock.reflect.Whitebox;
31+
32+
import world.bentobox.bentobox.BentoBox;
33+
import world.bentobox.bentobox.api.addons.GameModeAddon;
34+
import world.bentobox.bentobox.api.commands.CompositeCommand;
35+
import world.bentobox.bentobox.api.localization.TextVariables;
36+
import world.bentobox.bentobox.api.user.User;
37+
import world.bentobox.bentobox.database.objects.Island;
38+
import world.bentobox.bentobox.managers.IslandWorldManager;
39+
import world.bentobox.bentobox.managers.IslandsManager;
40+
import world.bentobox.bentobox.managers.LocalesManager;
41+
import world.bentobox.bentobox.managers.PlayersManager;
42+
import world.bentobox.level.Level;
43+
import world.bentobox.level.LevelsManager;
44+
import world.bentobox.level.objects.TopTenData;
45+
46+
/**
47+
* @author tastybento
48+
*
49+
*/
50+
@RunWith(PowerMockRunner.class)
51+
@PrepareForTest({ Bukkit.class, BentoBox.class })
52+
public class AdminTopRemoveCommandTest {
53+
54+
@Mock
55+
private CompositeCommand ic;
56+
private UUID uuid;
57+
@Mock
58+
private User user;
59+
@Mock
60+
private IslandsManager im;
61+
@Mock
62+
private Island island;
63+
@Mock
64+
private Level addon;
65+
@Mock
66+
private World world;
67+
@Mock
68+
private IslandWorldManager iwm;
69+
@Mock
70+
private GameModeAddon gameModeAddon;
71+
@Mock
72+
private Player p;
73+
@Mock
74+
private LocalesManager lm;
75+
@Mock
76+
private PlayersManager pm;
77+
78+
private AdminTopRemoveCommand atrc;
79+
@Mock
80+
private TopTenData ttd;
81+
@Mock
82+
private LevelsManager manager;
83+
@Mock
84+
private Server server;
85+
86+
@Before
87+
public void setUp() {
88+
// Set up plugin
89+
BentoBox plugin = mock(BentoBox.class);
90+
Whitebox.setInternalState(BentoBox.class, "instance", plugin);
91+
User.setPlugin(plugin);
92+
// Addon
93+
when(ic.getAddon()).thenReturn(addon);
94+
when(ic.getPermissionPrefix()).thenReturn("bskyblock.");
95+
when(ic.getLabel()).thenReturn("island");
96+
when(ic.getTopLabel()).thenReturn("island");
97+
when(ic.getWorld()).thenReturn(world);
98+
when(ic.getTopLabel()).thenReturn("bsb");
99+
100+
// IWM friendly name
101+
when(plugin.getIWM()).thenReturn(iwm);
102+
when(iwm.getFriendlyName(any())).thenReturn("BSkyBlock");
103+
104+
// World
105+
when(world.toString()).thenReturn("world");
106+
when(world.getName()).thenReturn("BSkyBlock_world");
107+
108+
// Player manager
109+
when(plugin.getPlayers()).thenReturn(pm);
110+
when(pm.getUser(anyString())).thenReturn(user);
111+
// topTen
112+
when(addon.getManager()).thenReturn(manager);
113+
// User
114+
uuid = UUID.randomUUID();
115+
when(user.getUniqueId()).thenReturn(uuid);
116+
when(user.getTranslation(any())).thenAnswer(invocation -> invocation.getArgument(0, String.class));
117+
118+
// Bukkit
119+
PowerMockito.mockStatic(Bukkit.class);
120+
when(Bukkit.getServer()).thenReturn(server);
121+
// Mock item factory (for itemstacks)
122+
ItemFactory itemFactory = mock(ItemFactory.class);
123+
ItemMeta itemMeta = mock(ItemMeta.class);
124+
when(itemFactory.getItemMeta(any())).thenReturn(itemMeta);
125+
when(server.getItemFactory()).thenReturn(itemFactory);
126+
when(Bukkit.getItemFactory()).thenReturn(itemFactory);
127+
128+
atrc = new AdminTopRemoveCommand(addon, ic);
129+
}
130+
131+
@After
132+
public void tearDown() {
133+
User.clearUsers();
134+
}
135+
136+
/**
137+
* Test method for
138+
* {@link world.bentobox.level.commands.admin.AdminTopRemoveCommand#AdminTopRemoveCommand(world.bentobox.level.Level, world.bentobox.bentobox.api.commands.CompositeCommand)}.
139+
*/
140+
@Test
141+
public void testAdminTopRemoveCommand() {
142+
assertEquals("remove", atrc.getLabel());
143+
assertEquals("delete", atrc.getAliases().get(0));
144+
}
145+
146+
/**
147+
* Test method for
148+
* {@link world.bentobox.level.commands.admin.AdminTopRemoveCommand#setup()}.
149+
*/
150+
@Test
151+
public void testSetup() {
152+
assertEquals("bskyblock.admin.top.remove", atrc.getPermission());
153+
assertEquals("admin.top.remove.parameters", atrc.getParameters());
154+
assertEquals("admin.top.remove.description", atrc.getDescription());
155+
assertFalse(atrc.isOnlyPlayer());
156+
157+
}
158+
159+
/**
160+
* Test method for
161+
* {@link world.bentobox.level.commands.admin.AdminTopRemoveCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}.
162+
*/
163+
@Test
164+
public void testCanExecuteWrongArgs() {
165+
assertFalse(atrc.canExecute(user, "delete", Collections.emptyList()));
166+
verify(user).sendMessage("commands.help.header", TextVariables.LABEL, "BSkyBlock");
167+
}
168+
169+
/**
170+
* Test method for {@link world.bentobox.level.commands.admin.AdminTopRemoveCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}.
171+
*/
172+
@Test
173+
public void testCanExecuteUnknown() {
174+
when(pm.getUser(anyString())).thenReturn(null);
175+
assertFalse(atrc.canExecute(user, "delete", Collections.singletonList("tastybento")));
176+
verify(user).sendMessage("general.errors.unknown-player", TextVariables.NAME, "tastybento");
177+
}
178+
179+
/**
180+
* Test method for
181+
* {@link world.bentobox.level.commands.admin.AdminTopRemoveCommand#canExecute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}.
182+
*/
183+
@Test
184+
public void testCanExecuteKnown() {
185+
assertTrue(atrc.canExecute(user, "delete", Collections.singletonList("tastybento")));
186+
}
187+
188+
/**
189+
* Test method for
190+
* {@link world.bentobox.level.commands.admin.AdminTopRemoveCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}.
191+
*/
192+
@Test
193+
public void testExecuteUserStringListOfString() {
194+
testCanExecuteKnown();
195+
assertTrue(atrc.execute(user, "delete", Collections.singletonList("tastybento")));
196+
verify(manager).removeEntry(any(World.class), eq(uuid));
197+
verify(user).sendMessage("general.success");
198+
}
199+
200+
}

0 commit comments

Comments
 (0)