diff --git a/.tool-versions b/.tool-versions new file mode 100644 index 000000000..f3e9f95a4 --- /dev/null +++ b/.tool-versions @@ -0,0 +1 @@ +java temurin-11.0.28+6 diff --git a/gitlab4j-models/src/main/java/org/gitlab4j/api/models/MergeRequestParams.java b/gitlab4j-models/src/main/java/org/gitlab4j/api/models/MergeRequestParams.java index 5d9f93864..2bc02c1f3 100644 --- a/gitlab4j-models/src/main/java/org/gitlab4j/api/models/MergeRequestParams.java +++ b/gitlab4j-models/src/main/java/org/gitlab4j/api/models/MergeRequestParams.java @@ -29,6 +29,7 @@ public class MergeRequestParams implements Serializable { private Boolean discussionLocked; private Boolean allowCollaboration; private Integer approvalsBeforeMerge; + private Boolean draft; /** * Set the source branch. This is for merge request creation only. @@ -220,6 +221,17 @@ public MergeRequestParams withApprovalsBeforeMerge(Integer approvalsBeforeMerge) return (this); } + /** + * Set the draft flag of the merge request. + * + * @param draft the draft flag to set + * @return the reference to this MergeRequestParams instance + */ + public MergeRequestParams withDraft(Boolean draft) { + this.draft = draft; + return (this); + } + /** * Get the form params specified by this instance. * @@ -229,9 +241,14 @@ public MergeRequestParams withApprovalsBeforeMerge(Integer approvalsBeforeMerge) */ public GitLabForm getForm(boolean isCreate) { + String titleToUse = title; + if (Boolean.TRUE.equals(draft)) { + titleToUse = "Draft: " + (title != null ? title : ""); + } + GitLabForm form = new GitLabForm() .withParam("target_branch", targetBranch, isCreate) - .withParam("title", title, isCreate) + .withParam("title", titleToUse, isCreate) .withParam("assignee_id", assigneeId) .withParam("assignee_ids", assigneeIds) .withParam("reviewer_ids", reviewerIds) diff --git a/gitlab4j-models/src/test/java/org/gitlab4j/api/models/TestMergeRequestParams.java b/gitlab4j-models/src/test/java/org/gitlab4j/api/models/TestMergeRequestParams.java new file mode 100644 index 000000000..fb7d6ac50 --- /dev/null +++ b/gitlab4j-models/src/test/java/org/gitlab4j/api/models/TestMergeRequestParams.java @@ -0,0 +1,61 @@ +package org.gitlab4j.api.models; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; + +import org.gitlab4j.models.GitLabForm; +import org.gitlab4j.models.GitLabFormValue; +import org.junit.jupiter.api.Test; + +public class TestMergeRequestParams { + + @Test + public void testDraftPrefix() { + MergeRequestParams params = + new MergeRequestParams().withTitle("My Title").withDraft(true); + + GitLabForm form = params.getForm(true); + Object titleValue = form.getFormValues().get("title").getValue(); + assertEquals("Draft: My Title", titleValue); + } + + @Test + public void testNoDraftPrefix() { + MergeRequestParams params = + new MergeRequestParams().withTitle("My Title").withDraft(false); + + GitLabForm form = params.getForm(true); + Object titleValue = form.getFormValues().get("title").getValue(); + assertEquals("My Title", titleValue); + } + + @Test + public void testNullDraftPrefix() { + MergeRequestParams params = + new MergeRequestParams().withTitle("My Title").withDraft(null); + + GitLabForm form = params.getForm(true); + Object titleValue = form.getFormValues().get("title").getValue(); + assertEquals("My Title", titleValue); + } + + @Test + public void testDraftWithNullTitle() { + MergeRequestParams params = new MergeRequestParams().withTitle(null).withDraft(true); + + GitLabForm form = params.getForm(true); + Object titleValue = form.getFormValues().get("title").getValue(); + assertEquals("Draft: ", titleValue); + } + + @Test + public void testNoDraftWithNullTitle() { + MergeRequestParams params = new MergeRequestParams().withTitle(null).withDraft(false); + + GitLabForm form = params.getForm(true); + GitLabFormValue titleFormValue = form.getFormValues().get("title"); + assertNotNull(titleFormValue); + assertNull(titleFormValue.getValue()); + } +}