github.com/google/go-github/v74@v74.0.0/github/sub_issue_test.go (about) 1 // Copyright 2025 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 TestSubIssuesService_Add(t *testing.T) { 19 t.Parallel() 20 client, mux, _ := setup(t) 21 22 input := &SubIssueRequest{SubIssueID: 42} 23 24 mux.HandleFunc("/repos/o/r/issues/1/sub_issues", func(w http.ResponseWriter, r *http.Request) { 25 v := new(SubIssueRequest) 26 assertNilError(t, json.NewDecoder(r.Body).Decode(v)) 27 28 testMethod(t, r, "POST") 29 if !cmp.Equal(v, input) { 30 t.Errorf("Request body = %+v, want %+v", v, input) 31 } 32 33 fmt.Fprint(w, `{"id":42, "number":1}`) 34 }) 35 36 ctx := context.Background() 37 got, _, err := client.SubIssue.Add(ctx, "o", "r", 1, *input) 38 if err != nil { 39 t.Errorf("SubIssues.Add returned error: %v", err) 40 } 41 42 want := &SubIssue{Number: Ptr(1), ID: Int64(42)} 43 if !cmp.Equal(got, want) { 44 t.Errorf("SubIssues.Add = %+v, want %+v", got, want) 45 } 46 47 const methodName = "Add" 48 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 49 got, resp, err := client.SubIssue.Add(ctx, "o", "r", 1, *input) 50 if got != nil { 51 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 52 } 53 return resp, err 54 }) 55 } 56 57 func TestSubIssuesService_ListByIssue(t *testing.T) { 58 t.Parallel() 59 client, mux, _ := setup(t) 60 61 mux.HandleFunc("/repos/o/r/issues/1/sub_issues", func(w http.ResponseWriter, r *http.Request) { 62 testMethod(t, r, "GET") 63 64 fmt.Fprint(w, `[{"id":1},{"id":2}]`) 65 }) 66 67 ctx := context.Background() 68 opt := &IssueListOptions{} 69 issues, _, err := client.SubIssue.ListByIssue(ctx, "o", "r", 1, opt) 70 if err != nil { 71 t.Errorf("SubIssues.ListByIssue returned error: %v", err) 72 } 73 74 want := []*SubIssue{{ID: Int64(1)}, {ID: Int64(2)}} 75 if !cmp.Equal(issues, want) { 76 t.Errorf("SubIssues.ListByIssue = %+v, want %+v", issues, want) 77 } 78 79 const methodName = "ListByIssue" 80 testBadOptions(t, methodName, func() (err error) { 81 _, _, err = client.SubIssue.ListByIssue(ctx, "\n", "\n", 1, opt) 82 return err 83 }) 84 85 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 86 got, resp, err := client.SubIssue.ListByIssue(ctx, "o", "r", 1, opt) 87 if got != nil { 88 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 89 } 90 return resp, err 91 }) 92 } 93 94 func TestSubIssuesService_Remove(t *testing.T) { 95 t.Parallel() 96 client, mux, _ := setup(t) 97 98 input := &SubIssueRequest{SubIssueID: 42} 99 100 mux.HandleFunc("/repos/o/r/issues/1/sub_issue", func(w http.ResponseWriter, r *http.Request) { 101 v := new(SubIssueRequest) 102 assertNilError(t, json.NewDecoder(r.Body).Decode(v)) 103 104 testMethod(t, r, "DELETE") 105 if !cmp.Equal(v, input) { 106 t.Errorf("Request body = %+v, want %+v", v, input) 107 } 108 109 fmt.Fprint(w, `{"id":42, "number":1}`) 110 }) 111 112 ctx := context.Background() 113 got, _, err := client.SubIssue.Remove(ctx, "o", "r", 1, *input) 114 if err != nil { 115 t.Errorf("SubIssues.Remove returned error: %v", err) 116 } 117 118 want := &SubIssue{ID: Int64(42), Number: Ptr(1)} 119 if !cmp.Equal(got, want) { 120 t.Errorf("SubIssues.Remove = %+v, want %+v", got, want) 121 } 122 123 const methodName = "Remove" 124 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 125 got, resp, err := client.SubIssue.Remove(ctx, "o", "r", 1, *input) 126 if got != nil { 127 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 128 } 129 return resp, err 130 }) 131 } 132 133 func TestSubIssuesService_Reprioritize(t *testing.T) { 134 t.Parallel() 135 client, mux, _ := setup(t) 136 137 input := &SubIssueRequest{SubIssueID: 42, AfterID: Int64(5)} 138 139 mux.HandleFunc("/repos/o/r/issues/1/sub_issues/priority", func(w http.ResponseWriter, r *http.Request) { 140 testMethod(t, r, "PATCH") 141 142 v := new(SubIssueRequest) 143 assertNilError(t, json.NewDecoder(r.Body).Decode(v)) 144 145 testMethod(t, r, "PATCH") 146 if !cmp.Equal(v, input) { 147 t.Errorf("Request body = %+v, want %+v", v, input) 148 } 149 150 fmt.Fprint(w, `{"id":42, "number":1}`) 151 }) 152 153 ctx := context.Background() 154 got, _, err := client.SubIssue.Reprioritize(ctx, "o", "r", 1, *input) 155 if err != nil { 156 t.Errorf("SubIssues.Reprioritize returned error: %v", err) 157 } 158 159 want := &SubIssue{ID: Int64(42), Number: Ptr(1)} 160 if !cmp.Equal(got, want) { 161 t.Errorf("SubIssues.Reprioritize = %+v, want %+v", got, want) 162 } 163 164 const methodName = "Reprioritize" 165 166 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 167 got, resp, err := client.SubIssue.Reprioritize(ctx, "o", "r", 1, *input) 168 if got != nil { 169 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 170 } 171 return resp, err 172 }) 173 }