Fixes handling of negative perms for value setting

https://github.com/BentoBoxWorld/Limits/issues/73#issuecomment-600748928
This commit is contained in:
tastybento 2020-03-18 14:18:38 -07:00
parent 1429c0a763
commit 1933d498f6
2 changed files with 32 additions and 0 deletions

View File

@ -306,6 +306,7 @@ public class User {
final String permPrefix = permissionPrefix + ".";
List<String> permissions = player.getEffectivePermissions().stream()
.filter(PermissionAttachmentInfo::getValue) // Must be a positive permission, not a negative one
.map(PermissionAttachmentInfo::getPermission)
.filter(permission -> permission.startsWith(permPrefix))
.collect(Collectors.toList());

View File

@ -473,10 +473,13 @@ public class UserTest {
Set<PermissionAttachmentInfo> permSet = new HashSet<>();
PermissionAttachmentInfo pai = mock(PermissionAttachmentInfo.class);
when(pai.getPermission()).thenReturn("bskyblock.max.3");
when(pai.getValue()).thenReturn(true);
PermissionAttachmentInfo pai2 = mock(PermissionAttachmentInfo.class);
when(pai2.getPermission()).thenReturn("bskyblock.max.7");
when(pai2.getValue()).thenReturn(true);
PermissionAttachmentInfo pai3 = mock(PermissionAttachmentInfo.class);
when(pai3.getPermission()).thenReturn("bskyblock.max.33");
when(pai3.getValue()).thenReturn(true);
permSet.add(pai);
permSet.add(pai2);
permSet.add(pai3);
@ -484,6 +487,30 @@ public class UserTest {
User u = User.getInstance(player);
assertEquals(33, u.getPermissionValue("bskyblock.max", 2));
}
/**
* Test for {@link User#getPermissionValue(String, int)}
*/
@Test
public void testGetPermissionValueNegativePerm() {
User.clearUsers();
Set<PermissionAttachmentInfo> permSet = new HashSet<>();
PermissionAttachmentInfo pai = mock(PermissionAttachmentInfo.class);
when(pai.getPermission()).thenReturn("bskyblock.max.3");
when(pai.getValue()).thenReturn(true);
PermissionAttachmentInfo pai2 = mock(PermissionAttachmentInfo.class);
when(pai2.getPermission()).thenReturn("bskyblock.max.7");
when(pai2.getValue()).thenReturn(true);
PermissionAttachmentInfo pai3 = mock(PermissionAttachmentInfo.class);
when(pai3.getPermission()).thenReturn("bskyblock.max.33");
when(pai3.getValue()).thenReturn(false); // Negative perm
permSet.add(pai);
permSet.add(pai2);
permSet.add(pai3);
when(player.getEffectivePermissions()).thenReturn(permSet);
User u = User.getInstance(player);
assertEquals(7, u.getPermissionValue("bskyblock.max", 2));
}
/**
* Test for {@link User#getPermissionValue(String, int)}
@ -505,10 +532,13 @@ public class UserTest {
Set<PermissionAttachmentInfo> permSet = new HashSet<>();
PermissionAttachmentInfo pai = mock(PermissionAttachmentInfo.class);
when(pai.getPermission()).thenReturn("bskyblock.max.3");
when(pai.getValue()).thenReturn(true);
PermissionAttachmentInfo pai2 = mock(PermissionAttachmentInfo.class);
when(pai2.getPermission()).thenReturn("bskyblock.max.7");
when(pai2.getValue()).thenReturn(true);
PermissionAttachmentInfo pai3 = mock(PermissionAttachmentInfo.class);
when(pai3.getPermission()).thenReturn("bskyblock.max.-1");
when(pai3.getValue()).thenReturn(true);
permSet.add(pai);
permSet.add(pai2);
permSet.add(pai3);
@ -546,6 +576,7 @@ public class UserTest {
User.clearUsers();
PermissionAttachmentInfo pai = mock(PermissionAttachmentInfo.class);
when(pai.getPermission()).thenReturn("bskyblock.max.3");
when(pai.getValue()).thenReturn(true);
when(player.getEffectivePermissions()).thenReturn(Collections.singleton(pai));
User u = User.getInstance(player);
assertEquals(3, u.getPermissionValue("bskyblock.max", 22));