diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/project/ListProjectsIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/project/ListProjectsIT.java index a31a34c1d5..8bfb646a3c 100644 --- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/project/ListProjectsIT.java +++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/rest/project/ListProjectsIT.java @@ -22,10 +22,14 @@ import static org.junit.Assert.fail; import com.google.common.collect.Iterables; import com.google.gerrit.acceptance.AbstractDaemonTest; import com.google.gerrit.acceptance.NoHttpd; +import com.google.gerrit.acceptance.Sandboxed; import com.google.gerrit.acceptance.TestProjectInput; import com.google.gerrit.common.data.Permission; +import com.google.gerrit.extensions.api.projects.ConfigInfo; +import com.google.gerrit.extensions.api.projects.ConfigInput; import com.google.gerrit.extensions.api.projects.Projects.ListRequest; import com.google.gerrit.extensions.api.projects.Projects.ListRequest.FilterType; +import com.google.gerrit.extensions.client.ProjectState; import com.google.gerrit.extensions.common.ProjectInfo; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.reviewdb.client.Project; @@ -38,6 +42,7 @@ import java.util.Map; import org.junit.Test; @NoHttpd +@Sandboxed public class ListProjectsIT extends AbstractDaemonTest { @Inject private AllUsersName allUsers; @@ -190,6 +195,35 @@ public class ListProjectsIT extends AbstractDaemonTest { .inOrder(); } + @Test + public void listWithHiddenProject() throws Exception { + Project.NameKey hidden = createProject("project-to-hide"); + + // The project is included because it was not hidden yet + assertThatNameList(gApi.projects().list().get()) + .containsExactly(allProjects, allUsers, project, hidden) + .inOrder(); + + // Hide the project + ConfigInput input = new ConfigInput(); + input.state = ProjectState.HIDDEN; + ConfigInfo info = gApi.projects().name(hidden.get()).config(input); + assertThat(info.state).isEqualTo(input.state); + + // Project is still accessible directly + gApi.projects().name(hidden.get()).get(); + + // But is not included in the list + assertThatNameList(gApi.projects().list().get()) + .containsExactly(allProjects, allUsers, project) + .inOrder(); + + // ALL filter applies to type, and doesn't include hidden state + assertThatNameList(gApi.projects().list().withType(FilterType.ALL).get()) + .containsExactly(allProjects, allUsers, project) + .inOrder(); + } + private void assertBadRequest(ListRequest req) throws Exception { try { req.get();