Add basic tests for project watch notifications
Change-Id: Ief8430068e9edc7fce9c6fd62a5ac48e0e1c9e6a Signed-off-by: Edwin Kempin <ekempin@google.com>
This commit is contained in:
@@ -256,6 +256,11 @@ public abstract class AbstractDaemonTest {
|
||||
@Rule
|
||||
public TemporaryFolder tempSiteDir = new TemporaryFolder();
|
||||
|
||||
@Before
|
||||
public void clearSender() {
|
||||
sender.clear();
|
||||
}
|
||||
|
||||
@Before
|
||||
public void startEventRecorder() {
|
||||
eventRecorder = eventRecorderFactory.create(admin);
|
||||
|
||||
@@ -19,14 +19,20 @@ import static com.google.common.truth.Truth.assertThat;
|
||||
import com.google.gerrit.acceptance.AbstractDaemonTest;
|
||||
import com.google.gerrit.acceptance.NoHttpd;
|
||||
import com.google.gerrit.acceptance.PushOneCommit;
|
||||
import com.google.gerrit.extensions.client.ProjectWatchInfo;
|
||||
import com.google.gerrit.extensions.restapi.RestApiException;
|
||||
import com.google.gerrit.reviewdb.client.AccountProjectWatch.NotifyType;
|
||||
import com.google.gerrit.reviewdb.client.Project;
|
||||
import com.google.gerrit.server.git.NotifyConfig;
|
||||
import com.google.gerrit.server.git.ProjectConfig;
|
||||
import com.google.gerrit.server.mail.Address;
|
||||
import com.google.gerrit.testutil.FakeEmailSender.Message;
|
||||
|
||||
import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository;
|
||||
import org.eclipse.jgit.junit.TestRepository;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.EnumSet;
|
||||
import java.util.List;
|
||||
|
||||
@@ -69,5 +75,81 @@ public class ProjectWatchIT extends AbstractDaemonTest {
|
||||
assertThat(m.body()).contains("Gerrit-PatchSet: 2\n");
|
||||
}
|
||||
|
||||
// TODO(anybody reading this): More tests.
|
||||
@Test
|
||||
public void watchProject() throws Exception {
|
||||
// watch project
|
||||
String watchedProject = createProject("watchedProject").get();
|
||||
setApiUser(user);
|
||||
watch(watchedProject, null);
|
||||
|
||||
// push a change to watched project -> should trigger email notification
|
||||
setApiUser(admin);
|
||||
TestRepository<InMemoryRepository> watchedRepo =
|
||||
cloneProject(new Project.NameKey(watchedProject), admin);
|
||||
PushOneCommit.Result r = pushFactory
|
||||
.create(db, admin.getIdent(), watchedRepo, "TRIGGER", "a", "a1")
|
||||
.to("refs/for/master");
|
||||
r.assertOkStatus();
|
||||
|
||||
// push a change to non-watched project -> should not trigger email
|
||||
// notification
|
||||
String notWatchedProject = createProject("otherProject").get();
|
||||
TestRepository<InMemoryRepository> notWatchedRepo =
|
||||
cloneProject(new Project.NameKey(notWatchedProject), admin);
|
||||
r = pushFactory.create(db, admin.getIdent(), notWatchedRepo,
|
||||
"DONT_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 watchFile() throws Exception {
|
||||
// watch file in project
|
||||
String watchedProject = createProject("watchedProject").get();
|
||||
setApiUser(user);
|
||||
watch(watchedProject, "file:a.txt");
|
||||
|
||||
// push a change to watched file -> should trigger email notification
|
||||
setApiUser(admin);
|
||||
TestRepository<InMemoryRepository> watchedRepo =
|
||||
cloneProject(new Project.NameKey(watchedProject), admin);
|
||||
PushOneCommit.Result r = pushFactory
|
||||
.create(db, admin.getIdent(), watchedRepo, "TRIGGER", "a.txt", "a1")
|
||||
.to("refs/for/master");
|
||||
r.assertOkStatus();
|
||||
|
||||
// push a change to non-watched file -> should not trigger email
|
||||
// notification
|
||||
r = pushFactory.create(db, admin.getIdent(), testRepo,
|
||||
"DONT_TRIGGER", "b.txt", "b1").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");
|
||||
}
|
||||
|
||||
private void watch(String project, String filter)
|
||||
throws RestApiException {
|
||||
List<ProjectWatchInfo> projectsToWatch = new ArrayList<>();
|
||||
ProjectWatchInfo pwi = new ProjectWatchInfo();
|
||||
pwi.project = project;
|
||||
pwi.filter = filter;
|
||||
pwi.notifyAbandonedChanges = true;
|
||||
pwi.notifyNewChanges = true;
|
||||
pwi.notifyAllComments = true;
|
||||
projectsToWatch.add(pwi);
|
||||
gApi.accounts().self().setWatchedProjects(projectsToWatch);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user