mirror of
https://github.com/BentoBoxWorld/BentoBox.git
synced 2024-11-27 21:27:44 +01:00
Added bentobox addon reload command.
This commit is contained in:
parent
9ba62e1711
commit
01022a2500
@ -1,9 +1,13 @@
|
|||||||
package world.bentobox.bentobox.commands;
|
package world.bentobox.bentobox.commands;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import world.bentobox.bentobox.api.addons.Addon;
|
||||||
import world.bentobox.bentobox.api.commands.CompositeCommand;
|
import world.bentobox.bentobox.api.commands.CompositeCommand;
|
||||||
import world.bentobox.bentobox.api.commands.ConfirmableCommand;
|
import world.bentobox.bentobox.api.commands.ConfirmableCommand;
|
||||||
|
import world.bentobox.bentobox.api.localization.TextVariables;
|
||||||
import world.bentobox.bentobox.api.user.User;
|
import world.bentobox.bentobox.api.user.User;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -24,9 +28,11 @@ public class BentoBoxReloadCommand extends ConfirmableCommand {
|
|||||||
@Override
|
@Override
|
||||||
public void setup() {
|
public void setup() {
|
||||||
setPermission("admin.reload");
|
setPermission("admin.reload");
|
||||||
|
setParametersHelp("commands.bentobox.reload.parameters");
|
||||||
setDescription("commands.bentobox.reload.description");
|
setDescription("commands.bentobox.reload.description");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean execute(User user, String label, List<String> args) {
|
public boolean execute(User user, String label, List<String> args) {
|
||||||
if (args.isEmpty()) {
|
if (args.isEmpty()) {
|
||||||
@ -44,14 +50,24 @@ public class BentoBoxReloadCommand extends ConfirmableCommand {
|
|||||||
user.sendMessage("commands.bentobox.reload.locales-reloaded");
|
user.sendMessage("commands.bentobox.reload.locales-reloaded");
|
||||||
});
|
});
|
||||||
} else if (args.size() == 1) {
|
} else if (args.size() == 1) {
|
||||||
if (!getPlugin().getAddonsManager().getAddonByName(args.get(0)).isPresent()) {
|
Optional<Addon> addon = getPlugin().getAddonsManager().getAddonByName(args.get(0));
|
||||||
user.sendRawMessage("Unknown addon");
|
if (!addon.isPresent()) {
|
||||||
|
user.sendMessage("commands.bentobox.reload.unknown-addon");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
this.askConfirmation(user, () -> getPlugin().getAddonsManager().getAddonByName(args.get(0)).ifPresent(getPlugin().getAddonsManager()::reloadAddon));
|
|
||||||
|
this.askConfirmation(user, () -> {
|
||||||
|
user.sendMessage("commands.bentobox.reload.addon", TextVariables.DESCRIPTION, args.get(0));
|
||||||
|
addon.ifPresent(getPlugin().getAddonsManager()::reloadAddon);
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
showHelp(this, user);
|
showHelp(this, user);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<List<String>> tabComplete(User user, String alias, List<String> args) {
|
||||||
|
return Optional.of(getPlugin().getAddonsManager().getAddons().stream().map(a -> a.getDescription().getName()).collect(Collectors.toList()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -227,6 +227,7 @@ public class AddonsManager {
|
|||||||
Path p = addon.getFile().toPath();
|
Path p = addon.getFile().toPath();
|
||||||
disable(addon);
|
disable(addon);
|
||||||
loadAddon(p.toFile());
|
loadAddon(p.toFile());
|
||||||
|
enableAddon(addon);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -253,10 +253,13 @@ commands:
|
|||||||
about:
|
about:
|
||||||
description: "display copyright and license info"
|
description: "display copyright and license info"
|
||||||
reload:
|
reload:
|
||||||
description: "reloads settings, addons (if supported) and locales"
|
parameters: "[addon]"
|
||||||
|
description: "reloads all addons, settings and locales or reloads an individual addon"
|
||||||
locales-reloaded: "&2Languages reloaded."
|
locales-reloaded: "&2Languages reloaded."
|
||||||
addons-reloaded: "&2Addons reloaded."
|
addons-reloaded: "&2Addons reloaded."
|
||||||
settings-reloaded: "&2Settings reloaded."
|
settings-reloaded: "&2Settings reloaded."
|
||||||
|
addon: "&6Reloading [description]"
|
||||||
|
unknown-addon: "&2Unknown addon!"
|
||||||
version:
|
version:
|
||||||
plugin-version: "&2BentoBox version: &3[version]"
|
plugin-version: "&2BentoBox version: &3[version]"
|
||||||
description: "display BentoBox and addons versions"
|
description: "display BentoBox and addons versions"
|
||||||
|
@ -26,6 +26,7 @@ import org.junit.Before;
|
|||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
|
import org.mockito.Mockito;
|
||||||
import org.powermock.api.mockito.PowerMockito;
|
import org.powermock.api.mockito.PowerMockito;
|
||||||
import org.powermock.core.classloader.annotations.PrepareForTest;
|
import org.powermock.core.classloader.annotations.PrepareForTest;
|
||||||
import org.powermock.modules.junit4.PowerMockRunner;
|
import org.powermock.modules.junit4.PowerMockRunner;
|
||||||
@ -44,6 +45,8 @@ public class AddonTest {
|
|||||||
static BentoBox plugin;
|
static BentoBox plugin;
|
||||||
static JavaPlugin javaPlugin;
|
static JavaPlugin javaPlugin;
|
||||||
private Server server;
|
private Server server;
|
||||||
|
@Mock
|
||||||
|
private AddonsManager am;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
@ -64,6 +67,10 @@ public class AddonTest {
|
|||||||
plugin = mock(BentoBox.class);
|
plugin = mock(BentoBox.class);
|
||||||
Whitebox.setInternalState(BentoBox.class, "instance", plugin);
|
Whitebox.setInternalState(BentoBox.class, "instance", plugin);
|
||||||
|
|
||||||
|
// Addons manager
|
||||||
|
when(plugin.getAddonsManager()).thenReturn(am);
|
||||||
|
|
||||||
|
|
||||||
// Mock item factory (for itemstacks)
|
// Mock item factory (for itemstacks)
|
||||||
ItemFactory itemFactory = mock(ItemFactory.class);
|
ItemFactory itemFactory = mock(ItemFactory.class);
|
||||||
when(server.getItemFactory()).thenReturn(itemFactory);
|
when(server.getItemFactory()).thenReturn(itemFactory);
|
||||||
@ -150,6 +157,7 @@ public class AddonTest {
|
|||||||
TestListener listener = new TestListener();
|
TestListener listener = new TestListener();
|
||||||
TestClass test = new TestClass();
|
TestClass test = new TestClass();
|
||||||
test.registerListener(listener);
|
test.registerListener(listener);
|
||||||
|
Mockito.verify(am).registerListener(Mockito.any(), Mockito.eq(listener));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -0,0 +1,187 @@
|
|||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package world.bentobox.bentobox.commands;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertNotNull;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
import static org.mockito.Mockito.mock;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.scheduler.BukkitScheduler;
|
||||||
|
import org.junit.After;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.mockito.Mock;
|
||||||
|
import org.mockito.Mockito;
|
||||||
|
import org.powermock.api.mockito.PowerMockito;
|
||||||
|
import org.powermock.core.classloader.annotations.PrepareForTest;
|
||||||
|
import org.powermock.modules.junit4.PowerMockRunner;
|
||||||
|
import org.powermock.reflect.Whitebox;
|
||||||
|
|
||||||
|
import world.bentobox.bentobox.BentoBox;
|
||||||
|
import world.bentobox.bentobox.Settings;
|
||||||
|
import world.bentobox.bentobox.api.addons.Addon;
|
||||||
|
import world.bentobox.bentobox.api.addons.AddonDescription;
|
||||||
|
import world.bentobox.bentobox.api.commands.CompositeCommand;
|
||||||
|
import world.bentobox.bentobox.api.user.User;
|
||||||
|
import world.bentobox.bentobox.managers.AddonsManager;
|
||||||
|
import world.bentobox.bentobox.managers.CommandsManager;
|
||||||
|
import world.bentobox.bentobox.managers.LocalesManager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author tastybento
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@RunWith(PowerMockRunner.class)
|
||||||
|
@PrepareForTest({Bukkit.class, BentoBox.class, User.class })
|
||||||
|
public class BentoBoxReloadCommandTest {
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private BentoBox plugin;
|
||||||
|
@Mock
|
||||||
|
private CompositeCommand ac;
|
||||||
|
@Mock
|
||||||
|
private User user;
|
||||||
|
@Mock
|
||||||
|
private AddonsManager am;
|
||||||
|
@Mock
|
||||||
|
private LocalesManager lm;
|
||||||
|
private BentoBoxReloadCommand reload;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws java.lang.Exception
|
||||||
|
*/
|
||||||
|
@Before
|
||||||
|
public void setUp() throws Exception {
|
||||||
|
// Set up plugin
|
||||||
|
Whitebox.setInternalState(BentoBox.class, "instance", plugin);
|
||||||
|
|
||||||
|
// Command manager
|
||||||
|
CommandsManager cm = mock(CommandsManager.class);
|
||||||
|
when(plugin.getCommandsManager()).thenReturn(cm);
|
||||||
|
// Parent command has no aliases
|
||||||
|
when(ac.getSubCommandAliases()).thenReturn(new HashMap<>());
|
||||||
|
when(ac.getPermissionPrefix()).thenReturn("bentobox.");
|
||||||
|
// Addons manager
|
||||||
|
when(plugin.getAddonsManager()).thenReturn(am);
|
||||||
|
// Addons
|
||||||
|
Addon addon1 = mock(Addon.class);
|
||||||
|
AddonDescription desc = new AddonDescription.Builder("main", "BSkyBlock", "1.0.0").build();
|
||||||
|
when(addon1.getDescription()).thenReturn(desc);
|
||||||
|
Addon addon2 = mock(Addon.class);
|
||||||
|
AddonDescription desc2 = new AddonDescription.Builder("main", "AcidIsland", "1.0.0").build();
|
||||||
|
when(addon2.getDescription()).thenReturn(desc2);
|
||||||
|
// Linking
|
||||||
|
Optional<Addon> optionalAddon1 = Optional.of(addon1);
|
||||||
|
Optional<Addon> optionalAddon2 = Optional.of(addon2);
|
||||||
|
when(am.getAddonByName(Mockito.eq("bskyblock"))).thenReturn(optionalAddon1);
|
||||||
|
when(am.getAddonByName(Mockito.eq("acidisland"))).thenReturn(optionalAddon2);
|
||||||
|
when(am.getAddonByName(Mockito.eq("warps"))).thenReturn(Optional.empty());
|
||||||
|
when(am.getAddons()).thenReturn(Arrays.asList(addon1, addon2));
|
||||||
|
|
||||||
|
// Confirmable command settings
|
||||||
|
Settings settings = mock(Settings.class);
|
||||||
|
when(settings.getConfirmationTime()).thenReturn(10);
|
||||||
|
when(plugin.getSettings()).thenReturn(settings);
|
||||||
|
|
||||||
|
// Scheduler
|
||||||
|
BukkitScheduler sch = mock(BukkitScheduler.class);
|
||||||
|
PowerMockito.mockStatic(Bukkit.class);
|
||||||
|
when(Bukkit.getScheduler()).thenReturn(sch);
|
||||||
|
|
||||||
|
|
||||||
|
// Command
|
||||||
|
reload = new BentoBoxReloadCommand(ac);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws java.lang.Exception
|
||||||
|
*/
|
||||||
|
@After
|
||||||
|
public void tearDown() throws Exception {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test method for {@link world.bentobox.bentobox.commands.BentoBoxReloadCommand#BentoBoxReloadCommand(world.bentobox.bentobox.api.commands.CompositeCommand)}.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testBentoBoxReloadCommand() {
|
||||||
|
assertNotNull(reload);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test method for {@link world.bentobox.bentobox.commands.BentoBoxReloadCommand#setup()}.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testSetup() {
|
||||||
|
assertEquals("bentobox.admin.reload", reload.getPermission());
|
||||||
|
assertEquals("commands.bentobox.reload.description", reload.getDescription());
|
||||||
|
assertEquals("commands.bentobox.reload.parameters", reload.getParameters());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test method for {@link world.bentobox.bentobox.commands.BentoBoxReloadCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testExecuteUserStringListOfStringReloadAll() {
|
||||||
|
reload.execute(user, "", Collections.emptyList());
|
||||||
|
Mockito.verify(user).sendMessage("commands.confirmation.confirm",
|
||||||
|
"[seconds]",
|
||||||
|
"10");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test method for {@link world.bentobox.bentobox.commands.BentoBoxReloadCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testExecuteUserStringListOfString() {
|
||||||
|
reload.execute(user, "", Collections.singletonList("bskyblock"));
|
||||||
|
Mockito.verify(user).sendMessage("commands.confirmation.confirm",
|
||||||
|
"[seconds]",
|
||||||
|
"10");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test method for {@link world.bentobox.bentobox.commands.BentoBoxReloadCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testExecuteUserStringListOfStringNoAddon() {
|
||||||
|
reload.execute(user, "", Collections.singletonList("warps"));
|
||||||
|
Mockito.verify(user).sendMessage("commands.bentobox.reload.unknown-addon");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test method for {@link world.bentobox.bentobox.commands.BentoBoxReloadCommand#execute(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testExecuteUserStringListOfStringHelp() {
|
||||||
|
reload.execute(user, "", Arrays.asList("warps", "fhfhfh"));
|
||||||
|
Mockito.verify(user).sendMessage(
|
||||||
|
"commands.help.header",
|
||||||
|
"[label]",
|
||||||
|
null
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test method for {@link world.bentobox.bentobox.commands.BentoBoxReloadCommand#tabComplete(world.bentobox.bentobox.api.user.User, java.lang.String, java.util.List)}.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testTabCompleteUserStringListOfString() {
|
||||||
|
List<String> tabs = reload.tabComplete(user, "", Collections.emptyList()).get();
|
||||||
|
assertTrue(tabs.size() == 2);
|
||||||
|
assertTrue(tabs.contains("BSkyBlock"));
|
||||||
|
assertTrue(tabs.contains("AcidIsland"));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user