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
|
@Rule
|
||||||
public TemporaryFolder tempSiteDir = new TemporaryFolder();
|
public TemporaryFolder tempSiteDir = new TemporaryFolder();
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void clearSender() {
|
||||||
|
sender.clear();
|
||||||
|
}
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void startEventRecorder() {
|
public void startEventRecorder() {
|
||||||
eventRecorder = eventRecorderFactory.create(admin);
|
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.AbstractDaemonTest;
|
||||||
import com.google.gerrit.acceptance.NoHttpd;
|
import com.google.gerrit.acceptance.NoHttpd;
|
||||||
import com.google.gerrit.acceptance.PushOneCommit;
|
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.AccountProjectWatch.NotifyType;
|
||||||
|
import com.google.gerrit.reviewdb.client.Project;
|
||||||
import com.google.gerrit.server.git.NotifyConfig;
|
import com.google.gerrit.server.git.NotifyConfig;
|
||||||
import com.google.gerrit.server.git.ProjectConfig;
|
import com.google.gerrit.server.git.ProjectConfig;
|
||||||
import com.google.gerrit.server.mail.Address;
|
import com.google.gerrit.server.mail.Address;
|
||||||
import com.google.gerrit.testutil.FakeEmailSender.Message;
|
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 org.junit.Test;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -69,5 +75,81 @@ public class ProjectWatchIT extends AbstractDaemonTest {
|
|||||||
assertThat(m.body()).contains("Gerrit-PatchSet: 2\n");
|
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