diff --git a/pom.xml b/pom.xml index 034a115ad..86849a538 100644 --- a/pom.xml +++ b/pom.xml @@ -68,6 +68,13 @@ jar compile + + + org.mockito + mockito-core + 1.9.0-rc1 + test + diff --git a/src/test/java/com/sk89q/wepif/DinnerPermsResolverTest.java b/src/test/java/com/sk89q/wepif/DinnerPermsResolverTest.java new file mode 100644 index 000000000..2620715e5 --- /dev/null +++ b/src/test/java/com/sk89q/wepif/DinnerPermsResolverTest.java @@ -0,0 +1,68 @@ +package com.sk89q.wepif; + +import org.bukkit.Server; +import org.bukkit.plugin.PluginManager; +import org.junit.Before; +import org.junit.Test; +import static org.junit.Assert.*; + +import static org.mockito.Mockito.*; + +public class DinnerPermsResolverTest { + private DinnerPermsResolver resolver; + + @Before + public void setUp() { + Server server = mock(Server.class); + when(server.getPluginManager()).thenReturn(mock(PluginManager.class)); + resolver = new DinnerPermsResolver(server); + } + + @Test + public void testBasicResolving() { + final TestOfflinePermissible permissible = new TestOfflinePermissible(); + permissible.setPermission("testperm.test1", true); + assertTrue(resolver.hasPermission(permissible, "testperm.test1")); + assertFalse(resolver.hasPermission(permissible, "testperm.somethingelse")); + assertFalse(resolver.hasPermission(permissible, "testperm.test1.anything")); + assertFalse(resolver.hasPermission(permissible, "completely.unrelated")); + permissible.clearPermissions(); + } + + @Test + public void testBasicWildcardResolution() { + final TestOfflinePermissible permissible = new TestOfflinePermissible(); + permissible.setPermission("commandbook.spawnmob.*", true); + assertTrue(resolver.hasPermission(permissible, "commandbook.spawnmob.pig")); + assertTrue(resolver.hasPermission(permissible, "commandbook.spawnmob.spider")); + assertTrue(resolver.hasPermission(permissible, "commandbook.spawnmob.spider.skeleton")); + permissible.clearPermissions(); + } + + @Test + public void testNegatingNodes() { + final TestOfflinePermissible permissible = new TestOfflinePermissible(); + permissible.setPermission("commandbook.*", true); + permissible.setPermission("commandbook.cuteasianboys", false); + permissible.setPermission("commandbook.warp.*", false); + permissible.setPermission("commandbook.warp.create", true); + + assertTrue(resolver.hasPermission(permissible, "commandbook.motd")); + assertFalse(resolver.hasPermission(permissible, "commandbook.cuteasianboys")); + assertFalse(resolver.hasPermission(permissible, "commandbook.warp.remove")); + assertTrue(resolver.hasPermission(permissible, "commandbook.warp.create")); + + permissible.clearPermissions(); + } + + + @Test + public void testInGroup() { + final TestOfflinePermissible permissible = new TestOfflinePermissible(); + permissible.setPermission("group.a", true); + permissible.setPermission("group.b", true); + assertTrue(resolver.inGroup(permissible, "a")); + assertTrue(resolver.inGroup(permissible, "b")); + assertFalse(resolver.inGroup(permissible, "c")); + } +} diff --git a/src/test/java/com/sk89q/wepif/TestOfflinePermissible.java b/src/test/java/com/sk89q/wepif/TestOfflinePermissible.java new file mode 100644 index 000000000..2f833b9d8 --- /dev/null +++ b/src/test/java/com/sk89q/wepif/TestOfflinePermissible.java @@ -0,0 +1,134 @@ +package com.sk89q.wepif; + +import org.bukkit.OfflinePlayer; +import org.bukkit.entity.Player; +import org.bukkit.permissions.*; +import org.bukkit.plugin.Plugin; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +public class TestOfflinePermissible implements OfflinePlayer, Permissible { + private boolean op; + + private final Map assignedPermissions = new HashMap(); + + public boolean isOp() { + return op; + } + + public void setOp(boolean b) { + this.op = b; + } + + public boolean isPermissionSet(String s) { + return assignedPermissions.containsKey(s.toLowerCase()); + } + + public boolean isPermissionSet(Permission permission) { + return isPermissionSet(permission.getName()); + } + + public boolean hasPermission(String s) { + if (isPermissionSet(s)) { + return assignedPermissions.get(s.toLowerCase()); + } + return false; + } + + public boolean hasPermission(Permission permission) { + return hasPermission(permission.getName()); + } + + public PermissionAttachment addAttachment(Plugin plugin, String s, boolean b) { + throw new UnsupportedOperationException("Not supported yet."); + } + + public PermissionAttachment addAttachment(Plugin plugin) { + throw new UnsupportedOperationException("Not supported yet."); + } + + public PermissionAttachment addAttachment(Plugin plugin, String s, boolean b, int i) { + throw new UnsupportedOperationException("Not supported yet."); + } + + public PermissionAttachment addAttachment(Plugin plugin, int i) { + throw new UnsupportedOperationException("Not supported yet."); + } + + public void removeAttachment(PermissionAttachment permissionAttachment) { + throw new UnsupportedOperationException("Not supported yet."); + } + + public void recalculatePermissions() { + throw new UnsupportedOperationException("Not supported yet."); + } + + public Set getEffectivePermissions() { + Set ret = new HashSet(); + for (Map.Entry entry : assignedPermissions.entrySet()) { + ret.add(new PermissionAttachmentInfo(this, entry.getKey(), null, entry.getValue())); + } + return ret; + } + + public void setPermission(String permission, boolean value) { + assignedPermissions.put(permission.toLowerCase(), value); + } + + public void unsetPermission(String permission) { + assignedPermissions.remove(permission.toLowerCase()); + } + + public void clearPermissions() { + assignedPermissions.clear(); + } + + // -- Unneeded OfflinePlayer methods + + public boolean isOnline() { + return false; + } + + public String getName() { + return "Tester"; + } + + public boolean isBanned() { + throw new UnsupportedOperationException("Not supported yet."); + } + + public void setBanned(boolean b) { + throw new UnsupportedOperationException("Not supported yet."); + } + + public boolean isWhitelisted() { + throw new UnsupportedOperationException("Not supported yet."); + } + + public void setWhitelisted(boolean b) { + throw new UnsupportedOperationException("Not supported yet."); + } + + public Player getPlayer() { + throw new UnsupportedOperationException("Not supported yet."); + } + + public long getFirstPlayed() { + throw new UnsupportedOperationException("Not supported yet."); + } + + public long getLastPlayed() { + throw new UnsupportedOperationException("Not supported yet."); + } + + public boolean hasPlayedBefore() { + throw new UnsupportedOperationException("Not supported yet."); + } + + public Map serialize() { + throw new UnsupportedOperationException("Not supported yet."); + } +}