arguments = Arrays.asList(section.getName().toUpperCase(), "test");
+
+ // when
+ command.executeCommand(sender, arguments);
+
+ // then
+ verify(permissionsManager).hasPermission(sender, section.getRequiredPermission());
+ verify(section, never()).execute(any(CommandSender.class), anyList());
+ verify(sender).sendMessage(argThat(containsString("You don't have permission")));
+ }
+}
diff --git a/src/test/java/fr/xephi/authme/command/executable/authme/debug/HasPermissionCheckerTest.java b/src/test/java/fr/xephi/authme/command/executable/authme/debug/HasPermissionCheckerTest.java
index 9f7c6a92..4bd8eab1 100644
--- a/src/test/java/fr/xephi/authme/command/executable/authme/debug/HasPermissionCheckerTest.java
+++ b/src/test/java/fr/xephi/authme/command/executable/authme/debug/HasPermissionCheckerTest.java
@@ -20,9 +20,9 @@ import java.util.stream.Collectors;
import static java.util.Arrays.asList;
import static java.util.Collections.emptyList;
+import static org.hamcrest.Matchers.containsInAnyOrder;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.hasSize;
import static org.junit.Assert.assertThat;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.atLeast;
@@ -55,8 +55,7 @@ public class HasPermissionCheckerTest {
.collect(Collectors.toList());
// when / then
- assertThat(HasPermissionChecker.PERMISSION_NODE_CLASSES.containsAll(permissionClasses), equalTo(true));
- assertThat(HasPermissionChecker.PERMISSION_NODE_CLASSES, hasSize(permissionClasses.size()));
+ assertThat(HasPermissionChecker.PERMISSION_NODE_CLASSES, containsInAnyOrder(permissionClasses.toArray()));
}
@Test
diff --git a/src/test/java/fr/xephi/authme/command/executable/register/RegisterCommandTest.java b/src/test/java/fr/xephi/authme/command/executable/register/RegisterCommandTest.java
index 6224a606..d345ca8e 100644
--- a/src/test/java/fr/xephi/authme/command/executable/register/RegisterCommandTest.java
+++ b/src/test/java/fr/xephi/authme/command/executable/register/RegisterCommandTest.java
@@ -1,6 +1,5 @@
package fr.xephi.authme.command.executable.register;
-import fr.xephi.authme.ReflectionTestUtils;
import fr.xephi.authme.TestHelper;
import fr.xephi.authme.mail.EmailService;
import fr.xephi.authme.message.MessageKey;
@@ -10,7 +9,6 @@ import fr.xephi.authme.process.register.RegistrationType;
import fr.xephi.authme.process.register.executors.EmailRegisterParams;
import fr.xephi.authme.process.register.executors.PasswordRegisterParams;
import fr.xephi.authme.process.register.executors.RegistrationMethod;
-import fr.xephi.authme.process.register.executors.RegistrationParameters;
import fr.xephi.authme.process.register.executors.TwoFactorRegisterParams;
import fr.xephi.authme.security.HashAlgorithm;
import fr.xephi.authme.service.CommonService;
@@ -20,9 +18,6 @@ import fr.xephi.authme.settings.properties.SecuritySettings;
import org.bukkit.command.BlockCommandSender;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
-import org.hamcrest.Description;
-import org.hamcrest.Matcher;
-import org.hamcrest.TypeSafeMatcher;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -31,16 +26,11 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
+import static fr.xephi.authme.IsEqualByReflectionMatcher.isEqualTo;
import static org.hamcrest.Matchers.containsString;
-import static org.junit.Assert.fail;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.BDDMockito.given;
@@ -306,56 +296,4 @@ public class RegisterCommandTest {
verify(management).performRegister(eq(RegistrationMethod.PASSWORD_REGISTRATION),
argThat(isEqualTo(PasswordRegisterParams.of(player, "myPass", null))));
}
-
-
- // TODO ljacqu 20170317: Document and extract as util
-
- private static Matcher
isEqualTo(P expected) {
- return new TypeSafeMatcher
() {
- @Override
- protected boolean matchesSafely(RegistrationParameters item) {
- assertAreParamsEqual(expected, item);
- return true;
- }
-
- @Override
- public void describeTo(Description description) {
- description.appendText("parameters " + expected);
- }
- };
- }
-
- private static void assertAreParamsEqual(RegistrationParameters lhs, RegistrationParameters rhs) {
- if (lhs.getClass() != rhs.getClass()) {
- fail("Params classes don't match, got " + lhs.getClass().getSimpleName()
- + " and " + rhs.getClass().getSimpleName());
- }
-
- List fieldsToCheck = getFields(lhs);
- for (Field field : fieldsToCheck) {
- Object lhsValue = ReflectionTestUtils.getFieldValue(field, lhs);
- Object rhsValue = ReflectionTestUtils.getFieldValue(field, rhs);
- if (!Objects.equals(lhsValue, rhsValue)) {
- fail("Field '" + field.getName() + "' does not have same value: '"
- + lhsValue + "' vs. '" + rhsValue + "'");
- }
- }
- }
-
- private static List getFields(RegistrationParameters params) {
- List fields = new ArrayList<>();
- Class> currentClass = params.getClass();
- while (currentClass != null) {
- for (Field f : currentClass.getDeclaredFields()) {
- if (!Modifier.isStatic(f.getModifiers())) {
- fields.add(f);
- }
- }
- if (currentClass == RegistrationParameters.class) {
- break;
- }
- currentClass = currentClass.getSuperclass();
- }
- return fields;
- }
}
diff --git a/src/test/java/fr/xephi/authme/permission/AbstractPermissionsEnumTest.java b/src/test/java/fr/xephi/authme/permission/AbstractPermissionsEnumTest.java
new file mode 100644
index 00000000..4b327ec4
--- /dev/null
+++ b/src/test/java/fr/xephi/authme/permission/AbstractPermissionsEnumTest.java
@@ -0,0 +1,52 @@
+package fr.xephi.authme.permission;
+
+import org.junit.Test;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import static org.junit.Assert.fail;
+
+/**
+ * Has common tests for enums implementing {@link PermissionNode}.
+ */
+public abstract class AbstractPermissionsEnumTest {
+
+ @Test
+ public void shouldAllStartWitRequiredPrefix() {
+ // given
+ String requiredPrefix = getRequiredPrefix();
+
+ // when/then
+ for (PermissionNode permission : getPermissionNodes()) {
+ if (!permission.getNode().startsWith(requiredPrefix)) {
+ fail("The permission '" + permission + "' does not start with the required prefix '"
+ + requiredPrefix + "'");
+ }
+ }
+ }
+
+ @Test
+ public void shouldHaveUniqueNodes() {
+ // given
+ Set nodes = new HashSet<>();
+
+ // when/then
+ for (PermissionNode permission : getPermissionNodes()) {
+ if (!nodes.add(permission.getNode())) {
+ fail("More than one enum value defines the node '" + permission.getNode() + "'");
+ }
+ }
+ }
+
+ /**
+ * @return the permission nodes to test
+ */
+ protected abstract PermissionNode[] getPermissionNodes();
+
+ /**
+ * @return text with which all permission nodes must start with
+ */
+ protected abstract String getRequiredPrefix();
+
+}
diff --git a/src/test/java/fr/xephi/authme/permission/AdminPermissionTest.java b/src/test/java/fr/xephi/authme/permission/AdminPermissionTest.java
index 3cfa0e27..f3e4f1fd 100644
--- a/src/test/java/fr/xephi/authme/permission/AdminPermissionTest.java
+++ b/src/test/java/fr/xephi/authme/permission/AdminPermissionTest.java
@@ -1,42 +1,18 @@
package fr.xephi.authme.permission;
-import org.junit.Test;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import static org.junit.Assert.fail;
-
/**
* Test for {@link AdminPermission}.
*/
-public class AdminPermissionTest {
+public class AdminPermissionTest extends AbstractPermissionsEnumTest {
- @Test
- public void shouldStartWithAuthMeAdminPrefix() {
- // given
- String requiredPrefix = "authme.admin.";
-
- // when/then
- for (AdminPermission permission : AdminPermission.values()) {
- if (!permission.getNode().startsWith(requiredPrefix)) {
- fail("The permission '" + permission + "' does not start with the required prefix '"
- + requiredPrefix + "'");
- }
- }
+ @Override
+ protected PermissionNode[] getPermissionNodes() {
+ return AdminPermission.values();
}
- @Test
- public void shouldHaveUniqueNodes() {
- // given
- Set nodes = new HashSet<>();
-
- // when/then
- for (AdminPermission permission : AdminPermission.values()) {
- if (!nodes.add(permission.getNode())) {
- fail("More than one enum value defines the node '" + permission.getNode() + "'");
- }
- }
+ @Override
+ protected String getRequiredPrefix() {
+ return "authme.admin.";
}
}
diff --git a/src/test/java/fr/xephi/authme/permission/DebugSectionPermissionsTest.java b/src/test/java/fr/xephi/authme/permission/DebugSectionPermissionsTest.java
new file mode 100644
index 00000000..3e0a9f01
--- /dev/null
+++ b/src/test/java/fr/xephi/authme/permission/DebugSectionPermissionsTest.java
@@ -0,0 +1,17 @@
+package fr.xephi.authme.permission;
+
+/**
+ * Test for {@link DebugSectionPermissions}.
+ */
+public class DebugSectionPermissionsTest extends AbstractPermissionsEnumTest {
+
+ @Override
+ protected PermissionNode[] getPermissionNodes() {
+ return DebugSectionPermissions.values();
+ }
+
+ @Override
+ protected String getRequiredPrefix() {
+ return "authme.debug.";
+ }
+}
diff --git a/src/test/java/fr/xephi/authme/permission/PermissionConsistencyTest.java b/src/test/java/fr/xephi/authme/permission/PermissionConsistencyTest.java
index 757319d5..6d7a37e2 100644
--- a/src/test/java/fr/xephi/authme/permission/PermissionConsistencyTest.java
+++ b/src/test/java/fr/xephi/authme/permission/PermissionConsistencyTest.java
@@ -31,7 +31,7 @@ public class PermissionConsistencyTest {
/** Wildcard permissions (present in plugin.yml but not in the codebase). */
private static final Set PLUGIN_YML_PERMISSIONS_WILDCARDS =
- ImmutableSet.of("authme.admin.*", "authme.player.*", "authme.player.email");
+ ImmutableSet.of("authme.admin.*", "authme.player.*", "authme.player.email", "authme.debug");
/** Name of the fields that make up a permission entry in plugin.yml. */
private static final Set PERMISSION_FIELDS = ImmutableSet.of("description", "default", "children");
diff --git a/src/test/java/fr/xephi/authme/permission/PlayerPermissionTest.java b/src/test/java/fr/xephi/authme/permission/PlayerPermissionTest.java
index ad8f6fe9..32a45b98 100644
--- a/src/test/java/fr/xephi/authme/permission/PlayerPermissionTest.java
+++ b/src/test/java/fr/xephi/authme/permission/PlayerPermissionTest.java
@@ -1,41 +1,17 @@
package fr.xephi.authme.permission;
-import org.junit.Test;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import static org.junit.Assert.fail;
-
/**
* Test for {@link PlayerPermission}.
*/
-public class PlayerPermissionTest {
+public class PlayerPermissionTest extends AbstractPermissionsEnumTest {
- @Test
- public void shouldStartWithPlayerPrefix() {
- // given
- String playerBranch = "authme.player.";
-
- // when/then
- for (PlayerPermission permission : PlayerPermission.values()) {
- if (!permission.getNode().startsWith(playerBranch)) {
- fail("The permission '" + permission + "' should use a node with the player-specific branch '"
- + playerBranch + "'");
- }
- }
+ @Override
+ protected PermissionNode[] getPermissionNodes() {
+ return PlayerPermission.values();
}
- @Test
- public void shouldHaveUniqueNodes() {
- // given
- Set nodes = new HashSet<>();
-
- // when/then
- for (PlayerPermission permission : PlayerPermission.values()) {
- if (!nodes.add(permission.getNode())) {
- fail("More than one enum value defines the node '" + permission.getNode() + "'");
- }
- }
+ @Override
+ protected String getRequiredPrefix() {
+ return "authme.player.";
}
}
diff --git a/src/test/java/fr/xephi/authme/permission/PlayerStatePermissionTest.java b/src/test/java/fr/xephi/authme/permission/PlayerStatePermissionTest.java
index 6c3e3d16..56e5e1ce 100644
--- a/src/test/java/fr/xephi/authme/permission/PlayerStatePermissionTest.java
+++ b/src/test/java/fr/xephi/authme/permission/PlayerStatePermissionTest.java
@@ -2,7 +2,7 @@ package fr.xephi.authme.permission;
import org.junit.Test;
-import java.util.HashSet;
+import java.util.Collection;
import java.util.Set;
import static com.google.common.collect.Sets.newHashSet;
@@ -11,39 +11,32 @@ import static org.junit.Assert.fail;
/**
* Test for {@link PlayerStatePermission}.
*/
-public class PlayerStatePermissionTest {
+public class PlayerStatePermissionTest extends AbstractPermissionsEnumTest {
@Test
- public void shouldStartWithAuthMeAdminPrefix() {
+ public void shouldNotStartWithOtherPrefixes() {
// given
- String requiredPrefix = "authme.";
- Set forbiddenPrefixes = newHashSet("authme.player", "authme.admin");
+ Set forbiddenPrefixes = newHashSet("authme.player", "authme.admin", "authme.debug");
// when/then
for (PlayerStatePermission permission : PlayerStatePermission.values()) {
- if (!permission.getNode().startsWith(requiredPrefix)) {
- fail("The permission '" + permission + "' does not start with the required prefix '"
- + requiredPrefix + "'");
- } else if (hasAnyPrefix(permission.getNode(), forbiddenPrefixes)) {
+ if (startsWithAny(permission.getNode(), forbiddenPrefixes)) {
fail("The permission '" + permission + "' should not start with any of " + forbiddenPrefixes);
}
}
}
- @Test
- public void shouldHaveUniqueNodes() {
- // given
- Set nodes = new HashSet<>();
-
- // when/then
- for (PlayerStatePermission permission : PlayerStatePermission.values()) {
- if (!nodes.add(permission.getNode())) {
- fail("More than one enum value defines the node '" + permission.getNode() + "'");
- }
- }
+ @Override
+ protected PermissionNode[] getPermissionNodes() {
+ return PlayerStatePermission.values();
}
- private static boolean hasAnyPrefix(String node, Set prefixes) {
+ @Override
+ protected String getRequiredPrefix() {
+ return "authme.";
+ }
+
+ private static boolean startsWithAny(String node, Collection prefixes) {
for (String prefix : prefixes) {
if (node.startsWith(prefix)) {
return true;
@@ -51,5 +44,4 @@ public class PlayerStatePermissionTest {
}
return false;
}
-
}
diff --git a/src/test/java/fr/xephi/authme/service/AntiBotServiceTest.java b/src/test/java/fr/xephi/authme/service/AntiBotServiceTest.java
index dd6b6c78..f1bb641d 100644
--- a/src/test/java/fr/xephi/authme/service/AntiBotServiceTest.java
+++ b/src/test/java/fr/xephi/authme/service/AntiBotServiceTest.java
@@ -11,7 +11,6 @@ import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.properties.ProtectionSettings;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitTask;
-import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
@@ -82,7 +81,6 @@ public class AntiBotServiceTest {
}
@Test
- @Ignore // TODO ljacqu 20161030: Fix test
public void shouldActivateAntibot() {
// given - listening antibot
runSyncDelayedTaskWithDelay(bukkitService);
diff --git a/src/test/java/tools/docs/permissions/PermissionNodesGatherer.java b/src/test/java/tools/docs/permissions/PermissionNodesGatherer.java
index e3635512..f177cbc6 100644
--- a/src/test/java/tools/docs/permissions/PermissionNodesGatherer.java
+++ b/src/test/java/tools/docs/permissions/PermissionNodesGatherer.java
@@ -25,7 +25,7 @@ public class PermissionNodesGatherer {
* the second group should contain the enum value.
*/
private static final Pattern JAVADOC_WITH_ENUM_PATTERN = Pattern.compile(
- "/\\*\\*\\s+\\*" // Match starting '/**' and the '*' on the next line
+ "/\\*\\*(\\s+\\*)?" // Match starting '/**' and optional whitespace with a '*'
+ "(.*?)\\s+\\*/" // Capture everything until we encounter '*/'
+ "\\s+([A-Z_]+)\\("); // Match the enum name (e.g. 'LOGIN'), until before the first '('
@@ -87,8 +87,8 @@ public class PermissionNodesGatherer {
Map allMatches = new HashMap<>();
Matcher matcher = JAVADOC_WITH_ENUM_PATTERN.matcher(source);
while (matcher.find()) {
- String description = matcher.group(1);
- String enumValue = matcher.group(2);
+ String description = matcher.group(2);
+ String enumValue = matcher.group(3);
allMatches.put(enumValue, description);
}
return allMatches;
diff --git a/src/test/java/tools/filegeneration/GeneratePluginYml.java b/src/test/java/tools/filegeneration/GeneratePluginYml.java
index b4a017c6..8fdc779d 100644
--- a/src/test/java/tools/filegeneration/GeneratePluginYml.java
+++ b/src/test/java/tools/filegeneration/GeneratePluginYml.java
@@ -32,8 +32,9 @@ public class GeneratePluginYml implements AutoToolTask {
private static final Map WILDCARD_PERMISSIONS = ImmutableMap.of(
"authme.player.*", "Gives access to all player commands",
+ "authme.player.email", "Gives access to all email commands",
"authme.admin.*", "Gives access to all admin commands",
- "authme.player.email", "Gives access to all email commands");
+ "authme.debug", "Gives access to /authme debug and all its sections");
private List permissionNodes;