ProjectWatchIT: Add tests for watching the All-Projects project
Watching the All-Projects project means watching all projects.
Change-Id: I71e3cc50497798d74938fe8f617c7fbed7e1e03c
Signed-off-by: Edwin Kempin <ekempin@google.com>
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/project/ProjectWatchIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/project/ProjectWatchIT.java
index abd84ef..93134d3 100644
--- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/project/ProjectWatchIT.java
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/server/project/ProjectWatchIT.java
@@ -19,6 +19,7 @@
import com.google.gerrit.acceptance.AbstractDaemonTest;
import com.google.gerrit.acceptance.NoHttpd;
import com.google.gerrit.acceptance.PushOneCommit;
+import com.google.gerrit.acceptance.Sandboxed;
import com.google.gerrit.acceptance.TestAccount;
import com.google.gerrit.extensions.client.ProjectWatchInfo;
import com.google.gerrit.extensions.restapi.RestApiException;
@@ -38,6 +39,7 @@
import java.util.List;
@NoHttpd
+@Sandboxed
public class ProjectWatchIT extends AbstractDaemonTest {
@Test
public void newPatchSetsNotifyConfig() throws Exception {
@@ -161,6 +163,80 @@
assertThat(m.body()).contains("Gerrit-PatchSet: 1\n");
}
+ @Test
+ public void watchAllProjects() throws Exception {
+ String anyProject = createProject("anyProject").get();
+ setApiUser(user);
+
+ // watch the All-Projects project to watch all projects
+ watch(allProjects.get(), null);
+
+ // push a change to any project -> should trigger email notification
+ setApiUser(admin);
+ TestRepository<InMemoryRepository> anyRepo =
+ cloneProject(new Project.NameKey(anyProject), admin);
+ PushOneCommit.Result r = pushFactory
+ .create(db, admin.getIdent(), anyRepo, "TRIGGER", "a", "a1")
+ .to("refs/for/master");
+ r.assertOkStatus();
+
+ // assert email notification
+ List<Message> messages = sender.getMessages();
+ assertThat(messages).hasSize(1);
+ Message m = messages.get(0);
+ assertThat(m.rcpt()).containsExactly(user.emailAddress);
+ assertThat(m.body()).contains("Change subject: TRIGGER\n");
+ assertThat(m.body()).contains("Gerrit-PatchSet: 1\n");
+ }
+
+ @Test
+ public void watchFileAllProjects() throws Exception {
+ String anyProject = createProject("anyProject").get();
+ setApiUser(user);
+
+ // watch file in All-Projects project as user to watch the file in all
+ // projects
+ watch(allProjects.get(), "file:a.txt");
+
+ // push a change to watched file in any project -> should trigger email
+ // notification for user
+ setApiUser(admin);
+ TestRepository<InMemoryRepository> anyRepo =
+ cloneProject(new Project.NameKey(anyProject), admin);
+ PushOneCommit.Result r = pushFactory
+ .create(db, admin.getIdent(), anyRepo, "TRIGGER", "a.txt", "a1")
+ .to("refs/for/master");
+ r.assertOkStatus();
+
+ // assert email notification for user
+ List<Message> messages = sender.getMessages();
+ assertThat(messages).hasSize(1);
+ Message m = messages.get(0);
+ assertThat(m.rcpt()).containsExactly(user.emailAddress);
+ assertThat(m.body()).contains("Change subject: TRIGGER\n");
+ assertThat(m.body()).contains("Gerrit-PatchSet: 1\n");
+ sender.clear();
+
+ // watch project as user2
+ TestAccount user2 = accounts.create("user2", "user2@test.com", "User2");
+ setApiUser(user2);
+ watch(anyProject, null);
+
+ // push a change to non-watched file in any project -> should not trigger
+ // email notification for user, only for user2
+ r = pushFactory.create(db, admin.getIdent(), anyRepo,
+ "TRIGGER_USER2", "b.txt", "b1").to("refs/for/master");
+ r.assertOkStatus();
+
+ // assert email notification
+ messages = sender.getMessages();
+ assertThat(messages).hasSize(1);
+ m = messages.get(0);
+ assertThat(m.rcpt()).containsExactly(user2.emailAddress);
+ assertThat(m.body()).contains("Change subject: TRIGGER_USER2\n");
+ assertThat(m.body()).contains("Gerrit-PatchSet: 1\n");
+ }
+
private void watch(String project, String filter)
throws RestApiException {
List<ProjectWatchInfo> projectsToWatch = new ArrayList<>();