github.com/google/go-github/v70@v70.0.0/github/gists_comments_test.go (about) 1 // Copyright 2013 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 "time" 15 16 "github.com/google/go-cmp/cmp" 17 ) 18 19 func TestGistComments_Marshal(t *testing.T) { 20 t.Parallel() 21 testJSONMarshal(t, &GistComment{}, "{}") 22 23 createdAt := time.Date(2002, time.February, 10, 15, 30, 0, 0, time.UTC) 24 25 u := &GistComment{ 26 ID: Ptr(int64(1)), 27 URL: Ptr("u"), 28 Body: Ptr("test gist comment"), 29 User: &User{ 30 Login: Ptr("ll"), 31 ID: Ptr(int64(123)), 32 AvatarURL: Ptr("a"), 33 GravatarID: Ptr("g"), 34 Name: Ptr("n"), 35 Company: Ptr("c"), 36 Blog: Ptr("b"), 37 Location: Ptr("l"), 38 Email: Ptr("e"), 39 Hireable: Ptr(true), 40 PublicRepos: Ptr(1), 41 Followers: Ptr(1), 42 Following: Ptr(1), 43 CreatedAt: &Timestamp{referenceTime}, 44 URL: Ptr("u"), 45 }, 46 CreatedAt: &Timestamp{createdAt}, 47 } 48 49 want := `{ 50 "id": 1, 51 "url": "u", 52 "body": "test gist comment", 53 "user": { 54 "login": "ll", 55 "id": 123, 56 "avatar_url": "a", 57 "gravatar_id": "g", 58 "name": "n", 59 "company": "c", 60 "blog": "b", 61 "location": "l", 62 "email": "e", 63 "hireable": true, 64 "public_repos": 1, 65 "followers": 1, 66 "following": 1, 67 "created_at": ` + referenceTimeStr + `, 68 "url": "u" 69 }, 70 "created_at": "2002-02-10T15:30:00Z" 71 }` 72 73 testJSONMarshal(t, u, want) 74 } 75 func TestGistsService_ListComments(t *testing.T) { 76 t.Parallel() 77 client, mux, _ := setup(t) 78 79 mux.HandleFunc("/gists/1/comments", func(w http.ResponseWriter, r *http.Request) { 80 testMethod(t, r, "GET") 81 testFormValues(t, r, values{"page": "2"}) 82 fmt.Fprint(w, `[{"id": 1}]`) 83 }) 84 85 opt := &ListOptions{Page: 2} 86 ctx := context.Background() 87 comments, _, err := client.Gists.ListComments(ctx, "1", opt) 88 if err != nil { 89 t.Errorf("Gists.Comments returned error: %v", err) 90 } 91 92 want := []*GistComment{{ID: Ptr(int64(1))}} 93 if !cmp.Equal(comments, want) { 94 t.Errorf("Gists.ListComments returned %+v, want %+v", comments, want) 95 } 96 97 const methodName = "ListComments" 98 testBadOptions(t, methodName, func() (err error) { 99 _, _, err = client.Gists.ListComments(ctx, "\n", opt) 100 return err 101 }) 102 103 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 104 got, resp, err := client.Gists.ListComments(ctx, "1", opt) 105 if got != nil { 106 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 107 } 108 return resp, err 109 }) 110 } 111 112 func TestGistsService_ListComments_invalidID(t *testing.T) { 113 t.Parallel() 114 client, _, _ := setup(t) 115 116 ctx := context.Background() 117 _, _, err := client.Gists.ListComments(ctx, "%", nil) 118 testURLParseError(t, err) 119 } 120 121 func TestGistsService_GetComment(t *testing.T) { 122 t.Parallel() 123 client, mux, _ := setup(t) 124 125 mux.HandleFunc("/gists/1/comments/2", func(w http.ResponseWriter, r *http.Request) { 126 testMethod(t, r, "GET") 127 fmt.Fprint(w, `{"id": 1}`) 128 }) 129 130 ctx := context.Background() 131 comment, _, err := client.Gists.GetComment(ctx, "1", 2) 132 if err != nil { 133 t.Errorf("Gists.GetComment returned error: %v", err) 134 } 135 136 want := &GistComment{ID: Ptr(int64(1))} 137 if !cmp.Equal(comment, want) { 138 t.Errorf("Gists.GetComment returned %+v, want %+v", comment, want) 139 } 140 141 const methodName = "GetComment" 142 testBadOptions(t, methodName, func() (err error) { 143 _, _, err = client.Gists.GetComment(ctx, "\n", -2) 144 return err 145 }) 146 147 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 148 got, resp, err := client.Gists.GetComment(ctx, "1", 2) 149 if got != nil { 150 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 151 } 152 return resp, err 153 }) 154 } 155 156 func TestGistsService_GetComment_invalidID(t *testing.T) { 157 t.Parallel() 158 client, _, _ := setup(t) 159 160 ctx := context.Background() 161 _, _, err := client.Gists.GetComment(ctx, "%", 1) 162 testURLParseError(t, err) 163 } 164 165 func TestGistsService_CreateComment(t *testing.T) { 166 t.Parallel() 167 client, mux, _ := setup(t) 168 169 input := &GistComment{ID: Ptr(int64(1)), Body: Ptr("b")} 170 171 mux.HandleFunc("/gists/1/comments", func(w http.ResponseWriter, r *http.Request) { 172 v := new(GistComment) 173 assertNilError(t, json.NewDecoder(r.Body).Decode(v)) 174 175 testMethod(t, r, "POST") 176 if !cmp.Equal(v, input) { 177 t.Errorf("Request body = %+v, want %+v", v, input) 178 } 179 180 fmt.Fprint(w, `{"id":1}`) 181 }) 182 183 ctx := context.Background() 184 comment, _, err := client.Gists.CreateComment(ctx, "1", input) 185 if err != nil { 186 t.Errorf("Gists.CreateComment returned error: %v", err) 187 } 188 189 want := &GistComment{ID: Ptr(int64(1))} 190 if !cmp.Equal(comment, want) { 191 t.Errorf("Gists.CreateComment returned %+v, want %+v", comment, want) 192 } 193 194 const methodName = "CreateComment" 195 testBadOptions(t, methodName, func() (err error) { 196 _, _, err = client.Gists.CreateComment(ctx, "\n", input) 197 return err 198 }) 199 200 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 201 got, resp, err := client.Gists.CreateComment(ctx, "1", input) 202 if got != nil { 203 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 204 } 205 return resp, err 206 }) 207 } 208 209 func TestGistsService_CreateComment_invalidID(t *testing.T) { 210 t.Parallel() 211 client, _, _ := setup(t) 212 213 ctx := context.Background() 214 _, _, err := client.Gists.CreateComment(ctx, "%", nil) 215 testURLParseError(t, err) 216 } 217 218 func TestGistsService_EditComment(t *testing.T) { 219 t.Parallel() 220 client, mux, _ := setup(t) 221 222 input := &GistComment{ID: Ptr(int64(1)), Body: Ptr("b")} 223 224 mux.HandleFunc("/gists/1/comments/2", func(w http.ResponseWriter, r *http.Request) { 225 v := new(GistComment) 226 assertNilError(t, json.NewDecoder(r.Body).Decode(v)) 227 228 testMethod(t, r, "PATCH") 229 if !cmp.Equal(v, input) { 230 t.Errorf("Request body = %+v, want %+v", v, input) 231 } 232 233 fmt.Fprint(w, `{"id":1}`) 234 }) 235 236 ctx := context.Background() 237 comment, _, err := client.Gists.EditComment(ctx, "1", 2, input) 238 if err != nil { 239 t.Errorf("Gists.EditComment returned error: %v", err) 240 } 241 242 want := &GistComment{ID: Ptr(int64(1))} 243 if !cmp.Equal(comment, want) { 244 t.Errorf("Gists.EditComment returned %+v, want %+v", comment, want) 245 } 246 247 const methodName = "EditComment" 248 testBadOptions(t, methodName, func() (err error) { 249 _, _, err = client.Gists.EditComment(ctx, "\n", -2, input) 250 return err 251 }) 252 253 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 254 got, resp, err := client.Gists.EditComment(ctx, "1", 2, input) 255 if got != nil { 256 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 257 } 258 return resp, err 259 }) 260 } 261 262 func TestGistsService_EditComment_invalidID(t *testing.T) { 263 t.Parallel() 264 client, _, _ := setup(t) 265 266 ctx := context.Background() 267 _, _, err := client.Gists.EditComment(ctx, "%", 1, nil) 268 testURLParseError(t, err) 269 } 270 271 func TestGistsService_DeleteComment(t *testing.T) { 272 t.Parallel() 273 client, mux, _ := setup(t) 274 275 mux.HandleFunc("/gists/1/comments/2", func(w http.ResponseWriter, r *http.Request) { 276 testMethod(t, r, "DELETE") 277 }) 278 279 ctx := context.Background() 280 _, err := client.Gists.DeleteComment(ctx, "1", 2) 281 if err != nil { 282 t.Errorf("Gists.Delete returned error: %v", err) 283 } 284 285 const methodName = "DeleteComment" 286 testBadOptions(t, methodName, func() (err error) { 287 _, err = client.Gists.DeleteComment(ctx, "\n", -2) 288 return err 289 }) 290 291 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 292 return client.Gists.DeleteComment(ctx, "1", 2) 293 }) 294 } 295 296 func TestGistsService_DeleteComment_invalidID(t *testing.T) { 297 t.Parallel() 298 client, _, _ := setup(t) 299 300 ctx := context.Background() 301 _, err := client.Gists.DeleteComment(ctx, "%", 1) 302 testURLParseError(t, err) 303 }