package org.fenixedu.bennu.core.example.groups; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import org.fenixedu.bennu.core.domain.User; import org.fenixedu.bennu.core.groups.Group; import org.fenixedu.bennu.core.groups.ManualGroupRegister; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import pt.ist.fenixframework.FenixFramework; import pt.ist.fenixframework.test.core.FenixFrameworkRunner; @RunWith(FenixFrameworkRunner.class) public class TestGroupMath { private static User user1; private static User user2; private static Group anonymous; private static Group anyone; private static Group logged; private static Group nobody; @BeforeClass public static void setupUsers() { ManualGroupRegister.ensure(); FenixFramework.atomic(() -> { user1 = User.findByUsername("user1"); if (user1 == null) { user1 = new User("user1", ManualGroupRegister.newProfile()); } user2 = User.findByUsername("user2"); if (user2 == null) { user2 = new User("user2", ManualGroupRegister.newProfile()); } }); } @BeforeClass public static void setup() { anonymous = Group.anonymous(); anyone = Group.anyone(); logged = Group.logged(); nobody = Group.nobody(); } @Test public void andMath() { try { anonymous.and(null); fail(); } catch (NullPointerException e) { } assertEquals(anonymous.and(anonymous), anonymous); assertEquals(anyone.and(anyone), anyone); assertEquals(logged.and(logged), logged); assertEquals(nobody.and(nobody), nobody); assertEquals(anonymous.and(anyone), anonymous); assertEquals(anonymous.and(logged), nobody); assertEquals(anonymous.and(nobody), nobody); assertEquals(anyone.and(anonymous), anonymous); assertEquals(anyone.and(logged), logged); assertEquals(anyone.and(nobody), nobody); assertEquals(logged.and(anonymous), nobody); assertEquals(logged.and(anyone), logged); assertEquals(logged.and(nobody), nobody); assertEquals(nobody.and(anonymous), nobody); assertEquals(nobody.and(anyone), nobody); assertEquals(nobody.and(logged), nobody); } @Test public void orMath() { try { anonymous.or(null); fail(); } catch (NullPointerException e) { } assertEquals(anonymous.or(anonymous), anonymous); assertEquals(anyone.or(anyone), anyone); assertEquals(logged.or(logged), logged); assertEquals(nobody.or(nobody), nobody); assertEquals(anonymous.or(anyone), anyone); assertEquals(anonymous.or(logged), anyone); assertEquals(anonymous.or(nobody), anonymous); assertEquals(anyone.or(anonymous), anyone); assertEquals(anyone.or(logged), anyone); assertEquals(anyone.or(nobody), anyone); assertEquals(logged.or(anonymous), anyone); assertEquals(logged.or(anyone), anyone); assertEquals(logged.or(nobody), logged); assertEquals(nobody.or(anonymous), anonymous); assertEquals(nobody.or(anyone), anyone); assertEquals(nobody.or(logged), logged); } @Test public void minusMath() { try { anonymous.minus(null); fail(); } catch (NullPointerException e) { } assertEquals(anonymous.minus(anonymous), nobody); assertEquals(anyone.minus(anyone), nobody); assertEquals(logged.minus(logged), nobody); assertEquals(nobody.minus(nobody), nobody); assertEquals(anonymous.minus(anyone), nobody); assertEquals(anonymous.minus(logged), anonymous); assertEquals(anonymous.minus(nobody), anonymous); assertEquals(anyone.minus(anonymous), logged); assertEquals(anyone.minus(logged), anonymous); assertEquals(anyone.minus(nobody), anyone); assertEquals(logged.minus(anonymous), logged); assertEquals(logged.minus(anyone), nobody); assertEquals(logged.minus(nobody), logged); assertEquals(nobody.minus(anonymous), nobody); assertEquals(nobody.minus(anyone), nobody); assertEquals(nobody.minus(logged), nobody); } @Test public void notMath() { assertEquals(anonymous.not(), logged); assertEquals(anyone.not(), nobody); assertEquals(logged.not(), anonymous); assertEquals(nobody.not(), anyone); assertEquals(nobody.not().not(), nobody); } @Test public void grantMath() { try { anonymous.grant(null); fail(); } catch (NullPointerException e) { } } @Test public void revokeMath() { try { anonymous.revoke(null); fail(); } catch (NullPointerException e) { } } @Test public void precedenceRules() { Group group = (Group.dynamic("managers").minus(user1.groupOf())).or(user1.groupOf()); Group parsedGroup = Group.parse(group.getExpression()); assertEquals("UnionGroup", parsedGroup.getClass().getSimpleName()); assertEquals("(#managers - U(user1)) | U(user1)", parsedGroup.getExpression()); } }