#306 Create PlayerCommand abstract type

- Create PlayerCommand to handle player-only command checks centrally and consistently
- Adjust tests
This commit is contained in:
ljacqu
2015-12-26 19:47:47 +01:00
parent 74ceb66430
commit 27fee3ca64
25 changed files with 250 additions and 393 deletions
@@ -1,11 +1,9 @@
package fr.xephi.authme.command.executable.changepassword;
import fr.xephi.authme.AuthMe;
import fr.xephi.authme.ReflectionTestUtils;
import fr.xephi.authme.cache.auth.PlayerCache;
import fr.xephi.authme.command.CommandService;
import fr.xephi.authme.output.MessageKey;
import fr.xephi.authme.output.Messages;
import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.task.ChangePasswordTask;
import fr.xephi.authme.util.WrapperMock;
@@ -37,14 +35,14 @@ import static org.mockito.Mockito.when;
public class ChangePasswordCommandTest {
private WrapperMock wrapperMock;
private Messages messagesMock;
private PlayerCache cacheMock;
private CommandService commandService;
@Before
public void setUpMocks() {
wrapperMock = WrapperMock.createInstance();
messagesMock = wrapperMock.getMessages();
cacheMock = wrapperMock.getPlayerCache();
commandService = mock(CommandService.class);
// Only allow passwords with alphanumerical characters for the test
Settings.getPassRegex = "[a-zA-Z0-9]+";
@@ -60,7 +58,7 @@ public class ChangePasswordCommandTest {
ChangePasswordCommand command = new ChangePasswordCommand();
// when
command.executeCommand(sender, new ArrayList<String>(), mock(CommandService.class));
command.executeCommand(sender, new ArrayList<String>(), commandService);
// then
assertThat(wrapperMock.wasMockCalled(Server.class), equalTo(false));
@@ -73,10 +71,10 @@ public class ChangePasswordCommandTest {
ChangePasswordCommand command = new ChangePasswordCommand();
// when
command.executeCommand(sender, Arrays.asList("pass", "pass"), mock(CommandService.class));
command.executeCommand(sender, Arrays.asList("pass", "pass"), commandService);
// then
verify(messagesMock).send(sender, MessageKey.NOT_LOGGED_IN);
verify(commandService).send(sender, MessageKey.NOT_LOGGED_IN);
assertThat(wrapperMock.wasMockCalled(Server.class), equalTo(false));
}
@@ -87,10 +85,10 @@ public class ChangePasswordCommandTest {
ChangePasswordCommand command = new ChangePasswordCommand();
// when
command.executeCommand(sender, Arrays.asList("old123", "!pass"), mock(CommandService.class));
command.executeCommand(sender, Arrays.asList("old123", "!pass"), commandService);
// then
verify(messagesMock).send(sender, MessageKey.PASSWORD_MATCH_ERROR);
verify(commandService).send(sender, MessageKey.PASSWORD_MATCH_ERROR);
assertThat(wrapperMock.wasMockCalled(Server.class), equalTo(false));
}
@@ -102,10 +100,10 @@ public class ChangePasswordCommandTest {
ChangePasswordCommand command = new ChangePasswordCommand();
// when
command.executeCommand(sender, Arrays.asList("old_", "Tester"), mock(CommandService.class));
command.executeCommand(sender, Arrays.asList("old_", "Tester"), commandService);
// then
verify(messagesMock).send(sender, MessageKey.PASSWORD_IS_USERNAME_ERROR);
verify(commandService).send(sender, MessageKey.PASSWORD_IS_USERNAME_ERROR);
assertThat(wrapperMock.wasMockCalled(Server.class), equalTo(false));
}
@@ -117,10 +115,10 @@ public class ChangePasswordCommandTest {
Settings.passwordMaxLength = 3;
// when
command.executeCommand(sender, Arrays.asList("12", "test"), mock(CommandService.class));
command.executeCommand(sender, Arrays.asList("12", "test"), commandService);
// then
verify(messagesMock).send(sender, MessageKey.INVALID_PASSWORD_LENGTH);
verify(commandService).send(sender, MessageKey.INVALID_PASSWORD_LENGTH);
assertThat(wrapperMock.wasMockCalled(Server.class), equalTo(false));
}
@@ -132,10 +130,10 @@ public class ChangePasswordCommandTest {
Settings.getPasswordMinLen = 7;
// when
command.executeCommand(sender, Arrays.asList("oldverylongpassword", "tester"), mock(CommandService.class));
command.executeCommand(sender, Arrays.asList("oldverylongpassword", "tester"), commandService);
// then
verify(messagesMock).send(sender, MessageKey.INVALID_PASSWORD_LENGTH);
verify(commandService).send(sender, MessageKey.INVALID_PASSWORD_LENGTH);
assertThat(wrapperMock.wasMockCalled(Server.class), equalTo(false));
}
@@ -147,10 +145,10 @@ public class ChangePasswordCommandTest {
Settings.unsafePasswords = asList("test", "abc123");
// when
command.executeCommand(sender, Arrays.asList("oldpw", "abc123"), mock(CommandService.class));
command.executeCommand(sender, Arrays.asList("oldpw", "abc123"), commandService);
// then
verify(messagesMock).send(sender, MessageKey.PASSWORD_UNSAFE_ERROR);
verify(commandService).send(sender, MessageKey.PASSWORD_UNSAFE_ERROR);
assertThat(wrapperMock.wasMockCalled(Server.class), equalTo(false));
}
@@ -161,12 +159,12 @@ public class ChangePasswordCommandTest {
ChangePasswordCommand command = new ChangePasswordCommand();
// when
command.executeCommand(sender, Arrays.asList("abc123", "abc123"), mock(CommandService.class));
command.executeCommand(sender, Arrays.asList("abc123", "abc123"), commandService);
// then
verify(messagesMock, never()).send(eq(sender), any(MessageKey.class));
verify(commandService, never()).send(eq(sender), any(MessageKey.class));
ArgumentCaptor<ChangePasswordTask> taskCaptor = ArgumentCaptor.forClass(ChangePasswordTask.class);
verify(wrapperMock.getScheduler()).runTaskAsynchronously(any(AuthMe.class), taskCaptor.capture());
verify(commandService).runTaskAsynchronously(taskCaptor.capture());
ChangePasswordTask task = taskCaptor.getValue();
assertThat((String) ReflectionTestUtils.getFieldValue(ChangePasswordTask.class, task, "newPassword"),
equalTo("abc123"));
@@ -1,9 +1,7 @@
package fr.xephi.authme.command.executable.email;
import fr.xephi.authme.AuthMe;
import fr.xephi.authme.command.CommandService;
import fr.xephi.authme.process.Management;
import fr.xephi.authme.util.WrapperMock;
import org.bukkit.command.BlockCommandSender;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@@ -14,25 +12,21 @@ import org.mockito.Mockito;
import java.util.ArrayList;
import java.util.Arrays;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
/**
* Test for {@link AddEmailCommand}.
*/
public class AddEmailCommandTest {
private AuthMe authMeMock;
private Management managementMock;
private CommandService commandService;
@Before
public void setUpMocks() {
WrapperMock wrapper = WrapperMock.createInstance();
authMeMock = wrapper.getAuthMe();
managementMock = Mockito.mock(Management.class);
when(authMeMock.getManagement()).thenReturn(managementMock);
commandService = mock(CommandService.class);
}
@Test
@@ -42,10 +36,10 @@ public class AddEmailCommandTest {
AddEmailCommand command = new AddEmailCommand();
// when
command.executeCommand(sender, new ArrayList<String>(), mock(CommandService.class));
command.executeCommand(sender, new ArrayList<String>(), commandService);
// then
verify(authMeMock, never()).getManagement();
verify(commandService, never()).getManagement();
}
@Test
@@ -53,13 +47,14 @@ public class AddEmailCommandTest {
// given
Player sender = Mockito.mock(Player.class);
AddEmailCommand command = new AddEmailCommand();
Management management = mock(Management.class);
given(commandService.getManagement()).willReturn(management);
// when
command.executeCommand(sender, Arrays.asList("mail@example", "other_example"), mock(CommandService.class));
command.executeCommand(sender, Arrays.asList("mail@example", "other_example"), commandService);
// then
verify(authMeMock).getManagement();
verify(managementMock).performAddEmail(sender, "mail@example", "other_example");
verify(management).performAddEmail(sender, "mail@example", "other_example");
}
}
@@ -1,38 +1,31 @@
package fr.xephi.authme.command.executable.email;
import fr.xephi.authme.AuthMe;
import fr.xephi.authme.command.CommandService;
import fr.xephi.authme.process.Management;
import fr.xephi.authme.util.WrapperMock;
import org.bukkit.command.BlockCommandSender;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import java.util.ArrayList;
import java.util.Arrays;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
/**
* Test for {@link ChangeEmailCommand}.
*/
public class ChangeEmailCommandTest {
private AuthMe authMeMock;
private Management managementMock;
private CommandService commandService;
@Before
public void setUpMocks() {
WrapperMock wrapper = WrapperMock.createInstance();
authMeMock = wrapper.getAuthMe();
managementMock = mock(Management.class);
when(authMeMock.getManagement()).thenReturn(managementMock);
commandService = mock(CommandService.class);
}
@Test
@@ -42,10 +35,10 @@ public class ChangeEmailCommandTest {
ChangeEmailCommand command = new ChangeEmailCommand();
// when
command.executeCommand(sender, new ArrayList<String>(), mock(CommandService.class));
command.executeCommand(sender, new ArrayList<String>(), commandService);
// then
verify(authMeMock, never()).getManagement();
verify(commandService, never()).getManagement();
}
@Test
@@ -53,14 +46,14 @@ public class ChangeEmailCommandTest {
// given
Player sender = mock(Player.class);
ChangeEmailCommand command = new ChangeEmailCommand();
Management management = mock(Management.class);
given(commandService.getManagement()).willReturn(management);
// when
command.executeCommand(sender, Arrays.asList("new.mail@example.org", "old_mail@example.org"),
mock(CommandService.class));
command.executeCommand(sender, Arrays.asList("new.mail@example.org", "old_mail@example.org"), commandService);
// then
verify(authMeMock).getManagement();
verify(managementMock).performChangeEmail(sender, "new.mail@example.org", "old_mail@example.org");
verify(management).performChangeEmail(sender, "new.mail@example.org", "old_mail@example.org");
}
}
@@ -9,29 +9,32 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
import java.util.ArrayList;
import java.util.Collections;
import static org.mockito.Matchers.*;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsString;
import static org.mockito.BDDMockito.given;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
/**
* Test for {@link LoginCommand}.
*/
public class LoginCommandTest {
private static Management managementMock;
private CommandService commandService;
@Before
public void initializeAuthMeMock() {
WrapperMock wrapper = WrapperMock.createInstance();
WrapperMock.createInstance();
Settings.captchaLength = 10;
managementMock = mock(Management.class);
Mockito.when(wrapper.getAuthMe().getManagement()).thenReturn(managementMock);
commandService = mock(CommandService.class);
}
@Test
@@ -41,10 +44,13 @@ public class LoginCommandTest {
LoginCommand command = new LoginCommand();
// when
command.executeCommand(sender, new ArrayList<String>(), mock(CommandService.class));
command.executeCommand(sender, new ArrayList<String>(), commandService);
// then
Mockito.verify(managementMock, never()).performLogin(any(Player.class), anyString(), anyBoolean());
Mockito.verify(commandService, never()).getManagement();
ArgumentCaptor<String> messageCaptor = ArgumentCaptor.forClass(String.class);
verify(sender).sendMessage(messageCaptor.capture());
assertThat(messageCaptor.getValue(), containsString("only for players"));
}
@Test
@@ -52,12 +58,14 @@ public class LoginCommandTest {
// given
Player sender = mock(Player.class);
LoginCommand command = new LoginCommand();
Management management = mock(Management.class);
given(commandService.getManagement()).willReturn(management);
// when
command.executeCommand(sender, Collections.singletonList("password"), mock(CommandService.class));
command.executeCommand(sender, Collections.singletonList("password"), commandService);
// then
Mockito.verify(managementMock).performLogin(eq(sender), eq("password"), eq(false));
Mockito.verify(management).performLogin(eq(sender), eq("password"), eq(false));
}
}
@@ -1,6 +1,5 @@
package fr.xephi.authme.command.executable.logout;
import fr.xephi.authme.AuthMe;
import fr.xephi.authme.command.CommandService;
import fr.xephi.authme.process.Management;
import fr.xephi.authme.settings.Settings;
@@ -10,30 +9,30 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import org.mockito.ArgumentCaptor;
import java.util.ArrayList;
import java.util.Collections;
import static org.mockito.Matchers.any;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsString;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
/**
* Test for {@link LogoutCommand}.
*/
public class LogoutCommandTest {
private static Management managementMock;
private CommandService commandService;
@Before
public void initializeAuthMeMock() {
WrapperMock wrapper = WrapperMock.createInstance();
AuthMe pluginMock = wrapper.getAuthMe();
WrapperMock.createInstance();
Settings.captchaLength = 10;
managementMock = mock(Management.class);
Mockito.when(pluginMock.getManagement()).thenReturn(managementMock);
commandService = mock(CommandService.class);
}
@Test
@@ -43,10 +42,13 @@ public class LogoutCommandTest {
LogoutCommand command = new LogoutCommand();
// when
command.executeCommand(sender, new ArrayList<String>(), mock(CommandService.class));
command.executeCommand(sender, new ArrayList<String>(), commandService);
// then
Mockito.verify(managementMock, never()).performLogout(any(Player.class));
verify(commandService, never()).getManagement();
ArgumentCaptor<String> messageCaptor = ArgumentCaptor.forClass(String.class);
verify(sender).sendMessage(messageCaptor.capture());
assertThat(messageCaptor.getValue(), containsString("only for players"));
}
@Test
@@ -54,12 +56,14 @@ public class LogoutCommandTest {
// given
Player sender = mock(Player.class);
LogoutCommand command = new LogoutCommand();
Management management = mock(Management.class);
given(commandService.getManagement()).willReturn(management);
// when
command.executeCommand(sender, Collections.singletonList("password"), mock(CommandService.class));
command.executeCommand(sender, Collections.singletonList("password"), commandService);
// then
Mockito.verify(managementMock).performLogout(sender);
verify(management).performLogout(sender);
}
}
@@ -1,9 +1,8 @@
package fr.xephi.authme.command.executable.register;
import fr.xephi.authme.command.CommandService;
import fr.xephi.authme.process.Management;
import fr.xephi.authme.output.MessageKey;
import fr.xephi.authme.output.Messages;
import fr.xephi.authme.process.Management;
import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.util.WrapperMock;
import org.bukkit.command.BlockCommandSender;
@@ -12,15 +11,13 @@ import org.bukkit.entity.Player;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;
import java.util.ArrayList;
import java.util.Collections;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.containsString;
import static org.junit.Assert.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyString;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
@@ -30,17 +27,13 @@ import static org.mockito.Mockito.verify;
*/
public class RegisterCommandTest {
private static Management managementMock;
private static Messages messagesMock;
private CommandService commandService;
@Before
public void initializeAuthMeMock() {
WrapperMock wrapper = WrapperMock.createInstance();
messagesMock = wrapper.getMessages();
WrapperMock.createInstance();
Settings.captchaLength = 10;
managementMock = mock(Management.class);
Mockito.when(wrapper.getAuthMe().getManagement()).thenReturn(managementMock);
commandService = mock(CommandService.class);
}
@Test
@@ -48,15 +41,15 @@ public class RegisterCommandTest {
// given
CommandSender sender = mock(BlockCommandSender.class);
RegisterCommand command = new RegisterCommand();
ArgumentCaptor<String> messageCaptor = ArgumentCaptor.forClass(String.class);
// when
command.executeCommand(sender, new ArrayList<String>(), mock(CommandService.class));
command.executeCommand(sender, new ArrayList<String>(), commandService);
// then
verify(commandService, never()).getManagement();
ArgumentCaptor<String> messageCaptor = ArgumentCaptor.forClass(String.class);
verify(sender).sendMessage(messageCaptor.capture());
assertThat(messageCaptor.getValue().contains("Player Only!"), equalTo(true));
verify(managementMock, never()).performRegister(any(Player.class), anyString(), anyString());
assertThat(messageCaptor.getValue(), containsString("Player only!"));
}
@Test
@@ -66,11 +59,11 @@ public class RegisterCommandTest {
RegisterCommand command = new RegisterCommand();
// when
command.executeCommand(sender, new ArrayList<String>(), mock(CommandService.class));
command.executeCommand(sender, new ArrayList<String>(), commandService);
// then
verify(messagesMock).send(sender, MessageKey.USAGE_REGISTER);
verify(managementMock, never()).performRegister(any(Player.class), anyString(), anyString());
verify(commandService).send(sender, MessageKey.USAGE_REGISTER);
verify(commandService, never()).getManagement();
}
@Test
@@ -78,12 +71,14 @@ public class RegisterCommandTest {
// given
Player sender = mock(Player.class);
RegisterCommand command = new RegisterCommand();
Management management = mock(Management.class);
given(commandService.getManagement()).willReturn(management);
// when
command.executeCommand(sender, Collections.singletonList("password"), mock(CommandService.class));
command.executeCommand(sender, Collections.singletonList("password"), commandService);
// then
verify(managementMock).performRegister(sender, "password", "");
verify(management).performRegister(sender, "password", "");
}
}