Add query operator that matches groups that are visible to all users

Change-Id: I161d66f26ace58a8e0d6a6183853936336ed0d15
Signed-off-by: Edwin Kempin <ekempin@google.com>
This commit is contained in:
Edwin Kempin
2017-01-04 12:59:25 +01:00
parent e661af0d43
commit b07a4f923e
4 changed files with 38 additions and 0 deletions

View File

@@ -22,6 +22,13 @@ inname:'NAMEPART'::
Matches groups that have a name part that starts with 'NAMEPART'
(case-insensitive).
[[is]]
[[is-visibleToAll]]
is:visibleToAll::
+
Matches groups that are in the groups options marked as visible to all
registered users.
[[name]]
name:'NAME'::
+

View File

@@ -48,6 +48,10 @@ public class GroupPredicates {
GroupQueryBuilder.FIELD_OWNER, owner);
}
public static Predicate<AccountGroup> isVisibleToAll() {
return new GroupPredicate(GroupField.IS_VISIBLE_TO_ALL, "1");
}
static class GroupPredicate extends IndexPredicate<AccountGroup> {
GroupPredicate(FieldDef<AccountGroup, ?> def, String value) {
super(def, value);

View File

@@ -75,6 +75,14 @@ public class GroupQueryBuilder extends QueryBuilder<AccountGroup> {
return GroupPredicates.owner(owner);
}
@Operator
public Predicate<AccountGroup> is(String value) throws QueryParseException {
if ("visibleToAll".equalsIgnoreCase(value)) {
return GroupPredicates.isVisibleToAll();
}
throw error("Invalid query");
}
@Operator
public Predicate<AccountGroup> limit(String query)
throws QueryParseException {

View File

@@ -241,6 +241,17 @@ public abstract class AbstractQueryGroupsTest extends GerritServerTests {
assertQuery("owner:" + ownerGroup.id, group, ownerGroup);
}
@Test
public void byIsVisibleToAll() throws Exception {
assertQuery("is:visibleToAll");
GroupInfo groupThatIsVisibleToAll =
createGroupThatIsVisibleToAll(name("group-that-is-visible-to-all"));
createGroup(name("group"));
assertQuery("is:visibleToAll", groupThatIsVisibleToAll);
}
@Test
public void withLimit() throws Exception {
GroupInfo group1 = createGroup(name("group1"));
@@ -318,6 +329,14 @@ public abstract class AbstractQueryGroupsTest extends GerritServerTests {
return gApi.groups().create(in).get();
}
protected GroupInfo createGroupThatIsVisibleToAll(String name)
throws Exception {
GroupInput in = new GroupInput();
in.name = name;
in.visibleToAll = true;
return gApi.groups().create(in).get();
}
protected GroupInfo getGroup(AccountGroup.UUID uuid) throws Exception {
return gApi.groups().id(uuid.get()).get();
}