Merge "Do not set real_author in ChangeMessageInfo if author == real_author"
diff --git a/Documentation/rest-api-changes.txt b/Documentation/rest-api-changes.txt
index 2f144c6..d092ca3 100644
--- a/Documentation/rest-api-changes.txt
+++ b/Documentation/rest-api-changes.txt
@@ -7278,7 +7278,7 @@
|`real_author` |optional|
Real author of the message as an
link:rest-api-accounts.html#account-info[AccountInfo] entity. +
-Set if the message was posted on behalf of another user.
+Only set if the message was posted on behalf of another user.
|`date` ||
The link:rest-api.html#timestamp[timestamp] this message was posted.
|`message` ||
diff --git a/java/com/google/gerrit/server/ChangeMessagesUtil.java b/java/com/google/gerrit/server/ChangeMessagesUtil.java
index 81cff6e..c84c0e7 100644
--- a/java/com/google/gerrit/server/ChangeMessagesUtil.java
+++ b/java/com/google/gerrit/server/ChangeMessagesUtil.java
@@ -150,7 +150,7 @@
cmi.tag = message.getTag();
cmi._revisionNumber = patchNum != null ? patchNum.get() : null;
Account.Id realAuthor = message.getRealAuthor();
- if (realAuthor != null) {
+ if (realAuthor != null && !realAuthor.equals(message.getAuthor())) {
cmi.realAuthor = accountLoader.get(realAuthor);
}
cmi.accountsInMessage =
diff --git a/javatests/com/google/gerrit/acceptance/rest/account/ImpersonationIT.java b/javatests/com/google/gerrit/acceptance/rest/account/ImpersonationIT.java
index 3531d1c..56b58a4 100644
--- a/javatests/com/google/gerrit/acceptance/rest/account/ImpersonationIT.java
+++ b/javatests/com/google/gerrit/acceptance/rest/account/ImpersonationIT.java
@@ -70,6 +70,7 @@
import com.google.gerrit.extensions.restapi.AuthException;
import com.google.gerrit.extensions.restapi.BadRequestException;
import com.google.gerrit.extensions.restapi.ResourceConflictException;
+import com.google.gerrit.extensions.restapi.RestApiException;
import com.google.gerrit.extensions.restapi.UnprocessableEntityException;
import com.google.gerrit.server.ChangeMessagesUtil;
import com.google.gerrit.server.CommentsUtil;
@@ -143,11 +144,7 @@
assertThat(psa.value()).isEqualTo(1);
assertThat(psa.realAccountId()).isEqualTo(realUser.id());
- ChangeData cd = r.getChange();
- ChangeMessage m = Iterables.getLast(cmUtil.byChange(cd.notes()));
- assertThat(m.getMessage()).endsWith(in.message);
- assertThat(m.getAuthor()).isEqualTo(impersonatedUser.id());
- assertThat(m.getRealAuthor()).isEqualTo(realUser.id());
+ assertLastChangeMessage(r.getChange(), in.message, impersonatedUser, realUser);
// The change meta commit is created by the server and has the impersonated user as the
// author.
@@ -187,11 +184,7 @@
assertThat(psa.value()).isEqualTo(1);
assertThat(psa.realAccountId()).isEqualTo(realUser.id());
- ChangeData cd = r.getChange();
- ChangeMessage m = Iterables.getLast(cmUtil.byChange(cd.notes()));
- assertThat(m.getMessage()).endsWith(in.message);
- assertThat(m.getAuthor()).isEqualTo(impersonatedUser.id());
- assertThat(m.getRealAuthor()).isEqualTo(realUser.id());
+ assertLastChangeMessage(r.getChange(), in.message, impersonatedUser, realUser);
// realUser2 votes Code-Review+1 on behalf of impersonatedUser, this should override the
// impersonated Code-Review+1 of realUser with an impersonated Code-Review+1 of realUser2
@@ -208,11 +201,7 @@
assertThat(psa.value()).isEqualTo(1);
assertThat(psa.realAccountId()).isEqualTo(realUser2.id());
- cd = r.getChange();
- m = Iterables.getLast(cmUtil.byChange(cd.notes()));
- assertThat(m.getMessage()).endsWith(in.message);
- assertThat(m.getAuthor()).isEqualTo(impersonatedUser.id());
- assertThat(m.getRealAuthor()).isEqualTo(realUser2.id());
+ assertLastChangeMessage(r.getChange(), in.message, impersonatedUser, realUser2);
}
@Test
@@ -237,11 +226,7 @@
assertThat(psa.value()).isEqualTo(1);
assertThat(psa.realAccountId()).isEqualTo(realUser.id());
- ChangeData cd = r.getChange();
- ChangeMessage m = Iterables.getLast(cmUtil.byChange(cd.notes()));
- assertThat(m.getMessage()).endsWith(in.message);
- assertThat(m.getAuthor()).isEqualTo(impersonatedUser.id());
- assertThat(m.getRealAuthor()).isEqualTo(realUser.id());
+ assertLastChangeMessage(r.getChange(), in.message, impersonatedUser, realUser);
// realUser2 votes Code-Review-1 on behalf of impersonatedUser, this should override the
// impersonated Code-Review+1 of realUser with an impersonated Code-Review-1 of realUser2
@@ -258,11 +243,7 @@
assertThat(psa.value()).isEqualTo(-1);
assertThat(psa.realAccountId()).isEqualTo(realUser2.id());
- cd = r.getChange();
- m = Iterables.getLast(cmUtil.byChange(cd.notes()));
- assertThat(m.getMessage()).endsWith(in.message);
- assertThat(m.getAuthor()).isEqualTo(impersonatedUser.id());
- assertThat(m.getRealAuthor()).isEqualTo(realUser2.id());
+ assertLastChangeMessage(r.getChange(), in.message, impersonatedUser, realUser2);
}
@Test
@@ -286,11 +267,7 @@
assertThat(psa.value()).isEqualTo(1);
assertThat(psa.realAccountId()).isEqualTo(realUser.id());
- ChangeData cd = r.getChange();
- ChangeMessage m = Iterables.getLast(cmUtil.byChange(cd.notes()));
- assertThat(m.getMessage()).endsWith(in.message);
- assertThat(m.getAuthor()).isEqualTo(impersonatedUser.id());
- assertThat(m.getRealAuthor()).isEqualTo(realUser.id());
+ assertLastChangeMessage(r.getChange(), in.message, impersonatedUser, realUser);
// impersonatedUser votes Code-Review+1 themselves, this should override the impersonated
// Code-Review+1 with a non-impersonated Code-Review+1
@@ -306,11 +283,7 @@
assertThat(psa.value()).isEqualTo(1);
assertThat(psa.realAccountId()).isEqualTo(impersonatedUser.id());
- cd = r.getChange();
- m = Iterables.getLast(cmUtil.byChange(cd.notes()));
- assertThat(m.getMessage()).endsWith(in.message);
- assertThat(m.getAuthor()).isEqualTo(impersonatedUser.id());
- assertThat(m.getRealAuthor()).isEqualTo(impersonatedUser.id());
+ assertLastChangeMessage(r.getChange(), in.message, impersonatedUser, impersonatedUser);
}
@Test
@@ -334,11 +307,7 @@
assertThat(psa.value()).isEqualTo(1);
assertThat(psa.realAccountId()).isEqualTo(realUser.id());
- ChangeData cd = r.getChange();
- ChangeMessage m = Iterables.getLast(cmUtil.byChange(cd.notes()));
- assertThat(m.getMessage()).endsWith(in.message);
- assertThat(m.getAuthor()).isEqualTo(impersonatedUser.id());
- assertThat(m.getRealAuthor()).isEqualTo(realUser.id());
+ assertLastChangeMessage(r.getChange(), in.message, impersonatedUser, realUser);
// impersonatedUser votes Code-Review-1 themselves, this should override the impersonated
// Code-Review+1 with a non-impersonated Code-Review-1
@@ -354,11 +323,7 @@
assertThat(psa.value()).isEqualTo(-1);
assertThat(psa.realAccountId()).isEqualTo(impersonatedUser.id());
- cd = r.getChange();
- m = Iterables.getLast(cmUtil.byChange(cd.notes()));
- assertThat(m.getMessage()).endsWith(in.message);
- assertThat(m.getAuthor()).isEqualTo(impersonatedUser.id());
- assertThat(m.getRealAuthor()).isEqualTo(impersonatedUser.id());
+ assertLastChangeMessage(r.getChange(), in.message, impersonatedUser, impersonatedUser);
}
@Test
@@ -879,11 +844,7 @@
assertThat(psa.value()).isEqualTo(1);
assertThat(psa.realAccountId()).isEqualTo(admin.id()); // not user2
- ChangeData cd = r.getChange();
- ChangeMessage m = Iterables.getLast(cmUtil.byChange(cd.notes()));
- assertThat(m.getMessage()).endsWith(in.message);
- assertThat(m.getAuthor()).isEqualTo(user.id());
- assertThat(m.getRealAuthor()).isEqualTo(admin.id()); // not user2
+ assertLastChangeMessage(r.getChange(), in.message, user, admin);
}
@Test
@@ -902,10 +863,30 @@
ChangeInfo info = gApi.changes().id(r.getChangeId()).get(MESSAGES);
assertThat(info.messages).hasSize(2);
- ChangeMessageInfo changeMessageInfo = Iterables.getLast(info.messages);
- assertThat(changeMessageInfo.realAuthor).isNotNull();
- assertThat(changeMessageInfo.realAuthor._accountId)
- .isEqualTo(accountCreator.user2().id().get());
+ assertLastChangeMessage(r.getChange(), in.message, user, accountCreator.user2());
+ }
+
+ private void assertLastChangeMessage(
+ ChangeData changeData,
+ String expectedMessage,
+ TestAccount expectedAuthor,
+ TestAccount expectedRealAuthor)
+ throws RestApiException {
+ ChangeMessage m = Iterables.getLast(cmUtil.byChange(changeData.notes()));
+ assertThat(m.getMessage()).endsWith(expectedMessage);
+ assertThat(m.getAuthor()).isEqualTo(expectedAuthor.id());
+ assertThat(m.getRealAuthor()).isEqualTo(expectedRealAuthor.id());
+
+ ChangeMessageInfo lastChangeMessageInfo =
+ Iterables.getLast(gApi.changes().id(changeData.getId().get()).get().messages);
+ assertThat(lastChangeMessageInfo.message).endsWith(expectedMessage);
+ assertThat(lastChangeMessageInfo.author._accountId).isEqualTo(expectedAuthor.id().get());
+ if (expectedAuthor.id().equals(expectedRealAuthor.id())) {
+ assertThat(lastChangeMessageInfo.realAuthor).isNull();
+ } else {
+ assertThat(lastChangeMessageInfo.realAuthor._accountId)
+ .isEqualTo(expectedRealAuthor.id().get());
+ }
}
private void allowCodeReviewOnBehalfOf() throws Exception {