Add auto-merge setting and merge now functionality
This commit is contained in:
@@ -294,6 +294,67 @@ func TestUpdatePullRequestMutatesTitleBodyAndBaseBranch(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestMergeAndAutoMergeMutationsUseExpectedHeadOID(t *testing.T) {
|
||||
requests := 0
|
||||
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
requests++
|
||||
var request graphQLRequest
|
||||
if err := json.NewDecoder(r.Body).Decode(&request); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
input := request.Variables["input"].(map[string]any)
|
||||
if input["pullRequestId"] != "pr-id" {
|
||||
t.Fatalf("mutation input = %#v", input)
|
||||
}
|
||||
switch {
|
||||
case strings.Contains(request.Query, "EnablePullRequestAutoMerge"):
|
||||
if input["expectedHeadOid"] != "head" || input["mergeMethod"] != "SQUASH" {
|
||||
t.Fatalf("enable input = %#v", input)
|
||||
}
|
||||
_, _ = w.Write([]byte(`{"data":{"enablePullRequestAutoMerge":{"pullRequest":{
|
||||
"autoMergeRequest":{"mergeMethod":"SQUASH","enabledAt":"2026-07-28T12:00:00Z",
|
||||
"enabledBy":{"login":"me"}}
|
||||
}}}}`))
|
||||
case strings.Contains(request.Query, "DisablePullRequestAutoMerge"):
|
||||
_, _ = w.Write([]byte(`{"data":{"disablePullRequestAutoMerge":{
|
||||
"pullRequest":{"id":"pr-id","autoMergeRequest":null}
|
||||
}}}`))
|
||||
case strings.Contains(request.Query, "MergePullRequest"):
|
||||
if input["expectedHeadOid"] != "head" || input["mergeMethod"] != "SQUASH" {
|
||||
t.Fatalf("merge input = %#v", input)
|
||||
}
|
||||
_, _ = w.Write([]byte(`{"data":{"mergePullRequest":{"pullRequest":{
|
||||
"merged":true,"mergedAt":"2026-07-28T12:01:00Z"
|
||||
}}}}`))
|
||||
default:
|
||||
t.Fatalf("unexpected mutation:\n%s", request.Query)
|
||||
}
|
||||
}))
|
||||
defer server.Close()
|
||||
|
||||
client := NewGitHubClient(server.URL, "secret")
|
||||
auto, err := client.SetPullRequestAutoMerge(
|
||||
context.Background(), "pr-id", "head", "SQUASH", true,
|
||||
)
|
||||
if err != nil || auto == nil || auto.MergeMethod != "SQUASH" || auto.EnabledBy != "me" {
|
||||
t.Fatalf("enable result = %#v, error = %v", auto, err)
|
||||
}
|
||||
if _, err := client.SetPullRequestAutoMerge(
|
||||
context.Background(), "pr-id", "head", "SQUASH", false,
|
||||
); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
merged, err := client.MergePullRequest(
|
||||
context.Background(), "pr-id", "head", "SQUASH",
|
||||
)
|
||||
if err != nil || !merged.Merged || merged.MergedAt.IsZero() {
|
||||
t.Fatalf("merge result = %#v, error = %v", merged, err)
|
||||
}
|
||||
if requests != 3 {
|
||||
t.Fatalf("mutation requests = %d, want 3", requests)
|
||||
}
|
||||
}
|
||||
|
||||
func TestCheckContextsAndAnnotationsArePaginated(t *testing.T) {
|
||||
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
var request graphQLRequest
|
||||
@@ -428,14 +489,18 @@ func TestGetPullRequestPaginatesThreadsCommentsConversationAndReviews(t *testing
|
||||
|
||||
func TestGetPullRequestUsesOriginalLineAndMetadata(t *testing.T) {
|
||||
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
_, _ = w.Write([]byte(`{"data":{"repository":{"viewerPermission":"WRITE","pullRequest":{
|
||||
_, _ = w.Write([]byte(`{"data":{"repository":{"viewerPermission":"WRITE",
|
||||
"squashMergeAllowed":true,"mergeCommitAllowed":false,"rebaseMergeAllowed":true,
|
||||
"pullRequest":{
|
||||
"id":"pr","number":9,"title":"Fix","url":"u","body":"body","isDraft":false,
|
||||
"createdAt":"2025-12-01T00:00:00Z","updatedAt":"2026-01-01T00:00:00Z",
|
||||
"mergeable":"MERGEABLE","mergeStateStatus":"CLEAN","reviewDecision":"APPROVED",
|
||||
"additions":12,"deletions":4,"changedFiles":3,
|
||||
"baseRefName":"main","headRefName":"fix","headRefOid":"abcdef0123456789",
|
||||
"viewerCanUpdate":true,"viewerCanReact":true,"viewerCanSubscribe":true,
|
||||
"viewerCanEnableAutoMerge":true,
|
||||
"viewerCanEnableAutoMerge":false,"viewerCanDisableAutoMerge":true,
|
||||
"autoMergeRequest":{"mergeMethod":"SQUASH","enabledAt":"2026-01-01T01:00:00Z",
|
||||
"enabledBy":{"login":"zam"}},
|
||||
"baseRef":{"branchProtectionRule":{"requiresApprovingReviews":true,
|
||||
"requiredApprovingReviewCount":2,"requiresStatusChecks":true,
|
||||
"requiresConversationResolution":true,"requiresCodeOwnerReviews":true}},
|
||||
@@ -493,6 +558,11 @@ func TestGetPullRequestUsesOriginalLineAndMetadata(t *testing.T) {
|
||||
!got.Requirements.RequiresConversation || !got.Requirements.RequiresCodeOwnerReview {
|
||||
t.Fatalf("unexpected read capabilities: %#v", got)
|
||||
}
|
||||
if got.AutoMerge == nil || got.AutoMerge.MergeMethod != "SQUASH" ||
|
||||
got.AutoMerge.EnabledBy != "zam" || !got.Permissions.CanDisableMerge ||
|
||||
strings.Join(got.AllowedMergeMethods, ",") != "SQUASH,REBASE" {
|
||||
t.Fatalf("unexpected merge metadata: %#v", got)
|
||||
}
|
||||
if len(got.Threads) != 1 || got.Threads[0].Line != 42 || got.Threads[0].StartLine != 40 ||
|
||||
got.Threads[0].DiffSide != "RIGHT" || got.Threads[0].IsTruncated {
|
||||
t.Fatalf("unexpected thread: %#v", got.Threads)
|
||||
|
||||
Reference in New Issue
Block a user