package org.fenixedu.bennu.core.example.groups; import java.util.stream.Stream; import static org.junit.Assert.assertNotNull; import org.fenixedu.bennu.core.annotation.GroupArgument; import org.fenixedu.bennu.core.annotation.GroupOperator; import org.fenixedu.bennu.core.domain.User; import org.fenixedu.bennu.core.domain.exceptions.DomainException; import org.fenixedu.bennu.core.domain.groups.PersistentGroup; import org.fenixedu.bennu.core.groups.CustomGroup; import org.fenixedu.bennu.core.groups.CustomGroupRegistry; import org.fenixedu.bennu.core.groups.Group; import org.fenixedu.bennu.core.groups.GroupStrategy; import org.fenixedu.bennu.core.groups.ManualGroupRegister; import org.joda.time.DateTime; import org.junit.BeforeClass; import org.junit.Test; public class TestCustomGroup { @BeforeClass public static void setup() { ManualGroupRegister.ensure(); } @Test public void testNoArguments() { assertNotNull(Group.parse("after")); } @Test public void testBooleanArgument() { assertNotNull(Group.parse("after(inclusive=true)")); } @Test public void testDefaultArgument() { assertNotNull(Group.parse("after('2013')")); } @Test public void testAliasedArgument() { assertNotNull(Group.parse("after(things='abc')")); } @Test public void testMultiValueArguments() { assertNotNull(Group.parse("after(things=['a b c', def])")); } @Test public void testMultiValueArgumentsOnArrays() { assertNotNull(Group.parse("after(x1=['a b c', def])")); } @Test public void testEmptyMultiValueArgument() { assertNotNull(Group.parse("after(x1=[])")); } @GroupOperator("foo.bar") public static class GroupWithInvalidOperatorName extends GroupStrategy { @Override public String getPresentationName() { throw new UnsupportedOperationException(); } @Override public Stream<User> getMembers() { throw new UnsupportedOperationException(); } @Override public Stream<User> getMembers(DateTime when) { throw new UnsupportedOperationException(); } @Override public boolean isMember(User user) { throw new UnsupportedOperationException(); } @Override public boolean isMember(User user, DateTime when) { throw new UnsupportedOperationException(); } } @GroupOperator("foobar") public static class GroupWithInvalidFieldName extends GroupStrategy { @GroupArgument("invalid.field") private String thisFieldIsInvalid; @Override public String getPresentationName() { throw new UnsupportedOperationException(); } @Override public Stream<User> getMembers() { throw new UnsupportedOperationException(); } @Override public Stream<User> getMembers(DateTime when) { throw new UnsupportedOperationException(); } @Override public boolean isMember(User user) { throw new UnsupportedOperationException(); } @Override public boolean isMember(User user, DateTime when) { throw new UnsupportedOperationException(); } } @Test(expected = DomainException.class) public void testInvalidOperatorNameThrowsException() { CustomGroupRegistry.registerCustomGroup(GroupWithInvalidOperatorName.class); } @Test(expected = DomainException.class) public void testInvalidFieldNameThrowsException() { CustomGroupRegistry.registerCustomGroup(GroupWithInvalidFieldName.class); } }