/*******************************************************************************
* Copyright 2014 Tobias Welther
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
package de.tobiyas.racesandclasses.commands.classes;
import static de.tobiyas.racesandclasses.translation.languages.Keys.plugin_pre;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.anyBoolean;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.LinkedList;
import java.util.List;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.PluginCommand;
import org.bukkit.entity.Player;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import de.tobiyas.racesandclasses.RacesAndClasses;
import de.tobiyas.racesandclasses.datacontainer.traitholdercontainer.classes.ClassContainer;
import de.tobiyas.racesandclasses.generate.PluginCommandFactory;
import de.tobiyas.racesandclasses.generate.plugin.GenerateRaces;
import de.tobiyas.racesandclasses.tutorial.TutorialStepContainer;
import de.tobiyas.racesandclasses.util.consts.PermissionNode;
import de.tobiyas.utils.tests.generate.server.GenerateBukkitServer;
public class CommandExecutor_ClassTest {
private CommandExecutor_Class sut;
private CommandSender consoleSender;
private String consoleSenderName = "console";
private Player player;
private String playerName = "player1";
@Before
public void init(){
GenerateBukkitServer.generateServer();
GenerateRaces.generateRaces();
when(RacesAndClasses.getPlugin().getConfigManager().getGeneralConfig().isConfig_classes_enable()).thenReturn(true);
sut = new CommandExecutor_Class();
sut.addObserver(RacesAndClasses.getPlugin().getTutorialManager());
consoleSender = mock(CommandSender.class);
when(consoleSender.getName()).thenReturn(consoleSenderName);
player = mock(Player.class);
when(player.getName()).thenReturn(playerName);
}
@After
public void tearDown(){
GenerateRaces.dropMock();
GenerateBukkitServer.dropServer();
}
@Test
public void registering_command_works(){
String commandName = "class";
PluginCommand command = PluginCommandFactory.create(commandName, RacesAndClasses.getPlugin());
when(RacesAndClasses.getPlugin().getCommand(commandName)).thenReturn(command);
sut = new CommandExecutor_Class();
Assert.assertEquals(command.getExecutor(), sut);
}
//Classes inactive
@Test
public void test_class_inactive_gives_early_out(){
when(RacesAndClasses.getPlugin().getConfigManager().getGeneralConfig().isConfig_classes_enable()).thenReturn(false);
sut.onCommand(consoleSender, null, "", new String[] {});
verify(consoleSender).sendMessage(plugin_pre + "something_disabled");
}
//Send help
private void verifyHelp(CommandSender sender, boolean permissions){
verify(sender).sendMessage(plugin_pre + "wrong_command_use");
verify(sender).sendMessage(ChatColor.RED + "/class " + ChatColor.LIGHT_PURPLE + "info");
verify(sender).sendMessage(ChatColor.RED + "/class " + ChatColor.LIGHT_PURPLE + "list");
verify(sender, permissions ? times(1) : never()).sendMessage(ChatColor.RED + "/class " + ChatColor.LIGHT_PURPLE + "select " + ChatColor.YELLOW + "<classname>");
verify(sender, permissions ? times(1) : never()).sendMessage(ChatColor.RED + "/class " + ChatColor.LIGHT_PURPLE + "change " + ChatColor.YELLOW + "<classname>");
}
@Test
public void test_help_with_no_permissions_from_console_sender(){
sut.onCommand(consoleSender, null, "", new String[] {});
verifyHelp(consoleSender, false);
}
@Test
public void test_sending_wrong_command_sends_help_from_console_sender(){
sut.onCommand(consoleSender, null, "", new String[] {"wrongCommand"});
verifyHelp(consoleSender, false);
}
@Test
public void test_help_with_permissions_from_console_sender(){
when(RacesAndClasses.getPlugin().getPermissionManager().checkPermissionsSilent(any(CommandSender.class), anyString())).thenReturn(true);
sut.onCommand(consoleSender, null, "", new String[] {});
verifyHelp(consoleSender, true);
}
//Info command
@Test
public void test_info_with_console_sender(){
String command = "info";
sut.onCommand(consoleSender, null, "", new String[] {command});
verify(consoleSender).sendMessage(plugin_pre + "no_class_selected_use_info");
}
@Test
public void test_info_with_unknown_class_and_console_sender(){
String command = "info";
String classToSelect = "Banane";
sut.onCommand(consoleSender, null, "", new String[] {command, classToSelect});
verify(consoleSender).sendMessage(plugin_pre + "class_not_exist");
}
@Test
public void test_info_with_classes_present_from_console_sender(){
String command = "info";
List<String> classList = new LinkedList<String>();
classList.add("class");
when(RacesAndClasses.getPlugin().getClassManager().getAllHolderNames()).thenReturn(classList);
ClassContainer classContainer = mock(ClassContainer.class);
when(RacesAndClasses.getPlugin().getClassManager().getHolderOfPlayer(consoleSenderName)).thenReturn(classContainer);
when(classContainer.getName()).thenReturn("class");
when(classContainer.getTag()).thenReturn("[class]");
sut.onCommand(consoleSender, null, "", new String[] {command});
verify(consoleSender).sendMessage(ChatColor.YELLOW + "===== " + ChatColor.RED + "ClassInfo" + ChatColor.YELLOW + " =====");
verify(consoleSender).sendMessage(ChatColor.YELLOW + "Class: " + ChatColor.LIGHT_PURPLE + classContainer.getName());
verify(consoleSender).sendMessage(ChatColor.YELLOW + "ClassTag: " + ChatColor.LIGHT_PURPLE + classContainer.getTag());
verify(consoleSender).sendMessage(ChatColor.YELLOW + "==== " + ChatColor.RED + "Class Traits" + ChatColor.YELLOW +" =====");
}
//List command
@Test
public void test_list_with_console_sender(){
String command = "list";
sut.onCommand(consoleSender, null, "", new String[] {command});
verify(consoleSender).sendMessage(ChatColor.YELLOW + "===== " + ChatColor.RED + "Classes" + ChatColor.YELLOW + " =====");
verify(consoleSender).sendMessage("no_class_in_list");
}
@Test
public void test_list_with_multiple_classes_console_sender(){
String command = "list";
List<String> classList = new LinkedList<String>();
classList.add("class1");
classList.add("class2");
classList.add("class3");
when(RacesAndClasses.getPlugin().getClassManager().getAllHolderNames()).thenReturn(classList);
sut.onCommand(consoleSender, null, "", new String[] {command});
verify(consoleSender).sendMessage(ChatColor.YELLOW + "===== " + ChatColor.RED + "Classes" + ChatColor.YELLOW + " =====");
for(String clazz : classList){
verify(consoleSender).sendMessage(ChatColor.BLUE + clazz);
}
}
@Test
public void test_list_with_multiple_classes_and_own_class_console_sender(){
String command = "list";
List<String> classList = new LinkedList<String>();
classList.add("class1");
classList.add("class2");
classList.add("class3");
when(RacesAndClasses.getPlugin().getClassManager().getAllHolderNames()).thenReturn(classList);
ClassContainer classContainer = mock(ClassContainer.class);
when(RacesAndClasses.getPlugin().getClassManager().getHolderOfPlayer(consoleSenderName)).thenReturn(classContainer);
when(classContainer.getName()).thenReturn("class1");
sut.onCommand(consoleSender, null, "", new String[] {command});
verify(consoleSender).sendMessage(ChatColor.YELLOW + "===== " + ChatColor.RED + "Classes" + ChatColor.YELLOW + " =====");
verify(consoleSender).sendMessage(ChatColor.RED + "class1" + ChatColor.YELLOW + " <-- your_class");
verify(consoleSender).sendMessage(ChatColor.BLUE + "class2");
verify(consoleSender).sendMessage(ChatColor.BLUE + "class3");
}
@Test
public void test_list_with_player_triggers_observer(){
String command = "list";
sut.onCommand(player, null, "", new String[] {command});
verify(RacesAndClasses.getPlugin().getTutorialManager()).update(any(CommandExecutor_Class.class), any(TutorialStepContainer.class));
}
//selecting
@Test
public void test_select_with_console_sender_fails(){
String command = "select";
String clazz = "nothing";
sut.onCommand(consoleSender, null, "", new String[] {command, clazz});
verify(consoleSender).sendMessage("only_players");
}
@Test
public void test_player_selects_class_without_permission_fails(){
String command = "select";
sut.onCommand(player, null, "", new String[] {command});
verify(player, never()).sendMessage(anyString());
}
@Test
public void test_player_opening_class_with_no_container_selection_screen(){
when(RacesAndClasses.getPlugin().getPermissionManager().checkPermissions(player, PermissionNode.selectClass)).thenReturn(true);
when(RacesAndClasses.getPlugin().getConfigManager().getGeneralConfig().isConfig_useClassGUIToSelect()).thenReturn(true);
String command = "select";
List<String> classList = new LinkedList<String>();
when(RacesAndClasses.getPlugin().getClassManager().listAllVisibleHolders()).thenReturn(classList);
when(RacesAndClasses.getPlugin().getClassManager().getHolderOfPlayer(playerName)).thenReturn(null);
sut.onCommand(player, null, "", new String[] {command});
verify(player).sendMessage(plugin_pre + "no_class_to_select");
}
@Test
public void test_player_opening_class_selection_screen(){
when(RacesAndClasses.getPlugin().getPermissionManager().checkPermissions(player, PermissionNode.selectClass)).thenReturn(true);
when(RacesAndClasses.getPlugin().getConfigManager().getGeneralConfig().isConfig_useClassGUIToSelect()).thenReturn(true);
String command = "select";
String className = "class1";
List<String> classList = new LinkedList<String>();
classList.add(className);
ClassContainer classContainer = mock(ClassContainer.class, Mockito.RETURNS_DEEP_STUBS);
when(classContainer.getName()).thenReturn(className);
when(RacesAndClasses.getPlugin().getClassManager().getHolderByName(className)).thenReturn(classContainer);
when(RacesAndClasses.getPlugin().getClassManager().listAllVisibleHolders()).thenReturn(classList);
when(RacesAndClasses.getPlugin().getClassManager().getHolderOfPlayer(playerName)).thenReturn(null);
sut.onCommand(player, null, "", new String[] {command});
verify(player).sendMessage(plugin_pre + "open_holder");
}
@Test
public void test_player_opening_class_selection_fails_because_already_has_class(){
when(RacesAndClasses.getPlugin().getPermissionManager().checkPermissions(player, PermissionNode.selectClass)).thenReturn(true);
when(RacesAndClasses.getPlugin().getConfigManager().getGeneralConfig().isConfig_useClassGUIToSelect()).thenReturn(true);
String command = "select";
String className = "class1";
List<String> classList = new LinkedList<String>();
classList.add(className);
ClassContainer classContainer = mock(ClassContainer.class, Mockito.RETURNS_DEEP_STUBS);
when(classContainer.getName()).thenReturn(className);
when(RacesAndClasses.getPlugin().getClassManager().getHolderByName(className)).thenReturn(classContainer);
when(RacesAndClasses.getPlugin().getClassManager().listAllVisibleHolders()).thenReturn(classList);
when(RacesAndClasses.getPlugin().getClassManager().getHolderOfPlayer(playerName)).thenReturn(classContainer);
sut.onCommand(player, null, "", new String[] {command});
verify(player).sendMessage(plugin_pre + "already_have_class");
}
//Changing
@Test
public void test_change_with_console_sender_fails(){
String command = "change";
String clazz = "nothing";
sut.onCommand(consoleSender, null, "", new String[] {command, clazz});
verify(consoleSender).sendMessage("only_players");
}
@Test
public void test_player_opening_class_changer_with_no_container_selected_screen(){
when(RacesAndClasses.getPlugin().getPermissionManager().checkPermissions(player, PermissionNode.changeClass)).thenReturn(true);
when(RacesAndClasses.getPlugin().getConfigManager().getGeneralConfig().isConfig_useClassGUIToSelect()).thenReturn(true);
String command = "change";
List<String> classList = new LinkedList<String>();
when(RacesAndClasses.getPlugin().getClassManager().listAllVisibleHolders()).thenReturn(classList);
when(RacesAndClasses.getPlugin().getClassManager().getHolderOfPlayer(playerName)).thenReturn(null);
sut.onCommand(player, null, "", new String[] {command});
verify(player).sendMessage(plugin_pre + "no_class_on_change");
}
@Test
public void test_player_opening_class_with_no_changeable_class_fails(){
when(RacesAndClasses.getPlugin().getPermissionManager().checkPermissions(player, PermissionNode.changeClass)).thenReturn(true);
when(RacesAndClasses.getPlugin().getConfigManager().getGeneralConfig().isConfig_useClassGUIToSelect()).thenReturn(true);
String command = "change";
String className = "class1";
List<String> classList = new LinkedList<String>();
ClassContainer classContainer = mock(ClassContainer.class, Mockito.RETURNS_DEEP_STUBS);
when(classContainer.getName()).thenReturn(className);
when(RacesAndClasses.getPlugin().getClassManager().getHolderByName(className)).thenReturn(classContainer);
when(RacesAndClasses.getPlugin().getClassManager().listAllVisibleHolders()).thenReturn(classList);
when(RacesAndClasses.getPlugin().getClassManager().getHolderOfPlayer(playerName)).thenReturn(classContainer);
sut.onCommand(player, null, "", new String[] {command});
verify(player).sendMessage(plugin_pre + "no_class_to_select");
}
@Test
public void test_player_opening_class_change_success_because_already_has_class(){
when(RacesAndClasses.getPlugin().getPermissionManager().checkPermissions(player, PermissionNode.changeClass)).thenReturn(true);
when(RacesAndClasses.getPlugin().getConfigManager().getGeneralConfig().isConfig_useClassGUIToSelect()).thenReturn(true);
String command = "change";
String className = "class1";
List<String> classList = new LinkedList<String>();
classList.add(className);
ClassContainer classContainer = mock(ClassContainer.class, Mockito.RETURNS_DEEP_STUBS);
when(classContainer.getName()).thenReturn(className);
when(RacesAndClasses.getPlugin().getClassManager().getHolderByName(className)).thenReturn(classContainer);
when(RacesAndClasses.getPlugin().getClassManager().listAllVisibleHolders()).thenReturn(classList);
when(RacesAndClasses.getPlugin().getClassManager().getHolderOfPlayer(playerName)).thenReturn(classContainer);
sut.onCommand(player, null, "", new String[] {command});
verify(player).sendMessage(plugin_pre + "open_holder");
}
////////////////////////
//CHAT INTERACTION //
////////////////////////
//selecting
@Test
public void test_select_with_console_sender_fails_chat(){
String command = "select";
String clazz = "nothing";
sut.onCommand(consoleSender, null, "", new String[] {command, clazz});
verify(consoleSender).sendMessage("only_players");
}
@Test
public void test_player_selecting_class_with_no_container_chat(){
when(RacesAndClasses.getPlugin().getPermissionManager().checkPermissions(player, PermissionNode.selectClass)).thenReturn(true);
String command = "select";
List<String> classList = new LinkedList<String>();
when(RacesAndClasses.getPlugin().getClassManager().listAllVisibleHolders()).thenReturn(classList);
when(RacesAndClasses.getPlugin().getClassManager().getHolderOfPlayer(playerName)).thenReturn(null);
sut.onCommand(player, null, "", new String[] {command});
verifyHelp(player, false);
}
@Test
public void test_player_selecting_class_chat(){
when(RacesAndClasses.getPlugin().getPermissionManager().checkPermissions(player, PermissionNode.selectClass)).thenReturn(true);
String command = "select";
String className = "class1";
List<String> classList = new LinkedList<String>();
classList.add(className);
ClassContainer classContainer = mock(ClassContainer.class, Mockito.RETURNS_DEEP_STUBS);
when(classContainer.getName()).thenReturn(className);
when(RacesAndClasses.getPlugin().getClassManager().getHolderByName(className)).thenReturn(classContainer);
when(RacesAndClasses.getPlugin().getClassManager().listAllVisibleHolders()).thenReturn(classList);
when(RacesAndClasses.getPlugin().getClassManager().getHolderOfPlayer(playerName)).thenReturn(null);
when(RacesAndClasses.getPlugin().getClassManager().addPlayerToHolder(anyString(), anyString(), anyBoolean())).thenReturn(true);
sut.onCommand(player, null, "", new String[] {command, className});
verify(player).sendMessage(plugin_pre + "class_changed_to");
verify(RacesAndClasses.getPlugin().getTutorialManager()).update(any(CommandExecutor_Class.class), any(TutorialStepContainer.class));
}
@Test
public void test_player_selecting_class_chat_fails_because_already_has_class(){
when(RacesAndClasses.getPlugin().getPermissionManager().checkPermissions(player, PermissionNode.selectClass)).thenReturn(true);
String command = "select";
String className = "class1";
List<String> classList = new LinkedList<String>();
classList.add(className);
ClassContainer classContainer = mock(ClassContainer.class, Mockito.RETURNS_DEEP_STUBS);
when(classContainer.getName()).thenReturn(className);
when(RacesAndClasses.getPlugin().getClassManager().getHolderByName(className)).thenReturn(classContainer);
when(RacesAndClasses.getPlugin().getClassManager().listAllVisibleHolders()).thenReturn(classList);
when(RacesAndClasses.getPlugin().getClassManager().getHolderOfPlayer(playerName)).thenReturn(classContainer);
sut.onCommand(player, null, "", new String[] {command, className});
verify(player).sendMessage(plugin_pre + "class_changed_to");
}
@Test
public void test_player_selecting_class_chat_fails_because_not_exist_has_class(){
when(RacesAndClasses.getPlugin().getPermissionManager().checkPermissions(player, PermissionNode.selectClass)).thenReturn(true);
String command = "select";
String className = "class1";
List<String> classList = new LinkedList<String>();
when(RacesAndClasses.getPlugin().getClassManager().listAllVisibleHolders()).thenReturn(classList);
when(RacesAndClasses.getPlugin().getClassManager().getHolderOfPlayer(playerName)).thenReturn(null);
sut.onCommand(player, null, "", new String[] {command, className});
verify(player).sendMessage(plugin_pre + "class_not_exist");
}
//changing
@Test
public void test_change_with_console_sender_fails_chat(){
String command = "change";
String clazz = "nothing";
sut.onCommand(consoleSender, null, "", new String[] {command, clazz});
verify(consoleSender).sendMessage("only_players");
}
@Test
public void test_player_changing_class_with_no_container_chat(){
when(RacesAndClasses.getPlugin().getPermissionManager().checkPermissions(player, PermissionNode.changeClass)).thenReturn(true);
String command = "change";
List<String> classList = new LinkedList<String>();
when(RacesAndClasses.getPlugin().getClassManager().listAllVisibleHolders()).thenReturn(classList);
when(RacesAndClasses.getPlugin().getClassManager().getHolderOfPlayer(playerName)).thenReturn(null);
sut.onCommand(player, null, "", new String[] {command});
verifyHelp(player, false);
}
@Test
public void test_player_changing_class_chat(){
when(RacesAndClasses.getPlugin().getPermissionManager().checkPermissions(any(CommandSender.class), anyString())).thenReturn(true);
when(RacesAndClasses.getPlugin().getClassManager().changePlayerHolder(anyString(), anyString(), anyBoolean())).thenReturn(true);
String command = "change";
String className = "class1";
String currentClass = "class2";
List<String> classList = new LinkedList<String>();
classList.add(className);
ClassContainer classContainer = mock(ClassContainer.class, Mockito.RETURNS_DEEP_STUBS);
when(classContainer.getName()).thenReturn(className);
ClassContainer classContainerCurrent = mock(ClassContainer.class, Mockito.RETURNS_DEEP_STUBS);
when(classContainer.getName()).thenReturn(currentClass);
when(RacesAndClasses.getPlugin().getClassManager().getHolderByName(className)).thenReturn(classContainer);
when(RacesAndClasses.getPlugin().getClassManager().getHolderByName(currentClass)).thenReturn(classContainerCurrent);
when(RacesAndClasses.getPlugin().getClassManager().listAllVisibleHolders()).thenReturn(classList);
when(RacesAndClasses.getPlugin().getClassManager().getHolderOfPlayer(playerName)).thenReturn(classContainerCurrent);
when(RacesAndClasses.getPlugin().getClassManager().addPlayerToHolder(anyString(), anyString(), anyBoolean())).thenReturn(true);
sut.onCommand(player, null, "", new String[] {command, className});
verify(player).sendMessage(plugin_pre + "class_changed_to");
}
@Test
public void test_player_changing_class_chat_fails_internaly(){
when(RacesAndClasses.getPlugin().getPermissionManager().checkPermissions(any(CommandSender.class), anyString())).thenReturn(true);
when(RacesAndClasses.getPlugin().getClassManager().changePlayerHolder(anyString(), anyString(), anyBoolean())).thenReturn(false);
String command = "change";
String className = "class1";
String currentClass = "class2";
List<String> classList = new LinkedList<String>();
classList.add(className);
ClassContainer classContainer = mock(ClassContainer.class, Mockito.RETURNS_DEEP_STUBS);
when(classContainer.getName()).thenReturn(className);
ClassContainer classContainerCurrent = mock(ClassContainer.class, Mockito.RETURNS_DEEP_STUBS);
when(classContainer.getName()).thenReturn(currentClass);
when(RacesAndClasses.getPlugin().getClassManager().getHolderByName(className)).thenReturn(classContainer);
when(RacesAndClasses.getPlugin().getClassManager().getHolderByName(currentClass)).thenReturn(classContainerCurrent);
when(RacesAndClasses.getPlugin().getClassManager().listAllVisibleHolders()).thenReturn(classList);
when(RacesAndClasses.getPlugin().getClassManager().getHolderOfPlayer(playerName)).thenReturn(classContainerCurrent);
when(RacesAndClasses.getPlugin().getClassManager().addPlayerToHolder(anyString(), anyString(), anyBoolean())).thenReturn(true);
sut.onCommand(player, null, "", new String[] {command, className});
verify(player).sendMessage(plugin_pre + "class_not_exist");
}
@Test
public void test_player_changing_to_same_class_chat_fails(){
when(RacesAndClasses.getPlugin().getPermissionManager().checkPermissions(player, PermissionNode.changeClass)).thenReturn(true);
when(RacesAndClasses.getPlugin().getPermissionManager().checkPermissions(any(CommandSender.class), anyString())).thenReturn(true);
String command = "change";
String className = "class1";
List<String> classList = new LinkedList<String>();
classList.add(className);
ClassContainer classContainer = mock(ClassContainer.class, Mockito.RETURNS_DEEP_STUBS);
when(classContainer.getName()).thenReturn(className);
when(RacesAndClasses.getPlugin().getClassManager().getHolderByName(className)).thenReturn(classContainer);
when(RacesAndClasses.getPlugin().getClassManager().listAllVisibleHolders()).thenReturn(classList);
when(RacesAndClasses.getPlugin().getClassManager().getHolderOfPlayer(playerName)).thenReturn(classContainer);
when(RacesAndClasses.getPlugin().getClassManager().addPlayerToHolder(anyString(), anyString(), anyBoolean())).thenReturn(true);
sut.onCommand(player, null, "", new String[] {command, className});
verify(player).sendMessage(plugin_pre + "change_to_same_holder");
}
@Test
public void test_player_changing_class_chat_fails_because_has_no_class(){
when(RacesAndClasses.getPlugin().getPermissionManager().checkPermissions(player, PermissionNode.changeClass)).thenReturn(true);
when(RacesAndClasses.getPlugin().getPermissionManager().checkPermissions(any(CommandSender.class), anyString())).thenReturn(true);
String command = "change";
String className = "class1";
List<String> classList = new LinkedList<String>();
classList.add(className);
ClassContainer classContainer = mock(ClassContainer.class, Mockito.RETURNS_DEEP_STUBS);
when(classContainer.getName()).thenReturn(className);
when(RacesAndClasses.getPlugin().getClassManager().getHolderByName(className)).thenReturn(classContainer);
when(RacesAndClasses.getPlugin().getClassManager().listAllVisibleHolders()).thenReturn(classList);
when(RacesAndClasses.getPlugin().getClassManager().getHolderOfPlayer(playerName)).thenReturn(null);
sut.onCommand(player, null, "", new String[] {command, className});
verify(player).sendMessage(plugin_pre + "no_class_on_change");
}
@Test
public void test_player_changing_class_chat_fails_because_not_exist_class(){
when(RacesAndClasses.getPlugin().getPermissionManager().checkPermissions(player, PermissionNode.changeClass)).thenReturn(true);
when(RacesAndClasses.getPlugin().getPermissionManager().checkPermissions(any(CommandSender.class), anyString())).thenReturn(true);
String command = "change";
String className = "class1";
ClassContainer classContainer = mock(ClassContainer.class, Mockito.RETURNS_DEEP_STUBS);
when(RacesAndClasses.getPlugin().getClassManager().getHolderOfPlayer(playerName)).thenReturn(classContainer);
sut.onCommand(player, null, "", new String[] {command, className});
verify(player).sendMessage(plugin_pre + "class_not_exist");
}
@Test
public void test_player_changing_class_chat_without_permissions_fails(){
String command = "change";
String className = "class1";
when(RacesAndClasses.getPlugin().getClassManager().getHolderOfPlayer(playerName)).thenReturn(null);
sut.onCommand(player, null, "", new String[] {command, className});
verify(player, never()).sendMessage(anyString());
verify(RacesAndClasses.getPlugin().getPermissionManager()).checkPermissions(player, PermissionNode.changeClass);
}
}