package org.fenixedu.bennu.core.example.groups;
import pt.ist.fenixframework.FenixFramework;
import pt.ist.fenixframework.test.core.FenixFrameworkRunner;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import org.fenixedu.bennu.core.domain.User;
import org.fenixedu.bennu.core.domain.exceptions.BennuCoreDomainException;
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;
@RunWith(FenixFrameworkRunner.class)
public class TestExpressionCornerCases {
private static final String USERNAME = "foo@bar.com";
private static final String QUOTED_USERNAME = "foo'bar";
@BeforeClass
public static void setupUsers() {
ManualGroupRegister.ensure();
FenixFramework.atomic(() -> {
new User(USERNAME, ManualGroupRegister.newProfile());
new User(QUOTED_USERNAME, ManualGroupRegister.newProfile());
});
}
@Test
public void test() {
try {
assertEquals(Group.parse("anyone && nobody").getExpression(), "nobody");
fail();
} catch (BennuCoreDomainException e) {
}
assertEquals(Group.parse("anyone & nobody | nobody").getExpression(), "nobody");
assertEquals(Group.parse("(anyone & anyone) | nobody").getExpression(), "anyone");
}
@Test
public void testGroupArgumentsAreProperlyEscaped() {
User user = User.findByUsername(USERNAME);
Group group = user.groupOf();
assertEquals("U('" + USERNAME + "')", group.getExpression());
Group otherGroup = Group.parse(group.getExpression());
assertEquals(group, otherGroup);
User quotedUser = User.findByUsername(QUOTED_USERNAME);
assertEquals(quotedUser.groupOf(), Group.parse(quotedUser.groupOf().getExpression()));
}
}