Test that OO+2 counts as code owner override when OO+1 is required If Owners-Override+1 is required as code owner override, also a Owners-Overirde+2 should count as override. Cover this by a test. Signed-off-by: Edwin Kempin <ekempin@google.com> Change-Id: I2109d0e3f441f079cb2ccb51eb65a8eff6c21d76
diff --git a/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckTest.java b/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckTest.java index 12bd0f2..be4d6b0 100644 --- a/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckTest.java +++ b/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckTest.java
@@ -27,12 +27,14 @@ import com.google.gerrit.acceptance.TestAccount; import com.google.gerrit.acceptance.config.GerritConfig; import com.google.gerrit.acceptance.testsuite.project.ProjectOperations; +import com.google.gerrit.acceptance.testsuite.project.TestProjectUpdate; import com.google.gerrit.acceptance.testsuite.request.RequestScopeOperations; import com.google.gerrit.entities.BranchNameKey; import com.google.gerrit.entities.Change; import com.google.gerrit.entities.RefNames; import com.google.gerrit.extensions.api.changes.ReviewInput; import com.google.gerrit.extensions.api.projects.DeleteBranchesInput; +import com.google.gerrit.extensions.common.LabelDefinitionInput; import com.google.gerrit.extensions.restapi.ResourceConflictException; import com.google.gerrit.plugins.codeowners.JgitPath; import com.google.gerrit.plugins.codeowners.acceptance.AbstractCodeOwnersTest; @@ -2213,6 +2215,70 @@ } @Test + @GerritConfig(name = "plugin.code-owners.overrideApproval", value = "Owners-Override+1") + public void ownersOverridePlus2CountsAsOverrideIfOverridePlus1IsRequired() throws Exception { + LabelDefinitionInput input = new LabelDefinitionInput(); + input.values = ImmutableMap.of("+2", "Override+2", "+1", "Override", " 0", "No Override"); + gApi.projects().name(project.get()).label("Owners-Override").create(input).get(); + + // Allow to vote on the Owners-Override label. + projectOperations + .project(project) + .forUpdate() + .add( + TestProjectUpdate.allowLabel("Owners-Override") + .range(0, 2) + .ref("refs/*") + .group(REGISTERED_USERS) + .build()) + .update(); + + TestAccount user2 = accountCreator.user2(); + + // Create a code owner config file with 'admin' as code owner + codeOwnerConfigOperations + .newCodeOwnerConfig() + .project(project) + .branch("master") + .folderPath("/") + .addCodeOwnerEmail(admin.email()) + .create(); + + // Create a change as 'user' that is not a code owner. + Path path = Paths.get("/foo/bar.baz"); + String changeId = + createChange(user, "Change Adding A File", JgitPath.of(path).get(), "file content") + .getChangeId(); + + // Verify that the file is not approved yet. + Stream<FileCodeOwnerStatus> fileCodeOwnerStatuses = + codeOwnerApprovalCheck.getFileStatuses(getChangeNotes(changeId)); + FileCodeOwnerStatusSubject fileCodeOwnerStatusSubject = + assertThatStream(fileCodeOwnerStatuses).onlyElement(); + fileCodeOwnerStatusSubject.hasNewPathStatus().value().hasPathThat().isEqualTo(path); + fileCodeOwnerStatusSubject + .hasNewPathStatus() + .value() + .hasStatusThat() + .isEqualTo(CodeOwnerStatus.INSUFFICIENT_REVIEWERS); + + // Let 'user2' override with Owners-Override+2 + requestScopeOperations.setApiUser(user2.id()); + gApi.changes().id(changeId).current().review(new ReviewInput().label("Owners-Override", 2)); + + // Check that the file is approved now. + requestScopeOperations.setApiUser(admin.id()); + fileCodeOwnerStatuses = codeOwnerApprovalCheck.getFileStatuses(getChangeNotes(changeId)); + fileCodeOwnerStatusSubject = assertThatStream(fileCodeOwnerStatuses).onlyElement(); + fileCodeOwnerStatusSubject.hasNewPathStatus().value().hasPathThat().isEqualTo(path); + fileCodeOwnerStatusSubject + .hasNewPathStatus() + .value() + .hasStatusThat() + .isEqualTo(CodeOwnerStatus.APPROVED); + } + + @Test public void noBootstrappingIfDefaultCodeOwnerConfigExists() throws Exception { TestAccount user2 = accountCreator.user2();