github.com/google/go-github/v68@v68.0.0/github/repos_merging_test.go (about) 1 // Copyright 2014 The go-github AUTHORS. All rights reserved. 2 // 3 // Use of this source code is governed by a BSD-style 4 // license that can be found in the LICENSE file. 5 6 package github 7 8 import ( 9 "context" 10 "encoding/json" 11 "fmt" 12 "net/http" 13 "testing" 14 15 "github.com/google/go-cmp/cmp" 16 ) 17 18 func TestRepositoriesService_Merge(t *testing.T) { 19 t.Parallel() 20 client, mux, _ := setup(t) 21 22 input := &RepositoryMergeRequest{ 23 Base: Ptr("b"), 24 Head: Ptr("h"), 25 CommitMessage: Ptr("c"), 26 } 27 28 mux.HandleFunc("/repos/o/r/merges", func(w http.ResponseWriter, r *http.Request) { 29 v := new(RepositoryMergeRequest) 30 assertNilError(t, json.NewDecoder(r.Body).Decode(v)) 31 32 testMethod(t, r, "POST") 33 if !cmp.Equal(v, input) { 34 t.Errorf("Request body = %+v, want %+v", v, input) 35 } 36 37 fmt.Fprint(w, `{"sha":"s"}`) 38 }) 39 40 ctx := context.Background() 41 commit, _, err := client.Repositories.Merge(ctx, "o", "r", input) 42 if err != nil { 43 t.Errorf("Repositories.Merge returned error: %v", err) 44 } 45 46 want := &RepositoryCommit{SHA: Ptr("s")} 47 if !cmp.Equal(commit, want) { 48 t.Errorf("Repositories.Merge returned %+v, want %+v", commit, want) 49 } 50 51 const methodName = "Merge" 52 testBadOptions(t, methodName, func() (err error) { 53 _, _, err = client.Repositories.Merge(ctx, "\n", "\n", input) 54 return err 55 }) 56 57 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 58 got, resp, err := client.Repositories.Merge(ctx, "o", "r", input) 59 if got != nil { 60 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 61 } 62 return resp, err 63 }) 64 } 65 66 func TestRepositoryMergeRequest_Marshal(t *testing.T) { 67 t.Parallel() 68 testJSONMarshal(t, &RepositoryMergeRequest{}, "{}") 69 70 u := &RepositoryMergeRequest{ 71 Base: Ptr("base"), 72 Head: Ptr("head"), 73 CommitMessage: Ptr("cm"), 74 } 75 76 want := `{ 77 "base": "base", 78 "head": "head", 79 "commit_message": "cm" 80 }` 81 82 testJSONMarshal(t, u, want) 83 } 84 85 func TestRepositoriesService_MergeUpstream(t *testing.T) { 86 t.Parallel() 87 client, mux, _ := setup(t) 88 89 input := &RepoMergeUpstreamRequest{ 90 Branch: Ptr("b"), 91 } 92 93 mux.HandleFunc("/repos/o/r/merge-upstream", func(w http.ResponseWriter, r *http.Request) { 94 v := new(RepoMergeUpstreamRequest) 95 assertNilError(t, json.NewDecoder(r.Body).Decode(v)) 96 97 testMethod(t, r, "POST") 98 if !cmp.Equal(v, input) { 99 t.Errorf("Request body = %+v, want %+v", v, input) 100 } 101 102 fmt.Fprint(w, `{"merge_type":"m"}`) 103 }) 104 105 ctx := context.Background() 106 result, _, err := client.Repositories.MergeUpstream(ctx, "o", "r", input) 107 if err != nil { 108 t.Errorf("Repositories.MergeUpstream returned error: %v", err) 109 } 110 111 want := &RepoMergeUpstreamResult{MergeType: Ptr("m")} 112 if !cmp.Equal(result, want) { 113 t.Errorf("Repositories.MergeUpstream returned %+v, want %+v", result, want) 114 } 115 116 const methodName = "MergeUpstream" 117 testBadOptions(t, methodName, func() (err error) { 118 _, _, err = client.Repositories.MergeUpstream(ctx, "\n", "\n", input) 119 return err 120 }) 121 122 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 123 got, resp, err := client.Repositories.MergeUpstream(ctx, "o", "r", input) 124 if got != nil { 125 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 126 } 127 return resp, err 128 }) 129 } 130 131 func TestRepoMergeUpstreamResult_Marshal(t *testing.T) { 132 t.Parallel() 133 testJSONMarshal(t, &RepoMergeUpstreamResult{}, "{}") 134 135 u := &RepoMergeUpstreamResult{ 136 Message: Ptr("message"), 137 MergeType: Ptr("merge_type"), 138 BaseBranch: Ptr("base_branch"), 139 } 140 141 want := `{ 142 "message": "message", 143 "merge_type": "merge_type", 144 "base_branch": "base_branch" 145 }` 146 147 testJSONMarshal(t, u, want) 148 }