Test labels on changes if label type is added/removed
Add a test that verifies that ChangeJson sets the labels field in
ChangeInfo properly when label types get newly defined or removed.
Change-Id: I470cb8a4150b9a81c27b24281b4fcf00177761ea
Signed-off-by: Edwin Kempin <ekempin@google.com>
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/ChangeIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/ChangeIT.java
index 7c02107..c09a6a2 100644
--- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/ChangeIT.java
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/api/change/ChangeIT.java
@@ -2142,6 +2142,56 @@
}
@Test
+ public void checkLabelsForOpenChange() throws Exception {
+ PushOneCommit.Result r = createChange();
+ ChangeInfo change = gApi.changes()
+ .id(r.getChangeId())
+ .get();
+ assertThat(change.status).isEqualTo(ChangeStatus.NEW);
+ assertThat(change.labels.keySet()).containsExactly("Code-Review");
+ assertThat(change.permittedLabels.keySet()).containsExactly("Code-Review");
+
+ // add new label and assert that it's returned for existing changes
+ ProjectConfig cfg = projectCache.checkedGet(project).getConfig();
+ LabelType verified = Util.verified();
+ cfg.getLabelSections().put(verified.getName(), verified);
+ AccountGroup.UUID registeredUsers =
+ SystemGroupBackend.getGroup(REGISTERED_USERS).getUUID();
+ String heads = RefNames.REFS_HEADS + "*";
+ Util.allow(cfg, Permission.forLabel(verified.getName()), -1, 1,
+ registeredUsers, heads);
+ saveProjectConfig(project, cfg);
+
+ change = gApi.changes()
+ .id(r.getChangeId())
+ .get();
+ assertThat(change.labels.keySet())
+ .containsExactly("Code-Review", "Verified");
+ assertThat(change.permittedLabels.keySet())
+ .containsExactly("Code-Review", "Verified");
+
+ // add an approval on the new label
+ gApi.changes()
+ .id(r.getChangeId())
+ .revision(r.getCommit().name())
+ .review(new ReviewInput().label(
+ verified.getName(), verified.getMax().getValue()));
+
+ // remove label and assert that it's no longer returned for existing
+ // changes, even if there is an approval for it
+ cfg.getLabelSections().remove(verified.getName());
+ Util.remove(cfg, Permission.forLabel(verified.getName()), registeredUsers,
+ heads);
+ saveProjectConfig(project, cfg);
+
+ change = gApi.changes()
+ .id(r.getChangeId())
+ .get();
+ assertThat(change.labels.keySet()).containsExactly("Code-Review");
+ assertThat(change.permittedLabels.keySet()).containsExactly("Code-Review");
+ }
+
+ @Test
public void checkLabelsForMergedChange() throws Exception {
PushOneCommit.Result r = createChange();
gApi.changes()
@@ -2159,6 +2209,45 @@
assertThat(change.status).isEqualTo(ChangeStatus.MERGED);
assertThat(change.labels.keySet()).containsExactly("Code-Review");
assertThat(change.permittedLabels.keySet()).containsExactly("Code-Review");
+
+ // add new label and assert that it's returned for existing changes
+ ProjectConfig cfg = projectCache.checkedGet(project).getConfig();
+ LabelType verified = Util.verified();
+ cfg.getLabelSections().put(verified.getName(), verified);
+ AccountGroup.UUID registeredUsers =
+ SystemGroupBackend.getGroup(REGISTERED_USERS).getUUID();
+ String heads = RefNames.REFS_HEADS + "*";
+ Util.allow(cfg, Permission.forLabel(verified.getName()), -1, 1,
+ registeredUsers, heads);
+ saveProjectConfig(project, cfg);
+
+ change = gApi.changes()
+ .id(r.getChangeId())
+ .get();
+ assertThat(change.labels.keySet())
+ .containsExactly("Code-Review", "Verified");
+ assertThat(change.permittedLabels.keySet())
+ .containsExactly("Code-Review", "Verified");
+
+ // add an approval on the new label
+ gApi.changes()
+ .id(r.getChangeId())
+ .revision(r.getCommit().name())
+ .review(new ReviewInput().label(
+ verified.getName(), verified.getMax().getValue()));
+
+ // remove label and assert that it's no longer returned for existing
+ // changes, even if there is an approval for it
+ cfg.getLabelSections().remove(verified.getName());
+ Util.remove(cfg, Permission.forLabel(verified.getName()), registeredUsers,
+ heads);
+ saveProjectConfig(project, cfg);
+
+ change = gApi.changes()
+ .id(r.getChangeId())
+ .get();
+ assertThat(change.labels.keySet()).containsExactly("Code-Review");
+ assertThat(change.permittedLabels.keySet()).containsExactly("Code-Review");
}
@Test
diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/project/Util.java b/gerrit-server/src/test/java/com/google/gerrit/server/project/Util.java
index 9cbdae2..d3f0bcb 100644
--- a/gerrit-server/src/test/java/com/google/gerrit/server/project/Util.java
+++ b/gerrit-server/src/test/java/com/google/gerrit/server/project/Util.java
@@ -128,6 +128,15 @@
return rule;
}
+ public static PermissionRule remove(ProjectConfig project,
+ String permissionName, AccountGroup.UUID group, String ref) {
+ PermissionRule rule = newRule(project, group);
+ project.getAccessSection(ref, true)
+ .getPermission(permissionName, true)
+ .remove(rule);
+ return rule;
+ }
+
public static PermissionRule block(ProjectConfig project,
String capabilityName, AccountGroup.UUID group) {
PermissionRule rule = newRule(project, group);