use of com.google.gerrit.entities.Project in project gerrit by GerritCodeReview.
the class SubmitRequirementIT method submitRequirement_retrievedFromNoteDbForAbandonedChanges.
@Test
public void submitRequirement_retrievedFromNoteDbForAbandonedChanges() throws Exception {
for (SubmitType submitType : SubmitType.values()) {
Project.NameKey project = createProjectForPush(submitType);
TestRepository<InMemoryRepository> repo = cloneProject(project);
configSubmitRequirement(project, SubmitRequirement.builder().setName("Code-Review").setSubmittabilityExpression(SubmitRequirementExpression.maxCodeReview()).setAllowOverrideInChildProjects(false).build());
PushOneCommit.Result r = createChange(repo, "master", "Add a file", "foo", "content", "topic");
String changeId = r.getChangeId();
voteLabel(changeId, "Code-Review", 2);
gApi.changes().id(changeId).abandon();
// Add another submit requirement. This will not get returned for the abandoned change, since
// we return the state of the SR results when the change was abandoned.
configSubmitRequirement(project, SubmitRequirement.builder().setName("New-Requirement").setSubmittabilityExpression(SubmitRequirementExpression.create("-has:unresolved")).setAllowOverrideInChildProjects(false).build());
ChangeInfo changeInfo = gApi.changes().id(changeId).get(ListChangesOption.SUBMIT_REQUIREMENTS);
assertThat(changeInfo.submitRequirements).hasSize(1);
assertSubmitRequirementStatus(changeInfo.submitRequirements, "Code-Review", Status.SATISFIED, /* isLegacy= */
false, /* submittabilityCondition= */
"label:Code-Review=MAX");
// Restore the change, the new requirement will show up
gApi.changes().id(changeId).restore();
changeInfo = gApi.changes().id(changeId).get(ListChangesOption.SUBMIT_REQUIREMENTS);
assertThat(changeInfo.submitRequirements).hasSize(2);
assertSubmitRequirementStatus(changeInfo.submitRequirements, "Code-Review", Status.SATISFIED, /* isLegacy= */
false, /* submittabilityCondition= */
"label:Code-Review=MAX");
assertSubmitRequirementStatus(changeInfo.submitRequirements, "New-Requirement", Status.SATISFIED, /* isLegacy= */
false, /* submittabilityCondition= */
"-has:unresolved");
// Abandon again, make sure the new requirement was persisted
gApi.changes().id(changeId).abandon();
changeInfo = gApi.changes().id(changeId).get(ListChangesOption.SUBMIT_REQUIREMENTS);
assertThat(changeInfo.submitRequirements).hasSize(2);
assertSubmitRequirementStatus(changeInfo.submitRequirements, "Code-Review", Status.SATISFIED, /* isLegacy= */
false, /* submittabilityCondition= */
"label:Code-Review=MAX");
assertSubmitRequirementStatus(changeInfo.submitRequirements, "New-Requirement", Status.SATISFIED, /* isLegacy= */
false, /* submittabilityCondition= */
"-has:unresolved");
}
}
use of com.google.gerrit.entities.Project in project gerrit by GerritCodeReview.
the class SubmitRequirementIT method submitRequirement_overriden_submittabilityEvaluated.
@Test
public void submitRequirement_overriden_submittabilityEvaluated() throws Exception {
configSubmitRequirement(project, SubmitRequirement.builder().setName("Code-Review").setApplicabilityExpression(Optional.empty()).setSubmittabilityExpression(SubmitRequirementExpression.maxCodeReview()).setOverrideExpression(SubmitRequirementExpression.of("project:" + project.get())).setAllowOverrideInChildProjects(false).build());
PushOneCommit.Result r = createChange();
String changeId = r.getChangeId();
voteLabel(changeId, "Code-Review", 1);
ChangeInfo changeInfo = gApi.changes().id(changeId).get();
assertSubmitRequirementStatus(changeInfo.submitRequirements, "Code-Review", Status.OVERRIDDEN, /* isLegacy= */
false);
SubmitRequirementResultInfo requirement = changeInfo.submitRequirements.stream().filter(sr -> !sr.isLegacy).collect(MoreCollectors.onlyElement());
assertThat(requirement.applicabilityExpressionResult).isNull();
assertSubmitRequirementExpression(requirement.submittabilityExpressionResult, /* expression= */
SubmitRequirementExpression.maxCodeReview().expressionString(), /* passingAtoms= */
ImmutableList.of(), /* failingAtoms= */
ImmutableList.of(SubmitRequirementExpression.maxCodeReview().expressionString()), /* fulfilled= */
false);
assertSubmitRequirementExpression(requirement.overrideExpressionResult, /* expression= */
"project:" + project.get(), /* passingAtoms= */
ImmutableList.of("project:" + project.get()), /* failingAtoms= */
ImmutableList.of(), /* fulfilled= */
true);
}
use of com.google.gerrit.entities.Project in project gerrit by GerritCodeReview.
the class SubmitRequirementIT method submitRequirement_loadedFromTheLatestRevisionNoteForClosedChanges.
@Test
public void submitRequirement_loadedFromTheLatestRevisionNoteForClosedChanges() throws Exception {
for (SubmitType submitType : SubmitType.values()) {
Project.NameKey project = createProjectForPush(submitType);
TestRepository<InMemoryRepository> repo = cloneProject(project);
configSubmitRequirement(project, SubmitRequirement.builder().setName("Code-Review").setSubmittabilityExpression(SubmitRequirementExpression.maxCodeReview()).setAllowOverrideInChildProjects(false).build());
PushOneCommit.Result r = createChange(repo, "master", "Add a file", "foo", "content", "topic");
String changeId = r.getChangeId();
// Abandon change. Submit requirements get stored in the revision note of patch-set 1.
gApi.changes().id(changeId).abandon();
ChangeInfo change = gApi.changes().id(changeId).get();
assertThat(change.submitRequirements).hasSize(1);
assertSubmitRequirementStatus(change.submitRequirements, "Code-Review", Status.UNSATISFIED, /* isLegacy= */
false);
// Restore the change.
gApi.changes().id(changeId).restore();
change = gApi.changes().id(changeId).get();
assertThat(change.submitRequirements).hasSize(1);
assertSubmitRequirementStatus(change.submitRequirements, "Code-Review", Status.UNSATISFIED, /* isLegacy= */
false);
// Upload a second patch-set, fulfill the CR submit requirement.
amendChange(changeId, "refs/for/master", user, repo);
change = gApi.changes().id(changeId).get();
assertThat(change.revisions).hasSize(2);
voteLabel(changeId, "Code-Review", 2);
change = gApi.changes().id(changeId).get();
assertThat(change.submitRequirements).hasSize(1);
assertSubmitRequirementStatus(change.submitRequirements, "Code-Review", Status.SATISFIED, /* isLegacy= */
false);
// Abandon the change.
gApi.changes().id(changeId).abandon();
change = gApi.changes().id(changeId).get();
assertThat(change.submitRequirements).hasSize(1);
assertSubmitRequirementStatus(change.submitRequirements, "Code-Review", Status.SATISFIED, /* isLegacy= */
false);
}
}
use of com.google.gerrit.entities.Project in project gerrit by GerritCodeReview.
the class SubmitRequirementIT method submitRequirement_storedForAbandonedChanges.
@Test
public void submitRequirement_storedForAbandonedChanges() throws Exception {
for (SubmitType submitType : SubmitType.values()) {
Project.NameKey project = createProjectForPush(submitType);
TestRepository<InMemoryRepository> repo = cloneProject(project);
configSubmitRequirement(project, SubmitRequirement.builder().setName("Code-Review").setSubmittabilityExpression(SubmitRequirementExpression.maxCodeReview()).setAllowOverrideInChildProjects(false).build());
PushOneCommit.Result r = createChange(repo, "master", "Add a file", "foo", "content", "topic");
String changeId = r.getChangeId();
voteLabel(changeId, "Code-Review", 2);
ChangeInfo change = gApi.changes().id(changeId).get();
assertThat(change.submitRequirements).hasSize(1);
assertSubmitRequirementStatus(change.submitRequirements, "Code-Review", Status.SATISFIED, /* isLegacy= */
false);
gApi.changes().id(r.getChangeId()).abandon();
ChangeNotes notes = notesFactory.create(project, r.getChange().getId());
SubmitRequirementResult result = notes.getSubmitRequirementsResult().stream().collect(MoreCollectors.onlyElement());
assertThat(result.status()).isEqualTo(SubmitRequirementResult.Status.SATISFIED);
assertThat(result.submittabilityExpressionResult().get().status()).isEqualTo(SubmitRequirementExpressionResult.Status.PASS);
assertThat(result.submittabilityExpressionResult().get().expression().expressionString()).isEqualTo("label:Code-Review=MAX");
}
}
use of com.google.gerrit.entities.Project in project gerrit by GerritCodeReview.
the class SubmitRequirementIT method submitRequirement_returnsEmpty_forAbandonedChangeWithPreviouslyStoredSRs.
@Test
public void submitRequirement_returnsEmpty_forAbandonedChangeWithPreviouslyStoredSRs() throws Exception {
for (SubmitType submitType : SubmitType.values()) {
Project.NameKey project = createProjectForPush(submitType);
TestRepository<InMemoryRepository> repo = cloneProject(project);
configSubmitRequirement(project, SubmitRequirement.builder().setName("Code-Review").setSubmittabilityExpression(SubmitRequirementExpression.maxCodeReview()).setAllowOverrideInChildProjects(false).build());
PushOneCommit.Result r = createChange(repo, "master", "Add a file", "foo", "content", "topic");
String changeId = r.getChangeId();
// Abandon change. Submit requirements get stored in the revision note of patch-set 1.
gApi.changes().id(changeId).abandon();
ChangeInfo change = gApi.changes().id(changeId).get();
assertThat(change.submitRequirements).hasSize(1);
assertSubmitRequirementStatus(change.submitRequirements, "Code-Review", Status.UNSATISFIED, /* isLegacy= */
false);
// Clear SRs for the project and update code-review label to be non-blocking.
clearSubmitRequirements(project);
LabelType cr = TestLabels.codeReview().toBuilder().setFunction(LabelFunction.NO_BLOCK).build();
try (ProjectConfigUpdate u = updateProject(project)) {
u.getConfig().upsertLabelType(cr);
u.save();
}
// Restore the change. No SRs apply.
gApi.changes().id(changeId).restore();
change = gApi.changes().id(changeId).get();
assertThat(change.submitRequirements).isEmpty();
// Abandon the change. Still, no SRs apply.
gApi.changes().id(changeId).abandon();
change = gApi.changes().id(changeId).get();
assertThat(change.submitRequirements).isEmpty();
}
}
Aggregations