package org.fenixedu.bennu.core.example.groups;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.util.stream.Collectors;
import org.fenixedu.bennu.core.domain.Bennu;
import org.fenixedu.bennu.core.domain.User;
import org.fenixedu.bennu.core.domain.groups.PersistentGroup;
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 TestUserGroup {
private static User user1;
private static User user2;
private static Group all;
@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());
}
all = Group.users(user1, user2);
});
}
@Test
public void creation() {
Group allv1 = Group.parse("U(user1, user2)");
Group allv2 = Group.parse("U(user2, user1)");
Group allv3 = Group.users(user1, user2);
Group allv4 = Group.users(user2, user1);
assertEquals(all, allv1);
assertEquals(all, allv2);
assertEquals(all, allv3);
assertEquals(all, allv4);
}
@Test
public void membership() {
assertEquals(all.getMembers().collect(Collectors.toSet()), Bennu.getInstance().getUserSet());
for (User user : Bennu.getInstance().getUserSet()) {
assertTrue(all.isMember(user));
}
assertFalse(all.isMember(null));
}
@Test
public void optimizations() {
Group one = user1.groupOf();
Group two = user2.groupOf();
assertEquals(one.and(two), Group.nobody());
assertEquals(all.and(two), two);
assertEquals(all.and(all), all);
assertEquals(one.or(two), all);
assertEquals(all.or(one), all);
assertEquals(all.or(all), all);
assertEquals(all.minus(Group.nobody()), all);
assertEquals(all.minus(one), two);
assertEquals(all.minus(one).minus(two), Group.nobody());
assertEquals(all.minus(all), Group.nobody());
assertEquals(all.grant(user1), all);
assertEquals(all.revoke(user1), two);
}
@Test
public void createPersistent() {
PersistentGroup allP = all.toPersistentGroup();
PersistentGroup allv1P = Group.parse("U(user1, user2)").toPersistentGroup();
PersistentGroup allv2P = Group.parse("U(user2, user1)").toPersistentGroup();
PersistentGroup allv3P = Group.users(user1, user2).toPersistentGroup();
PersistentGroup allv4P = Group.users(user2, user1).toPersistentGroup();
assertEquals(allP, allv1P);
assertEquals(allP, allv2P);
assertEquals(allP, allv3P);
assertEquals(allP, allv4P);
}
}