Implement AttentionSetUpdateSubject

Add "AttentionSetUpdateSubject" and then use it in AttentionSetIT.

Change-Id: I3fd4196c3c31c6aa295a65538a5ab6b7bdfd1bd9
This commit is contained in:
Gal Paikin
2020-08-27 13:54:08 +03:00
parent a7a4f51879
commit 68e3fc01b0
3 changed files with 229 additions and 135 deletions

View File

@@ -0,0 +1,83 @@
// Copyright (C) 2020 The Android Open Source Project
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.gerrit.extensions.restapi.testing;
import static com.google.common.truth.Truth.assertAbout;
import com.google.common.truth.ComparableSubject;
import com.google.common.truth.FailureMetadata;
import com.google.common.truth.StringSubject;
import com.google.common.truth.Subject;
import com.google.gerrit.entities.Account;
import com.google.gerrit.entities.AttentionSetUpdate;
/** {@link Subject} for doing assertions on {@link AttentionSetUpdate}s. */
public class AttentionSetUpdateSubject extends Subject {
/**
* Starts fluent chain to do assertions on a {@link AttentionSetUpdate}.
*
* @param attentionSetUpdate the {@link AttentionSetUpdate} on which assertions should be done
* @return the created {@link AttentionSetUpdateSubject}
*/
public static AttentionSetUpdateSubject assertThat(AttentionSetUpdate attentionSetUpdate) {
return assertAbout(attentionSetUpdates()).that(attentionSetUpdate);
}
private static Factory<AttentionSetUpdateSubject, AttentionSetUpdate> attentionSetUpdates() {
return AttentionSetUpdateSubject::new;
}
private final AttentionSetUpdate attentionSetUpdate;
private AttentionSetUpdateSubject(
FailureMetadata metadata, AttentionSetUpdate attentionSetUpdate) {
super(metadata, attentionSetUpdate);
this.attentionSetUpdate = attentionSetUpdate;
}
/**
* Returns a {@link ComparableSubject} for the account ID of attention set update.
*
* @return {@link ComparableSubject} for the account ID of attention set update
*/
public ComparableSubject<Account.Id> hasAccountIdThat() {
return check("account()").that(attentionSetUpdate().account());
}
/**
* Returns a {@link StringSubject} for the reason of attention set update.
*
* @return {@link StringSubject} for the reason of attention set update
*/
public StringSubject hasReasonThat() {
return check("reason()").that(attentionSetUpdate().reason());
}
/**
* Returns a {@link ComparableSubject} for the {@link AttentionSetUpdate.Operation} of attention
* set update.
*
* @return {@link ComparableSubject} for the {@link AttentionSetUpdate.Operation} of attention set
* update
*/
public ComparableSubject<AttentionSetUpdate.Operation> hasOperationThat() {
return check("operation()").that(attentionSetUpdate().operation());
}
private AttentionSetUpdate attentionSetUpdate() {
isNotNull();
return attentionSetUpdate;
}
}

View File

@@ -6,6 +6,7 @@ java_library(
srcs = glob(["**/*.java"]), srcs = glob(["**/*.java"]),
visibility = ["//visibility:public"], visibility = ["//visibility:public"],
deps = [ deps = [
"//java/com/google/gerrit/entities",
"//java/com/google/gerrit/extensions:api", "//java/com/google/gerrit/extensions:api",
"//java/com/google/gerrit/truth", "//java/com/google/gerrit/truth",
"//lib/truth", "//lib/truth",

View File

@@ -15,6 +15,7 @@
package com.google.gerrit.acceptance.rest.change; package com.google.gerrit.acceptance.rest.change;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static com.google.gerrit.extensions.restapi.testing.AttentionSetUpdateSubject.assertThat;
import static com.google.gerrit.testing.GerritJUnit.assertThrows; import static com.google.gerrit.testing.GerritJUnit.assertThrows;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
@@ -209,15 +210,15 @@ public class AttentionSetIT extends AbstractDaemonTest {
AttentionSetUpdate userUpdate = AttentionSetUpdate userUpdate =
Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user)); Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user));
assertThat(userUpdate.account()).isEqualTo(user.id()); assertThat(userUpdate).hasAccountIdThat().isEqualTo(user.id());
assertThat(userUpdate.operation()).isEqualTo(AttentionSetUpdate.Operation.REMOVE); assertThat(userUpdate).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.REMOVE);
assertThat(userUpdate.reason()).isEqualTo("Change was abandoned"); assertThat(userUpdate).hasReasonThat().isEqualTo("Change was abandoned");
AttentionSetUpdate adminUpdate = AttentionSetUpdate adminUpdate =
Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, admin)); Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, admin));
assertThat(adminUpdate.account()).isEqualTo(admin.id()); assertThat(adminUpdate).hasAccountIdThat().isEqualTo(admin.id());
assertThat(adminUpdate.operation()).isEqualTo(AttentionSetUpdate.Operation.REMOVE); assertThat(adminUpdate).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.REMOVE);
assertThat(adminUpdate.reason()).isEqualTo("Change was abandoned"); assertThat(adminUpdate).hasReasonThat().isEqualTo("Change was abandoned");
} }
@Test @Test
@@ -228,9 +229,9 @@ public class AttentionSetIT extends AbstractDaemonTest {
change(r).setWorkInProgress(); change(r).setWorkInProgress();
AttentionSetUpdate attentionSet = Iterables.getOnlyElement(r.getChange().attentionSet()); AttentionSetUpdate attentionSet = Iterables.getOnlyElement(r.getChange().attentionSet());
assertThat(attentionSet.account()).isEqualTo(user.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(user.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.REMOVE); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.REMOVE);
assertThat(attentionSet.reason()).isEqualTo("Change was marked work in progress"); assertThat(attentionSet).hasReasonThat().isEqualTo("Change was marked work in progress");
} }
@Test @Test
@@ -251,16 +252,16 @@ public class AttentionSetIT extends AbstractDaemonTest {
AttentionSetUpdate attentionSet = AttentionSetUpdate attentionSet =
Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r1, user)); Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r1, user));
assertThat(attentionSet.account()).isEqualTo(user.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(user.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.REMOVE); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.REMOVE);
assertThat(attentionSet.reason()).isEqualTo("Change was submitted"); assertThat(attentionSet).hasReasonThat().isEqualTo("Change was submitted");
// Attention set updates that relate to the admin (the person who replied) are filtered out. // Attention set updates that relate to the admin (the person who replied) are filtered out.
attentionSet = Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r2, user)); attentionSet = Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r2, user));
assertThat(attentionSet.account()).isEqualTo(user.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(user.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.REMOVE); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.REMOVE);
assertThat(attentionSet.reason()).isEqualTo("Change was submitted"); assertThat(attentionSet).hasReasonThat().isEqualTo("Change was submitted");
} }
@Test @Test
@@ -281,9 +282,9 @@ public class AttentionSetIT extends AbstractDaemonTest {
AttentionSetUpdate attentionSet = AttentionSetUpdate attentionSet =
Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r1, user)); Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r1, user));
assertThat(attentionSet.account()).isEqualTo(user.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(user.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.REMOVE); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.REMOVE);
assertThat(attentionSet.reason()).isEqualTo("Change was submitted"); assertThat(attentionSet).hasReasonThat().isEqualTo("Change was submitted");
} }
@Test @Test
@@ -296,9 +297,9 @@ public class AttentionSetIT extends AbstractDaemonTest {
AttentionSetUpdate attentionSet = AttentionSetUpdate attentionSet =
Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user)); Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user));
assertThat(attentionSet.account()).isEqualTo(user.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(user.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.ADD); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.ADD);
assertThat(attentionSet.reason()).isEqualTo("Reviewer was added"); assertThat(attentionSet).hasReasonThat().isEqualTo("Reviewer was added");
} }
@Test @Test
@@ -308,16 +309,16 @@ public class AttentionSetIT extends AbstractDaemonTest {
change(r).addReviewer(user.id().toString()); change(r).addReviewer(user.id().toString());
AttentionSetUpdate attentionSet = Iterables.getOnlyElement(r.getChange().attentionSet()); AttentionSetUpdate attentionSet = Iterables.getOnlyElement(r.getChange().attentionSet());
assertThat(attentionSet.account()).isEqualTo(user.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(user.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.ADD); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.ADD);
assertThat(attentionSet.reason()).isEqualTo("Reviewer was added"); assertThat(attentionSet).hasReasonThat().isEqualTo("Reviewer was added");
change(r).reviewer(user.email()).remove(); change(r).reviewer(user.email()).remove();
attentionSet = Iterables.getOnlyElement(r.getChange().attentionSet()); attentionSet = Iterables.getOnlyElement(r.getChange().attentionSet());
assertThat(attentionSet.account()).isEqualTo(user.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(user.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.REMOVE); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.REMOVE);
assertThat(attentionSet.reason()).isEqualTo("Reviewer was removed"); assertThat(attentionSet).hasReasonThat().isEqualTo("Reviewer was removed");
} }
@Test @Test
@@ -327,16 +328,16 @@ public class AttentionSetIT extends AbstractDaemonTest {
change(r).addReviewer(user.email()); change(r).addReviewer(user.email());
AttentionSetUpdate attentionSet = Iterables.getOnlyElement(r.getChange().attentionSet()); AttentionSetUpdate attentionSet = Iterables.getOnlyElement(r.getChange().attentionSet());
assertThat(attentionSet.account()).isEqualTo(user.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(user.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.ADD); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.ADD);
assertThat(attentionSet.reason()).isEqualTo("Reviewer was added"); assertThat(attentionSet).hasReasonThat().isEqualTo("Reviewer was added");
change(r).reviewer(user.email()).remove(); change(r).reviewer(user.email()).remove();
attentionSet = Iterables.getOnlyElement(r.getChange().attentionSet()); attentionSet = Iterables.getOnlyElement(r.getChange().attentionSet());
assertThat(attentionSet.account()).isEqualTo(user.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(user.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.REMOVE); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.REMOVE);
assertThat(attentionSet.reason()).isEqualTo("Reviewer was removed"); assertThat(attentionSet).hasReasonThat().isEqualTo("Reviewer was removed");
} }
@Test @Test
@@ -373,9 +374,10 @@ public class AttentionSetIT extends AbstractDaemonTest {
change(r).addReviewer(user.id().toString()); change(r).addReviewer(user.id().toString());
AttentionSetUpdate attentionSet = Iterables.getOnlyElement(r.getChange().attentionSet()); AttentionSetUpdate attentionSet = Iterables.getOnlyElement(r.getChange().attentionSet());
assertThat(attentionSet.account()).isEqualTo(user.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(user.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.REMOVE); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.REMOVE);
assertThat(attentionSet.reason()) assertThat(attentionSet)
.hasReasonThat()
.isEqualTo("removed and not re-added when re-adding as reviewer"); .isEqualTo("removed and not re-added when re-adding as reviewer");
} }
@@ -402,9 +404,9 @@ public class AttentionSetIT extends AbstractDaemonTest {
change(r).addReviewer(addReviewerInput); change(r).addReviewer(addReviewerInput);
AttentionSetUpdate attentionSet = Iterables.getOnlyElement(r.getChange().attentionSet()); AttentionSetUpdate attentionSet = Iterables.getOnlyElement(r.getChange().attentionSet());
assertThat(attentionSet.account()).isEqualTo(user.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(user.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.REMOVE); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.REMOVE);
assertThat(attentionSet.reason()).isEqualTo("Reviewer was removed"); assertThat(attentionSet).hasReasonThat().isEqualTo("Reviewer was removed");
} }
@Test @Test
@@ -419,9 +421,9 @@ public class AttentionSetIT extends AbstractDaemonTest {
requestScopeOperations.setApiUser(robot.id()); requestScopeOperations.setApiUser(robot.id());
change(r).setReadyForReview(); change(r).setReadyForReview();
AttentionSetUpdate attentionSet = Iterables.getOnlyElement(r.getChange().attentionSet()); AttentionSetUpdate attentionSet = Iterables.getOnlyElement(r.getChange().attentionSet());
assertThat(attentionSet.account()).isEqualTo(user.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(user.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.ADD); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.ADD);
assertThat(attentionSet.reason()).isEqualTo("Change was marked ready for review"); assertThat(attentionSet).hasReasonThat().isEqualTo("Change was marked ready for review");
} }
@Test @Test
@@ -432,9 +434,9 @@ public class AttentionSetIT extends AbstractDaemonTest {
change(r).setReadyForReview(); change(r).setReadyForReview();
AttentionSetUpdate attentionSet = Iterables.getOnlyElement(r.getChange().attentionSet()); AttentionSetUpdate attentionSet = Iterables.getOnlyElement(r.getChange().attentionSet());
assertThat(attentionSet.account()).isEqualTo(user.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(user.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.ADD); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.ADD);
assertThat(attentionSet.reason()).isEqualTo("Change was marked ready for review"); assertThat(attentionSet).hasReasonThat().isEqualTo("Change was marked ready for review");
} }
@Test @Test
@@ -453,9 +455,9 @@ public class AttentionSetIT extends AbstractDaemonTest {
AttentionSetUpdate attentionSet = AttentionSetUpdate attentionSet =
Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user)); Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user));
assertThat(attentionSet.account()).isEqualTo(user.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(user.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.REMOVE); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.REMOVE);
assertThat(attentionSet.reason()).isEqualTo("Reviewer was removed"); assertThat(attentionSet).hasReasonThat().isEqualTo("Reviewer was removed");
} }
@Test @Test
@@ -468,9 +470,9 @@ public class AttentionSetIT extends AbstractDaemonTest {
AttentionSetUpdate attentionSet = AttentionSetUpdate attentionSet =
Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user)); Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user));
assertThat(attentionSet.account()).isEqualTo(user.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(user.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.ADD); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.ADD);
assertThat(attentionSet.reason()).isEqualTo("Reviewer was added"); assertThat(attentionSet).hasReasonThat().isEqualTo("Reviewer was added");
} }
@Test @Test
@@ -484,9 +486,9 @@ public class AttentionSetIT extends AbstractDaemonTest {
change(r).setHashtags(hashtagsInput); change(r).setHashtags(hashtagsInput);
AttentionSetUpdate attentionSet = Iterables.getOnlyElement(r.getChange().attentionSet()); AttentionSetUpdate attentionSet = Iterables.getOnlyElement(r.getChange().attentionSet());
assertThat(attentionSet.account()).isEqualTo(user.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(user.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.REMOVE); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.REMOVE);
assertThat(attentionSet.reason()).isEqualTo("removed"); assertThat(attentionSet).hasReasonThat().isEqualTo("removed");
} }
@Test @Test
@@ -499,9 +501,9 @@ public class AttentionSetIT extends AbstractDaemonTest {
AttentionSetUpdate attentionSet = AttentionSetUpdate attentionSet =
Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user)); Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user));
assertThat(attentionSet.account()).isEqualTo(user.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(user.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.ADD); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.ADD);
assertThat(attentionSet.reason()).isEqualTo("reason"); assertThat(attentionSet).hasReasonThat().isEqualTo("reason");
// No emails for adding to attention set were sent. // No emails for adding to attention set were sent.
email.getMessages().isEmpty(); email.getMessages().isEmpty();
@@ -519,9 +521,9 @@ public class AttentionSetIT extends AbstractDaemonTest {
AttentionSetUpdate attentionSet = AttentionSetUpdate attentionSet =
Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user)); Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user));
assertThat(attentionSet.account()).isEqualTo(user.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(user.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.REMOVE); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.REMOVE);
assertThat(attentionSet.reason()).isEqualTo("reason"); assertThat(attentionSet).hasReasonThat().isEqualTo("reason");
// No emails for removing from attention set were sent. // No emails for removing from attention set were sent.
email.getMessages().isEmpty(); email.getMessages().isEmpty();
@@ -566,9 +568,9 @@ public class AttentionSetIT extends AbstractDaemonTest {
// Attention set updates that relate to the admin (the person who replied) are filtered out. // Attention set updates that relate to the admin (the person who replied) are filtered out.
AttentionSetUpdate attentionSet = AttentionSetUpdate attentionSet =
Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user)); Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user));
assertThat(attentionSet.account()).isEqualTo(user.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(user.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.REMOVE); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.REMOVE);
assertThat(attentionSet.reason()).isEqualTo("reason"); assertThat(attentionSet).hasReasonThat().isEqualTo("reason");
} }
@Test @Test
@@ -655,9 +657,9 @@ public class AttentionSetIT extends AbstractDaemonTest {
// Attention set updates that relate to the admin (the person who replied) are filtered out. // Attention set updates that relate to the admin (the person who replied) are filtered out.
AttentionSetUpdate attentionSet = AttentionSetUpdate attentionSet =
Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user)); Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user));
assertThat(attentionSet.account()).isEqualTo(user.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(user.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.REMOVE); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.REMOVE);
assertThat(attentionSet.reason()).isEqualTo("reason"); assertThat(attentionSet).hasReasonThat().isEqualTo("reason");
} }
@Test @Test
@@ -674,9 +676,9 @@ public class AttentionSetIT extends AbstractDaemonTest {
// Attention set updates that relate to the admin (the person who replied) are filtered out. // Attention set updates that relate to the admin (the person who replied) are filtered out.
AttentionSetUpdate attentionSet = AttentionSetUpdate attentionSet =
Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user)); Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user));
assertThat(attentionSet.account()).isEqualTo(user.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(user.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.ADD); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.ADD);
assertThat(attentionSet.reason()).isEqualTo("reason"); assertThat(attentionSet).hasReasonThat().isEqualTo("reason");
} }
@Test @Test
@@ -688,9 +690,9 @@ public class AttentionSetIT extends AbstractDaemonTest {
change(r).current().review(reviewInput); change(r).current().review(reviewInput);
AttentionSetUpdate attentionSet = Iterables.getOnlyElement(r.getChange().attentionSet()); AttentionSetUpdate attentionSet = Iterables.getOnlyElement(r.getChange().attentionSet());
assertThat(attentionSet.account()).isEqualTo(admin.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(admin.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.REMOVE); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.REMOVE);
assertThat(attentionSet.reason()).isEqualTo("removed on reply"); assertThat(attentionSet).hasReasonThat().isEqualTo("removed on reply");
} }
@Test @Test
@@ -701,9 +703,9 @@ public class AttentionSetIT extends AbstractDaemonTest {
change(r).current().review(reviewInput); change(r).current().review(reviewInput);
AttentionSetUpdate attentionSet = Iterables.getOnlyElement(r.getChange().attentionSet()); AttentionSetUpdate attentionSet = Iterables.getOnlyElement(r.getChange().attentionSet());
assertThat(attentionSet.account()).isEqualTo(admin.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(admin.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.ADD); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.ADD);
assertThat(attentionSet.reason()).isEqualTo("reason"); assertThat(attentionSet).hasReasonThat().isEqualTo("reason");
} }
@Test @Test
@@ -718,9 +720,9 @@ public class AttentionSetIT extends AbstractDaemonTest {
AttentionSetUpdate attentionSet = AttentionSetUpdate attentionSet =
Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user)); Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user));
assertThat(attentionSet.account()).isEqualTo(user.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(user.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.REMOVE); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.REMOVE);
assertThat(attentionSet.reason()).isEqualTo("removed on reply"); assertThat(attentionSet).hasReasonThat().isEqualTo("removed on reply");
} }
@Test @Test
@@ -746,9 +748,9 @@ public class AttentionSetIT extends AbstractDaemonTest {
AttentionSetUpdate attentionSet = AttentionSetUpdate attentionSet =
Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, admin)); Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, admin));
assertThat(attentionSet.account()).isEqualTo(admin.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(admin.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.ADD); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.ADD);
assertThat(attentionSet.reason()).isEqualTo("Someone else replied on the change"); assertThat(attentionSet).hasReasonThat().isEqualTo("Someone else replied on the change");
} }
@Test @Test
@@ -797,9 +799,9 @@ public class AttentionSetIT extends AbstractDaemonTest {
AttentionSetUpdate attentionSet = AttentionSetUpdate attentionSet =
Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, admin)); Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, admin));
assertThat(attentionSet.account()).isEqualTo(admin.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(admin.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.ADD); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.ADD);
assertThat(attentionSet.reason()).isEqualTo("Someone else replied on the change"); assertThat(attentionSet).hasReasonThat().isEqualTo("Someone else replied on the change");
} }
@Test @Test
@@ -821,15 +823,15 @@ public class AttentionSetIT extends AbstractDaemonTest {
// Uploader added // Uploader added
AttentionSetUpdate attentionSet = AttentionSetUpdate attentionSet =
Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user)); Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user));
assertThat(attentionSet.account()).isEqualTo(user.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(user.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.ADD); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.ADD);
assertThat(attentionSet.reason()).isEqualTo("Someone else replied on the change"); assertThat(attentionSet).hasReasonThat().isEqualTo("Someone else replied on the change");
// Owner added // Owner added
attentionSet = Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, admin)); attentionSet = Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, admin));
assertThat(attentionSet.account()).isEqualTo(admin.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(admin.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.ADD); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.ADD);
assertThat(attentionSet.reason()).isEqualTo("Someone else replied on the change"); assertThat(attentionSet).hasReasonThat().isEqualTo("Someone else replied on the change");
} }
@Test @Test
@@ -878,14 +880,18 @@ public class AttentionSetIT extends AbstractDaemonTest {
AttentionSetUpdate attentionSet = AttentionSetUpdate attentionSet =
Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user)); Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user));
assertThat(attentionSet.account()).isEqualTo(user.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(user.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.ADD); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.ADD);
assertThat(attentionSet.reason()).isEqualTo("Someone else replied on a comment you posted"); assertThat(attentionSet)
.hasReasonThat()
.isEqualTo("Someone else replied on a comment you posted");
attentionSet = Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user2)); attentionSet = Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user2));
assertThat(attentionSet.account()).isEqualTo(user2.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(user2.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.ADD); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.ADD);
assertThat(attentionSet.reason()).isEqualTo("Someone else replied on a comment you posted"); assertThat(attentionSet)
.hasReasonThat()
.isEqualTo("Someone else replied on a comment you posted");
} }
@Test @Test
@@ -919,9 +925,11 @@ public class AttentionSetIT extends AbstractDaemonTest {
// The user which replied to the robot comment was added to the attention set. // The user which replied to the robot comment was added to the attention set.
AttentionSetUpdate attentionSet = AttentionSetUpdate attentionSet =
Iterables.getOnlyElement(getAttentionSetUpdatesForUser(result, user)); Iterables.getOnlyElement(getAttentionSetUpdatesForUser(result, user));
assertThat(attentionSet.account()).isEqualTo(user.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(user.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.ADD); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.ADD);
assertThat(attentionSet.reason()).isEqualTo("Someone else replied on a comment you posted"); assertThat(attentionSet)
.hasReasonThat()
.isEqualTo("Someone else replied on a comment you posted");
} }
@Test @Test
@@ -944,9 +952,11 @@ public class AttentionSetIT extends AbstractDaemonTest {
AttentionSetUpdate attentionSet = AttentionSetUpdate attentionSet =
Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user)); Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user));
assertThat(attentionSet.account()).isEqualTo(user.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(user.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.ADD); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.ADD);
assertThat(attentionSet.reason()).isEqualTo("Someone else replied on a comment you posted"); assertThat(attentionSet)
.hasReasonThat()
.isEqualTo("Someone else replied on a comment you posted");
} }
@Test @Test
@@ -981,9 +991,9 @@ public class AttentionSetIT extends AbstractDaemonTest {
// cc removed // cc removed
AttentionSetUpdate attentionSet = AttentionSetUpdate attentionSet =
Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user)); Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user));
assertThat(attentionSet.account()).isEqualTo(user.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(user.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.REMOVE); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.REMOVE);
assertThat(attentionSet.reason()).isEqualTo("Reviewer was removed"); assertThat(attentionSet).hasReasonThat().isEqualTo("Reviewer was removed");
} }
@Test @Test
@@ -1010,9 +1020,9 @@ public class AttentionSetIT extends AbstractDaemonTest {
// Owner added // Owner added
AttentionSetUpdate attentionSet = AttentionSetUpdate attentionSet =
Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, admin)); Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, admin));
assertThat(attentionSet.account()).isEqualTo(admin.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(admin.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.ADD); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.ADD);
assertThat(attentionSet.reason()).isEqualTo("Someone else replied on the change"); assertThat(attentionSet).hasReasonThat().isEqualTo("Someone else replied on the change");
} }
@Test @Test
@@ -1027,9 +1037,9 @@ public class AttentionSetIT extends AbstractDaemonTest {
// reviewer removed // reviewer removed
AttentionSetUpdate attentionSet = AttentionSetUpdate attentionSet =
Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user)); Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user));
assertThat(attentionSet.account()).isEqualTo(user.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(user.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.REMOVE); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.REMOVE);
assertThat(attentionSet.reason()).isEqualTo("removed on reply"); assertThat(attentionSet).hasReasonThat().isEqualTo("removed on reply");
} }
@Test @Test
@@ -1046,9 +1056,9 @@ public class AttentionSetIT extends AbstractDaemonTest {
// admin is still in the attention set, although replies remove from attention set, and removing // admin is still in the attention set, although replies remove from attention set, and removing
// from reviewer also should remove from attention set. // from reviewer also should remove from attention set.
AttentionSetUpdate attentionSet = Iterables.getOnlyElement(r.getChange().attentionSet()); AttentionSetUpdate attentionSet = Iterables.getOnlyElement(r.getChange().attentionSet());
assertThat(attentionSet.account()).isEqualTo(admin.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(admin.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.ADD); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.ADD);
assertThat(attentionSet.reason()).isEqualTo("reason"); assertThat(attentionSet).hasReasonThat().isEqualTo("reason");
} }
@Test @Test
@@ -1100,9 +1110,9 @@ public class AttentionSetIT extends AbstractDaemonTest {
// Admin is still removed although we block default attention set rules, since we remove // Admin is still removed although we block default attention set rules, since we remove
// the admin manually. // the admin manually.
AttentionSetUpdate attentionSet = Iterables.getOnlyElement(r.getChange().attentionSet()); AttentionSetUpdate attentionSet = Iterables.getOnlyElement(r.getChange().attentionSet());
assertThat(attentionSet.account()).isEqualTo(admin.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(admin.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.REMOVE); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.REMOVE);
assertThat(attentionSet.reason()).isEqualTo("removed"); assertThat(attentionSet).hasReasonThat().isEqualTo("removed");
} }
@Test @Test
@@ -1136,9 +1146,9 @@ public class AttentionSetIT extends AbstractDaemonTest {
// Bots can still change the attention set, just not when replying. // Bots can still change the attention set, just not when replying.
AttentionSetUpdate attentionSet = AttentionSetUpdate attentionSet =
Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user)); Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user));
assertThat(attentionSet.account()).isEqualTo(user.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(user.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.ADD); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.ADD);
assertThat(attentionSet.reason()).isEqualTo("Reviewer was added"); assertThat(attentionSet).hasReasonThat().isEqualTo("Reviewer was added");
} }
@Test @Test
@@ -1162,9 +1172,9 @@ public class AttentionSetIT extends AbstractDaemonTest {
AttentionSetUpdate attentionSet = AttentionSetUpdate attentionSet =
Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, admin)); Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, admin));
assertThat(attentionSet.account()).isEqualTo(admin.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(admin.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.ADD); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.ADD);
assertThat(attentionSet.reason()).isEqualTo("A robot voted negatively on a label"); assertThat(attentionSet).hasReasonThat().isEqualTo("A robot voted negatively on a label");
} }
@Test @Test
@@ -1181,9 +1191,9 @@ public class AttentionSetIT extends AbstractDaemonTest {
AttentionSetUpdate attentionSet = AttentionSetUpdate attentionSet =
Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, admin)); Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, admin));
assertThat(attentionSet.account()).isEqualTo(admin.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(admin.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.ADD); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.ADD);
assertThat(attentionSet.reason()).isEqualTo("A robot comment was added"); assertThat(attentionSet).hasReasonThat().isEqualTo("A robot comment was added");
} }
@Test @Test
@@ -1196,9 +1206,9 @@ public class AttentionSetIT extends AbstractDaemonTest {
AttentionSetUpdate attentionSet = AttentionSetUpdate attentionSet =
Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, admin)); Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, admin));
assertThat(attentionSet.account()).isEqualTo(admin.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(admin.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.ADD); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.ADD);
assertThat(attentionSet.reason()).isEqualTo("reason"); assertThat(attentionSet).hasReasonThat().isEqualTo("reason");
} }
@Test @Test
@@ -1209,9 +1219,9 @@ public class AttentionSetIT extends AbstractDaemonTest {
AttentionSetUpdate attentionSet = AttentionSetUpdate attentionSet =
Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user)); Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user));
assertThat(attentionSet.account()).isEqualTo(user.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(user.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.ADD); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.ADD);
assertThat(attentionSet.reason()).isEqualTo("reason"); assertThat(attentionSet).hasReasonThat().isEqualTo("reason");
} }
@Test @Test
@@ -1222,9 +1232,9 @@ public class AttentionSetIT extends AbstractDaemonTest {
AttentionSetUpdate attentionSet = AttentionSetUpdate attentionSet =
Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user)); Iterables.getOnlyElement(getAttentionSetUpdatesForUser(r, user));
assertThat(attentionSet.account()).isEqualTo(user.id()); assertThat(attentionSet).hasAccountIdThat().isEqualTo(user.id());
assertThat(attentionSet.operation()).isEqualTo(AttentionSetUpdate.Operation.ADD); assertThat(attentionSet).hasOperationThat().isEqualTo(AttentionSetUpdate.Operation.ADD);
assertThat(attentionSet.reason()).isEqualTo("Reviewer was added"); assertThat(attentionSet).hasReasonThat().isEqualTo("Reviewer was added");
} }
private List<AttentionSetUpdate> getAttentionSetUpdatesForUser( private List<AttentionSetUpdate> getAttentionSetUpdatesForUser(