1
2
3
4
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 client, mux, _, teardown := setup()
20 defer teardown()
21
22 input := &RepositoryMergeRequest{
23 Base: String("b"),
24 Head: String("h"),
25 CommitMessage: String("c"),
26 }
27
28 mux.HandleFunc("/repos/o/r/merges", func(w http.ResponseWriter, r *http.Request) {
29 v := new(RepositoryMergeRequest)
30 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: String("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 testJSONMarshal(t, &RepositoryMergeRequest{}, "{}")
68
69 u := &RepositoryMergeRequest{
70 Base: String("base"),
71 Head: String("head"),
72 CommitMessage: String("cm"),
73 }
74
75 want := `{
76 "base": "base",
77 "head": "head",
78 "commit_message": "cm"
79 }`
80
81 testJSONMarshal(t, u, want)
82 }
83
84 func TestRepositoriesService_MergeUpstream(t *testing.T) {
85 client, mux, _, teardown := setup()
86 defer teardown()
87
88 input := &RepoMergeUpstreamRequest{
89 Branch: String("b"),
90 }
91
92 mux.HandleFunc("/repos/o/r/merge-upstream", func(w http.ResponseWriter, r *http.Request) {
93 v := new(RepoMergeUpstreamRequest)
94 json.NewDecoder(r.Body).Decode(v)
95
96 testMethod(t, r, "POST")
97 if !cmp.Equal(v, input) {
98 t.Errorf("Request body = %+v, want %+v", v, input)
99 }
100
101 fmt.Fprint(w, `{"merge_type":"m"}`)
102 })
103
104 ctx := context.Background()
105 result, _, err := client.Repositories.MergeUpstream(ctx, "o", "r", input)
106 if err != nil {
107 t.Errorf("Repositories.MergeUpstream returned error: %v", err)
108 }
109
110 want := &RepoMergeUpstreamResult{MergeType: String("m")}
111 if !cmp.Equal(result, want) {
112 t.Errorf("Repositories.MergeUpstream returned %+v, want %+v", result, want)
113 }
114
115 const methodName = "MergeUpstream"
116 testBadOptions(t, methodName, func() (err error) {
117 _, _, err = client.Repositories.MergeUpstream(ctx, "\n", "\n", input)
118 return err
119 })
120
121 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) {
122 got, resp, err := client.Repositories.MergeUpstream(ctx, "o", "r", input)
123 if got != nil {
124 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got)
125 }
126 return resp, err
127 })
128 }
129
View as plain text