Test that CodeOwnerSubmitRule returns rule error if OWNERS file is invalid
Signed-off-by: Edwin Kempin <ekempin@google.com>
Change-Id: I588fcaca9081ce87f713beed85122a81d8eeaabd
diff --git a/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/CodeOwnerSubmitRuleIT.java b/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/CodeOwnerSubmitRuleIT.java
index 4e94762..be3bb81 100644
--- a/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/CodeOwnerSubmitRuleIT.java
+++ b/javatests/com/google/gerrit/plugins/codeowners/acceptance/api/CodeOwnerSubmitRuleIT.java
@@ -350,6 +350,47 @@
}
@Test
+ public void changeIsNotSubmittableIfOwnersFileIsNonParsable() throws Exception {
+ // Add a non-parsable code owner config.
+ String nameOfInvalidCodeOwnerConfigFile = getCodeOwnerConfigFileName();
+ createNonParseableCodeOwnerConfig(nameOfInvalidCodeOwnerConfigFile);
+
+ PushOneCommit.Result r = createChange("Some Change", "foo.txt", "some content");
+ String changeId = r.getChangeId();
+
+ // Apply Code-Review+2 to satisfy the MaxWithBlock function of the Code-Review label.
+ approve(changeId);
+
+ ChangeInfo changeInfo =
+ gApi.changes()
+ .id(changeId)
+ .get(
+ ListChangesOption.SUBMITTABLE,
+ ListChangesOption.ALL_REVISIONS,
+ ListChangesOption.CURRENT_ACTIONS);
+ assertThat(changeInfo.submittable).isFalse();
+
+ // Check that the submit button is not visible.
+ assertThat(changeInfo.revisions.get(r.getCommit().getName()).actions.get("submit")).isNull();
+
+ // Check the submit requirement.
+ assertThatCollection(changeInfo.requirements).isEmpty();
+
+ // Try to submit the change.
+ ResourceConflictException exception =
+ assertThrows(
+ ResourceConflictException.class, () -> gApi.changes().id(changeId).current().submit());
+ assertThat(exception)
+ .hasMessageThat()
+ .isEqualTo(
+ String.format(
+ "Failed to submit 1 change due to the following problems:\n"
+ + "Change %s: submit rule error: Failed to evaluate code owner statuses for"
+ + " patch set 1 of change %s.",
+ changeInfo._number, changeInfo._number));
+ }
+
+ @Test
@GerritConfig(
name = "plugin.code-owners.mergeCommitStrategy",
value = "FILES_WITH_CONFLICT_RESOLUTION")
diff --git a/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerSubmitRuleTest.java b/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerSubmitRuleTest.java
index 1772809..c87fb3e 100644
--- a/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerSubmitRuleTest.java
+++ b/javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerSubmitRuleTest.java
@@ -138,10 +138,28 @@
}
@Test
- public void ruleErrorWhenChangeDataIsNull() throws Exception {
+ public void ruleError_changeDataIsNull() throws Exception {
SubmitRecordSubject submitRecordSubject =
assertThatOptional(codeOwnerSubmitRule.evaluate(/* changeData= */ null)).value();
submitRecordSubject.hasStatusThat().isRuleError();
submitRecordSubject.hasErrorMessageThat().isEqualTo("Failed to evaluate code owner statuses.");
}
+
+ @Test
+ public void ruleError_nonParsableCodeOwnerConfig() throws Exception {
+ String nameOfInvalidCodeOwnerConfigFile = getCodeOwnerConfigFileName();
+ createNonParseableCodeOwnerConfig(nameOfInvalidCodeOwnerConfigFile);
+
+ ChangeData changeData = createChange().getChange();
+
+ SubmitRecordSubject submitRecordSubject =
+ assertThatOptional(codeOwnerSubmitRule.evaluate(changeData)).value();
+ submitRecordSubject.hasStatusThat().isRuleError();
+ submitRecordSubject
+ .hasErrorMessageThat()
+ .isEqualTo(
+ String.format(
+ "Failed to evaluate code owner statuses for patch set %d of change %d.",
+ changeData.change().currentPatchSetId().get(), changeData.change().getId().get()));
+ }
}