github.com/google/go-github/v53@v53.2.0/github/actions_runners_test.go (about) 1 // Copyright 2020 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 TestActionsService_ListRunnerApplicationDownloads(t *testing.T) { 20 client, mux, _, teardown := setup() 21 defer teardown() 22 23 mux.HandleFunc("/repos/o/r/actions/runners/downloads", func(w http.ResponseWriter, r *http.Request) { 24 testMethod(t, r, "GET") 25 fmt.Fprint(w, `[{"os":"osx","architecture":"x64","download_url":"https://github.com/actions/runner/releases/download/v2.164.0/actions-runner-osx-x64-2.164.0.tar.gz","filename":"actions-runner-osx-x64-2.164.0.tar.gz"},{"os":"linux","architecture":"x64","download_url":"https://github.com/actions/runner/releases/download/v2.164.0/actions-runner-linux-x64-2.164.0.tar.gz","filename":"actions-runner-linux-x64-2.164.0.tar.gz"},{"os": "linux","architecture":"arm","download_url":"https://github.com/actions/runner/releases/download/v2.164.0/actions-runner-linux-arm-2.164.0.tar.gz","filename":"actions-runner-linux-arm-2.164.0.tar.gz"},{"os":"win","architecture":"x64","download_url":"https://github.com/actions/runner/releases/download/v2.164.0/actions-runner-win-x64-2.164.0.zip","filename":"actions-runner-win-x64-2.164.0.zip"},{"os":"linux","architecture":"arm64","download_url":"https://github.com/actions/runner/releases/download/v2.164.0/actions-runner-linux-arm64-2.164.0.tar.gz","filename":"actions-runner-linux-arm64-2.164.0.tar.gz"}]`) 26 }) 27 28 ctx := context.Background() 29 downloads, _, err := client.Actions.ListRunnerApplicationDownloads(ctx, "o", "r") 30 if err != nil { 31 t.Errorf("Actions.ListRunnerApplicationDownloads returned error: %v", err) 32 } 33 34 want := []*RunnerApplicationDownload{ 35 {OS: String("osx"), Architecture: String("x64"), DownloadURL: String("https://github.com/actions/runner/releases/download/v2.164.0/actions-runner-osx-x64-2.164.0.tar.gz"), Filename: String("actions-runner-osx-x64-2.164.0.tar.gz")}, 36 {OS: String("linux"), Architecture: String("x64"), DownloadURL: String("https://github.com/actions/runner/releases/download/v2.164.0/actions-runner-linux-x64-2.164.0.tar.gz"), Filename: String("actions-runner-linux-x64-2.164.0.tar.gz")}, 37 {OS: String("linux"), Architecture: String("arm"), DownloadURL: String("https://github.com/actions/runner/releases/download/v2.164.0/actions-runner-linux-arm-2.164.0.tar.gz"), Filename: String("actions-runner-linux-arm-2.164.0.tar.gz")}, 38 {OS: String("win"), Architecture: String("x64"), DownloadURL: String("https://github.com/actions/runner/releases/download/v2.164.0/actions-runner-win-x64-2.164.0.zip"), Filename: String("actions-runner-win-x64-2.164.0.zip")}, 39 {OS: String("linux"), Architecture: String("arm64"), DownloadURL: String("https://github.com/actions/runner/releases/download/v2.164.0/actions-runner-linux-arm64-2.164.0.tar.gz"), Filename: String("actions-runner-linux-arm64-2.164.0.tar.gz")}, 40 } 41 if !cmp.Equal(downloads, want) { 42 t.Errorf("Actions.ListRunnerApplicationDownloads returned %+v, want %+v", downloads, want) 43 } 44 45 const methodName = "ListRunnerApplicationDownloads" 46 testBadOptions(t, methodName, func() (err error) { 47 _, _, err = client.Actions.ListRunnerApplicationDownloads(ctx, "\n", "\n") 48 return err 49 }) 50 51 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 52 got, resp, err := client.Actions.ListRunnerApplicationDownloads(ctx, "o", "r") 53 if got != nil { 54 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 55 } 56 return resp, err 57 }) 58 } 59 60 func TestActionsService_GenerateOrgJITConfig(t *testing.T) { 61 client, mux, _, teardown := setup() 62 defer teardown() 63 64 input := &GenerateJITConfigRequest{Name: "test", RunnerGroupID: 1, Labels: []string{"one", "two"}} 65 66 mux.HandleFunc("/orgs/o/actions/runners/generate-jitconfig", func(w http.ResponseWriter, r *http.Request) { 67 v := new(GenerateJITConfigRequest) 68 json.NewDecoder(r.Body).Decode(v) 69 70 testMethod(t, r, "POST") 71 if !cmp.Equal(v, input) { 72 t.Errorf("Request body = %+v, want %+v", v, input) 73 } 74 75 fmt.Fprint(w, `{"encoded_jit_config":"foo"}`) 76 }) 77 78 ctx := context.Background() 79 jitConfig, _, err := client.Actions.GenerateOrgJITConfig(ctx, "o", input) 80 if err != nil { 81 t.Errorf("Actions.GenerateOrgJITConfig returned error: %v", err) 82 } 83 84 want := &JITRunnerConfig{EncodedJITConfig: String("foo")} 85 if !cmp.Equal(jitConfig, want) { 86 t.Errorf("Actions.GenerateOrgJITConfig returned %+v, want %+v", jitConfig, want) 87 } 88 89 const methodName = "GenerateOrgJITConfig" 90 testBadOptions(t, methodName, func() (err error) { 91 _, _, err = client.Actions.GenerateOrgJITConfig(ctx, "\n", input) 92 return err 93 }) 94 95 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 96 got, resp, err := client.Actions.GenerateOrgJITConfig(ctx, "o", input) 97 if got != nil { 98 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 99 } 100 return resp, err 101 }) 102 } 103 104 func TestActionsService_GenerateRepoJITConfig(t *testing.T) { 105 client, mux, _, teardown := setup() 106 defer teardown() 107 108 input := &GenerateJITConfigRequest{Name: "test", RunnerGroupID: 1, Labels: []string{"one", "two"}} 109 110 mux.HandleFunc("/repos/o/r/actions/runners/generate-jitconfig", func(w http.ResponseWriter, r *http.Request) { 111 v := new(GenerateJITConfigRequest) 112 json.NewDecoder(r.Body).Decode(v) 113 114 testMethod(t, r, "POST") 115 if !cmp.Equal(v, input) { 116 t.Errorf("Request body = %+v, want %+v", v, input) 117 } 118 119 fmt.Fprint(w, `{"encoded_jit_config":"foo"}`) 120 }) 121 122 ctx := context.Background() 123 jitConfig, _, err := client.Actions.GenerateRepoJITConfig(ctx, "o", "r", input) 124 if err != nil { 125 t.Errorf("Actions.GenerateRepoJITConfig returned error: %v", err) 126 } 127 128 want := &JITRunnerConfig{EncodedJITConfig: String("foo")} 129 if !cmp.Equal(jitConfig, want) { 130 t.Errorf("Actions.GenerateRepoJITConfig returned %+v, want %+v", jitConfig, want) 131 } 132 133 const methodName = "GenerateRepoJITConfig" 134 testBadOptions(t, methodName, func() (err error) { 135 _, _, err = client.Actions.GenerateRepoJITConfig(ctx, "\n", "\n", input) 136 return err 137 }) 138 139 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 140 got, resp, err := client.Actions.GenerateRepoJITConfig(ctx, "o", "r", input) 141 if got != nil { 142 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 143 } 144 return resp, err 145 }) 146 } 147 148 func TestActionsService_CreateRegistrationToken(t *testing.T) { 149 client, mux, _, teardown := setup() 150 defer teardown() 151 152 mux.HandleFunc("/repos/o/r/actions/runners/registration-token", func(w http.ResponseWriter, r *http.Request) { 153 testMethod(t, r, "POST") 154 fmt.Fprint(w, `{"token":"LLBF3JGZDX3P5PMEXLND6TS6FCWO6","expires_at":"2020-01-22T12:13:35.123Z"}`) 155 }) 156 157 ctx := context.Background() 158 token, _, err := client.Actions.CreateRegistrationToken(ctx, "o", "r") 159 if err != nil { 160 t.Errorf("Actions.CreateRegistrationToken returned error: %v", err) 161 } 162 163 want := &RegistrationToken{Token: String("LLBF3JGZDX3P5PMEXLND6TS6FCWO6"), 164 ExpiresAt: &Timestamp{time.Date(2020, time.January, 22, 12, 13, 35, 165 123000000, time.UTC)}} 166 if !cmp.Equal(token, want) { 167 t.Errorf("Actions.CreateRegistrationToken returned %+v, want %+v", token, want) 168 } 169 170 const methodName = "CreateRegistrationToken" 171 testBadOptions(t, methodName, func() (err error) { 172 _, _, err = client.Actions.CreateRegistrationToken(ctx, "\n", "\n") 173 return err 174 }) 175 176 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 177 got, resp, err := client.Actions.CreateRegistrationToken(ctx, "o", "r") 178 if got != nil { 179 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 180 } 181 return resp, err 182 }) 183 } 184 185 func TestActionsService_ListRunners(t *testing.T) { 186 client, mux, _, teardown := setup() 187 defer teardown() 188 189 mux.HandleFunc("/repos/o/r/actions/runners", func(w http.ResponseWriter, r *http.Request) { 190 testMethod(t, r, "GET") 191 testFormValues(t, r, values{"per_page": "2", "page": "2"}) 192 fmt.Fprint(w, `{"total_count":2,"runners":[{"id":23,"name":"MBP","os":"macos","status":"online"},{"id":24,"name":"iMac","os":"macos","status":"offline"}]}`) 193 }) 194 195 opts := &ListOptions{Page: 2, PerPage: 2} 196 ctx := context.Background() 197 runners, _, err := client.Actions.ListRunners(ctx, "o", "r", opts) 198 if err != nil { 199 t.Errorf("Actions.ListRunners returned error: %v", err) 200 } 201 202 want := &Runners{ 203 TotalCount: 2, 204 Runners: []*Runner{ 205 {ID: Int64(23), Name: String("MBP"), OS: String("macos"), Status: String("online")}, 206 {ID: Int64(24), Name: String("iMac"), OS: String("macos"), Status: String("offline")}, 207 }, 208 } 209 if !cmp.Equal(runners, want) { 210 t.Errorf("Actions.ListRunners returned %+v, want %+v", runners, want) 211 } 212 213 const methodName = "ListRunners" 214 testBadOptions(t, methodName, func() (err error) { 215 _, _, err = client.Actions.ListRunners(ctx, "\n", "\n", opts) 216 return err 217 }) 218 219 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 220 got, resp, err := client.Actions.ListRunners(ctx, "o", "r", opts) 221 if got != nil { 222 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 223 } 224 return resp, err 225 }) 226 } 227 228 func TestActionsService_GetRunner(t *testing.T) { 229 client, mux, _, teardown := setup() 230 defer teardown() 231 232 mux.HandleFunc("/repos/o/r/actions/runners/23", func(w http.ResponseWriter, r *http.Request) { 233 testMethod(t, r, "GET") 234 fmt.Fprint(w, `{"id":23,"name":"MBP","os":"macos","status":"online"}`) 235 }) 236 237 ctx := context.Background() 238 runner, _, err := client.Actions.GetRunner(ctx, "o", "r", 23) 239 if err != nil { 240 t.Errorf("Actions.GetRunner returned error: %v", err) 241 } 242 243 want := &Runner{ 244 ID: Int64(23), 245 Name: String("MBP"), 246 OS: String("macos"), 247 Status: String("online"), 248 } 249 if !cmp.Equal(runner, want) { 250 t.Errorf("Actions.GetRunner returned %+v, want %+v", runner, want) 251 } 252 253 const methodName = "GetRunner" 254 testBadOptions(t, methodName, func() (err error) { 255 _, _, err = client.Actions.GetRunner(ctx, "\n", "\n", 23) 256 return err 257 }) 258 259 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 260 got, resp, err := client.Actions.GetRunner(ctx, "o", "r", 23) 261 if got != nil { 262 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 263 } 264 return resp, err 265 }) 266 } 267 268 func TestActionsService_CreateRemoveToken(t *testing.T) { 269 client, mux, _, teardown := setup() 270 defer teardown() 271 272 mux.HandleFunc("/repos/o/r/actions/runners/remove-token", func(w http.ResponseWriter, r *http.Request) { 273 testMethod(t, r, "POST") 274 fmt.Fprint(w, `{"token":"AABF3JGZDX3P5PMEXLND6TS6FCWO6","expires_at":"2020-01-29T12:13:35.123Z"}`) 275 }) 276 277 ctx := context.Background() 278 token, _, err := client.Actions.CreateRemoveToken(ctx, "o", "r") 279 if err != nil { 280 t.Errorf("Actions.CreateRemoveToken returned error: %v", err) 281 } 282 283 want := &RemoveToken{Token: String("AABF3JGZDX3P5PMEXLND6TS6FCWO6"), ExpiresAt: &Timestamp{time.Date(2020, time.January, 29, 12, 13, 35, 123000000, time.UTC)}} 284 if !cmp.Equal(token, want) { 285 t.Errorf("Actions.CreateRemoveToken returned %+v, want %+v", token, want) 286 } 287 288 const methodName = "CreateRemoveToken" 289 testBadOptions(t, methodName, func() (err error) { 290 _, _, err = client.Actions.CreateRemoveToken(ctx, "\n", "\n") 291 return err 292 }) 293 294 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 295 got, resp, err := client.Actions.CreateRemoveToken(ctx, "o", "r") 296 if got != nil { 297 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 298 } 299 return resp, err 300 }) 301 } 302 303 func TestActionsService_RemoveRunner(t *testing.T) { 304 client, mux, _, teardown := setup() 305 defer teardown() 306 307 mux.HandleFunc("/repos/o/r/actions/runners/21", func(w http.ResponseWriter, r *http.Request) { 308 testMethod(t, r, "DELETE") 309 }) 310 311 ctx := context.Background() 312 _, err := client.Actions.RemoveRunner(ctx, "o", "r", 21) 313 if err != nil { 314 t.Errorf("Actions.RemoveRunner returned error: %v", err) 315 } 316 317 const methodName = "RemoveRunner" 318 testBadOptions(t, methodName, func() (err error) { 319 _, err = client.Actions.RemoveRunner(ctx, "\n", "\n", 21) 320 return err 321 }) 322 323 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 324 return client.Actions.RemoveRunner(ctx, "o", "r", 21) 325 }) 326 } 327 328 func TestActionsService_ListOrganizationRunnerApplicationDownloads(t *testing.T) { 329 client, mux, _, teardown := setup() 330 defer teardown() 331 332 mux.HandleFunc("/orgs/o/actions/runners/downloads", func(w http.ResponseWriter, r *http.Request) { 333 testMethod(t, r, "GET") 334 fmt.Fprint(w, `[{"os":"osx","architecture":"x64","download_url":"https://github.com/actions/runner/releases/download/v2.164.0/actions-runner-osx-x64-2.164.0.tar.gz","filename":"actions-runner-osx-x64-2.164.0.tar.gz"},{"os":"linux","architecture":"x64","download_url":"https://github.com/actions/runner/releases/download/v2.164.0/actions-runner-linux-x64-2.164.0.tar.gz","filename":"actions-runner-linux-x64-2.164.0.tar.gz"},{"os": "linux","architecture":"arm","download_url":"https://github.com/actions/runner/releases/download/v2.164.0/actions-runner-linux-arm-2.164.0.tar.gz","filename":"actions-runner-linux-arm-2.164.0.tar.gz"},{"os":"win","architecture":"x64","download_url":"https://github.com/actions/runner/releases/download/v2.164.0/actions-runner-win-x64-2.164.0.zip","filename":"actions-runner-win-x64-2.164.0.zip"},{"os":"linux","architecture":"arm64","download_url":"https://github.com/actions/runner/releases/download/v2.164.0/actions-runner-linux-arm64-2.164.0.tar.gz","filename":"actions-runner-linux-arm64-2.164.0.tar.gz"}]`) 335 }) 336 337 ctx := context.Background() 338 downloads, _, err := client.Actions.ListOrganizationRunnerApplicationDownloads(ctx, "o") 339 if err != nil { 340 t.Errorf("Actions.ListRunnerApplicationDownloads returned error: %v", err) 341 } 342 343 want := []*RunnerApplicationDownload{ 344 {OS: String("osx"), Architecture: String("x64"), DownloadURL: String("https://github.com/actions/runner/releases/download/v2.164.0/actions-runner-osx-x64-2.164.0.tar.gz"), Filename: String("actions-runner-osx-x64-2.164.0.tar.gz")}, 345 {OS: String("linux"), Architecture: String("x64"), DownloadURL: String("https://github.com/actions/runner/releases/download/v2.164.0/actions-runner-linux-x64-2.164.0.tar.gz"), Filename: String("actions-runner-linux-x64-2.164.0.tar.gz")}, 346 {OS: String("linux"), Architecture: String("arm"), DownloadURL: String("https://github.com/actions/runner/releases/download/v2.164.0/actions-runner-linux-arm-2.164.0.tar.gz"), Filename: String("actions-runner-linux-arm-2.164.0.tar.gz")}, 347 {OS: String("win"), Architecture: String("x64"), DownloadURL: String("https://github.com/actions/runner/releases/download/v2.164.0/actions-runner-win-x64-2.164.0.zip"), Filename: String("actions-runner-win-x64-2.164.0.zip")}, 348 {OS: String("linux"), Architecture: String("arm64"), DownloadURL: String("https://github.com/actions/runner/releases/download/v2.164.0/actions-runner-linux-arm64-2.164.0.tar.gz"), Filename: String("actions-runner-linux-arm64-2.164.0.tar.gz")}, 349 } 350 if !cmp.Equal(downloads, want) { 351 t.Errorf("Actions.ListOrganizationRunnerApplicationDownloads returned %+v, want %+v", downloads, want) 352 } 353 354 const methodName = "ListOrganizationRunnerApplicationDownloads" 355 testBadOptions(t, methodName, func() (err error) { 356 _, _, err = client.Actions.ListOrganizationRunnerApplicationDownloads(ctx, "\n") 357 return err 358 }) 359 360 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 361 got, resp, err := client.Actions.ListOrganizationRunnerApplicationDownloads(ctx, "o") 362 if got != nil { 363 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 364 } 365 return resp, err 366 }) 367 } 368 369 func TestActionsService_CreateOrganizationRegistrationToken(t *testing.T) { 370 client, mux, _, teardown := setup() 371 defer teardown() 372 373 mux.HandleFunc("/orgs/o/actions/runners/registration-token", func(w http.ResponseWriter, r *http.Request) { 374 testMethod(t, r, "POST") 375 fmt.Fprint(w, `{"token":"LLBF3JGZDX3P5PMEXLND6TS6FCWO6","expires_at":"2020-01-22T12:13:35.123Z"}`) 376 }) 377 378 ctx := context.Background() 379 token, _, err := client.Actions.CreateOrganizationRegistrationToken(ctx, "o") 380 if err != nil { 381 t.Errorf("Actions.CreateRegistrationToken returned error: %v", err) 382 } 383 384 want := &RegistrationToken{Token: String("LLBF3JGZDX3P5PMEXLND6TS6FCWO6"), 385 ExpiresAt: &Timestamp{time.Date(2020, time.January, 22, 12, 13, 35, 386 123000000, time.UTC)}} 387 if !cmp.Equal(token, want) { 388 t.Errorf("Actions.CreateRegistrationToken returned %+v, want %+v", token, want) 389 } 390 391 const methodName = "CreateOrganizationRegistrationToken" 392 testBadOptions(t, methodName, func() (err error) { 393 _, _, err = client.Actions.CreateOrganizationRegistrationToken(ctx, "\n") 394 return err 395 }) 396 397 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 398 got, resp, err := client.Actions.CreateOrganizationRegistrationToken(ctx, "o") 399 if got != nil { 400 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 401 } 402 return resp, err 403 }) 404 } 405 406 func TestActionsService_ListOrganizationRunners(t *testing.T) { 407 client, mux, _, teardown := setup() 408 defer teardown() 409 410 mux.HandleFunc("/orgs/o/actions/runners", func(w http.ResponseWriter, r *http.Request) { 411 testMethod(t, r, "GET") 412 testFormValues(t, r, values{"per_page": "2", "page": "2"}) 413 fmt.Fprint(w, `{"total_count":2,"runners":[{"id":23,"name":"MBP","os":"macos","status":"online"},{"id":24,"name":"iMac","os":"macos","status":"offline"}]}`) 414 }) 415 416 opts := &ListOptions{Page: 2, PerPage: 2} 417 ctx := context.Background() 418 runners, _, err := client.Actions.ListOrganizationRunners(ctx, "o", opts) 419 if err != nil { 420 t.Errorf("Actions.ListRunners returned error: %v", err) 421 } 422 423 want := &Runners{ 424 TotalCount: 2, 425 Runners: []*Runner{ 426 {ID: Int64(23), Name: String("MBP"), OS: String("macos"), Status: String("online")}, 427 {ID: Int64(24), Name: String("iMac"), OS: String("macos"), Status: String("offline")}, 428 }, 429 } 430 if !cmp.Equal(runners, want) { 431 t.Errorf("Actions.ListRunners returned %+v, want %+v", runners, want) 432 } 433 434 const methodName = "ListOrganizationRunners" 435 testBadOptions(t, methodName, func() (err error) { 436 _, _, err = client.Actions.ListOrganizationRunners(ctx, "\n", opts) 437 return err 438 }) 439 440 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 441 got, resp, err := client.Actions.ListOrganizationRunners(ctx, "o", opts) 442 if got != nil { 443 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 444 } 445 return resp, err 446 }) 447 } 448 449 func TestActionsService_ListEnabledReposInOrg(t *testing.T) { 450 client, mux, _, teardown := setup() 451 defer teardown() 452 453 mux.HandleFunc("/orgs/o/actions/permissions/repositories", func(w http.ResponseWriter, r *http.Request) { 454 testMethod(t, r, "GET") 455 testFormValues(t, r, values{ 456 "page": "1", 457 }) 458 fmt.Fprint(w, `{"total_count":2,"repositories":[{"id":2}, {"id": 3}]}`) 459 }) 460 461 ctx := context.Background() 462 opt := &ListOptions{ 463 Page: 1, 464 } 465 got, _, err := client.Actions.ListEnabledReposInOrg(ctx, "o", opt) 466 if err != nil { 467 t.Errorf("Actions.ListEnabledReposInOrg returned error: %v", err) 468 } 469 470 want := &ActionsEnabledOnOrgRepos{TotalCount: int(2), Repositories: []*Repository{ 471 {ID: Int64(2)}, 472 {ID: Int64(3)}, 473 }} 474 if !cmp.Equal(got, want) { 475 t.Errorf("Actions.ListEnabledReposInOrg returned %+v, want %+v", got, want) 476 } 477 478 const methodName = "ListEnabledReposInOrg" 479 testBadOptions(t, methodName, func() (err error) { 480 _, _, err = client.Actions.ListEnabledReposInOrg(ctx, "\n", opt) 481 return err 482 }) 483 484 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 485 got, resp, err := client.Actions.ListEnabledReposInOrg(ctx, "o", opt) 486 if got != nil { 487 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 488 } 489 return resp, err 490 }) 491 } 492 493 func TestActionsService_SetEnabledReposInOrg(t *testing.T) { 494 client, mux, _, teardown := setup() 495 defer teardown() 496 497 mux.HandleFunc("/orgs/o/actions/permissions/repositories", func(w http.ResponseWriter, r *http.Request) { 498 testMethod(t, r, "PUT") 499 testHeader(t, r, "Content-Type", "application/json") 500 testBody(t, r, `{"selected_repository_ids":[123,1234]}`+"\n") 501 w.WriteHeader(http.StatusNoContent) 502 }) 503 504 ctx := context.Background() 505 _, err := client.Actions.SetEnabledReposInOrg(ctx, "o", []int64{123, 1234}) 506 if err != nil { 507 t.Errorf("Actions.SetEnabledReposInOrg returned error: %v", err) 508 } 509 510 const methodName = "SetEnabledReposInOrg" 511 512 testBadOptions(t, methodName, func() (err error) { 513 _, err = client.Actions.SetEnabledReposInOrg(ctx, "\n", []int64{123, 1234}) 514 return err 515 }) 516 517 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 518 return client.Actions.SetEnabledReposInOrg(ctx, "o", []int64{123, 1234}) 519 }) 520 } 521 522 func TestActionsService_AddEnabledReposInOrg(t *testing.T) { 523 client, mux, _, teardown := setup() 524 defer teardown() 525 526 mux.HandleFunc("/orgs/o/actions/permissions/repositories/123", func(w http.ResponseWriter, r *http.Request) { 527 testMethod(t, r, "PUT") 528 w.WriteHeader(http.StatusNoContent) 529 }) 530 531 ctx := context.Background() 532 _, err := client.Actions.AddEnabledReposInOrg(ctx, "o", 123) 533 if err != nil { 534 t.Errorf("Actions.AddEnabledReposInOrg returned error: %v", err) 535 } 536 537 const methodName = "AddEnabledReposInOrg" 538 539 testBadOptions(t, methodName, func() (err error) { 540 _, err = client.Actions.AddEnabledReposInOrg(ctx, "\n", 123) 541 return err 542 }) 543 544 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 545 return client.Actions.AddEnabledReposInOrg(ctx, "o", 123) 546 }) 547 } 548 549 func TestActionsService_RemoveEnabledRepoInOrg(t *testing.T) { 550 client, mux, _, teardown := setup() 551 defer teardown() 552 553 mux.HandleFunc("/orgs/o/actions/permissions/repositories/123", func(w http.ResponseWriter, r *http.Request) { 554 testMethod(t, r, "DELETE") 555 w.WriteHeader(http.StatusNoContent) 556 }) 557 558 ctx := context.Background() 559 _, err := client.Actions.RemoveEnabledRepoInOrg(ctx, "o", 123) 560 if err != nil { 561 t.Errorf("Actions.RemoveEnabledRepoInOrg returned error: %v", err) 562 } 563 564 const methodName = "RemoveEnabledRepoInOrg" 565 566 testBadOptions(t, methodName, func() (err error) { 567 _, err = client.Actions.RemoveEnabledRepoInOrg(ctx, "\n", 123) 568 return err 569 }) 570 571 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 572 return client.Actions.RemoveEnabledRepoInOrg(ctx, "o", 123) 573 }) 574 } 575 576 func TestActionsService_GetOrganizationRunner(t *testing.T) { 577 client, mux, _, teardown := setup() 578 defer teardown() 579 580 mux.HandleFunc("/orgs/o/actions/runners/23", func(w http.ResponseWriter, r *http.Request) { 581 testMethod(t, r, "GET") 582 fmt.Fprint(w, `{"id":23,"name":"MBP","os":"macos","status":"online"}`) 583 }) 584 585 ctx := context.Background() 586 runner, _, err := client.Actions.GetOrganizationRunner(ctx, "o", 23) 587 if err != nil { 588 t.Errorf("Actions.GetRunner returned error: %v", err) 589 } 590 591 want := &Runner{ 592 ID: Int64(23), 593 Name: String("MBP"), 594 OS: String("macos"), 595 Status: String("online"), 596 } 597 if !cmp.Equal(runner, want) { 598 t.Errorf("Actions.GetRunner returned %+v, want %+v", runner, want) 599 } 600 601 const methodName = "GetOrganizationRunner" 602 testBadOptions(t, methodName, func() (err error) { 603 _, _, err = client.Actions.GetOrganizationRunner(ctx, "\n", 23) 604 return err 605 }) 606 607 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 608 got, resp, err := client.Actions.GetOrganizationRunner(ctx, "o", 23) 609 if got != nil { 610 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 611 } 612 return resp, err 613 }) 614 } 615 616 func TestActionsService_CreateOrganizationRemoveToken(t *testing.T) { 617 client, mux, _, teardown := setup() 618 defer teardown() 619 620 mux.HandleFunc("/orgs/o/actions/runners/remove-token", func(w http.ResponseWriter, r *http.Request) { 621 testMethod(t, r, "POST") 622 fmt.Fprint(w, `{"token":"AABF3JGZDX3P5PMEXLND6TS6FCWO6","expires_at":"2020-01-29T12:13:35.123Z"}`) 623 }) 624 625 ctx := context.Background() 626 token, _, err := client.Actions.CreateOrganizationRemoveToken(ctx, "o") 627 if err != nil { 628 t.Errorf("Actions.CreateRemoveToken returned error: %v", err) 629 } 630 631 want := &RemoveToken{Token: String("AABF3JGZDX3P5PMEXLND6TS6FCWO6"), ExpiresAt: &Timestamp{time.Date(2020, time.January, 29, 12, 13, 35, 123000000, time.UTC)}} 632 if !cmp.Equal(token, want) { 633 t.Errorf("Actions.CreateRemoveToken returned %+v, want %+v", token, want) 634 } 635 636 const methodName = "CreateOrganizationRemoveToken" 637 testBadOptions(t, methodName, func() (err error) { 638 _, _, err = client.Actions.CreateOrganizationRemoveToken(ctx, "\n") 639 return err 640 }) 641 642 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 643 got, resp, err := client.Actions.CreateOrganizationRemoveToken(ctx, "o") 644 if got != nil { 645 t.Errorf("testNewRequestAndDoFailure %v = %#v, want nil", methodName, got) 646 } 647 return resp, err 648 }) 649 } 650 651 func TestActionsService_RemoveOrganizationRunner(t *testing.T) { 652 client, mux, _, teardown := setup() 653 defer teardown() 654 655 mux.HandleFunc("/orgs/o/actions/runners/21", func(w http.ResponseWriter, r *http.Request) { 656 testMethod(t, r, "DELETE") 657 }) 658 659 ctx := context.Background() 660 _, err := client.Actions.RemoveOrganizationRunner(ctx, "o", 21) 661 if err != nil { 662 t.Errorf("Actions.RemoveOganizationRunner returned error: %v", err) 663 } 664 665 const methodName = "RemoveOrganizationRunner" 666 testBadOptions(t, methodName, func() (err error) { 667 _, err = client.Actions.RemoveOrganizationRunner(ctx, "\n", 21) 668 return err 669 }) 670 671 testNewRequestAndDoFailure(t, methodName, client, func() (*Response, error) { 672 return client.Actions.RemoveOrganizationRunner(ctx, "o", 21) 673 }) 674 } 675 676 func TestRunnerApplicationDownload_Marshal(t *testing.T) { 677 testJSONMarshal(t, &RunnerApplicationDownload{}, "{}") 678 679 u := &RunnerApplicationDownload{ 680 OS: String("o"), 681 Architecture: String("a"), 682 DownloadURL: String("d"), 683 Filename: String("f"), 684 TempDownloadToken: String("t"), 685 SHA256Checksum: String("s"), 686 } 687 688 want := `{ 689 "os": "o", 690 "architecture": "a", 691 "download_url": "d", 692 "filename": "f", 693 "temp_download_token": "t", 694 "sha256_checksum": "s" 695 }` 696 697 testJSONMarshal(t, u, want) 698 } 699 700 func TestActionsEnabledOnOrgRepos_Marshal(t *testing.T) { 701 testJSONMarshal(t, &ActionsEnabledOnOrgRepos{}, "{}") 702 703 u := &ActionsEnabledOnOrgRepos{ 704 TotalCount: 1, 705 Repositories: []*Repository{ 706 { 707 ID: Int64(1), 708 URL: String("u"), 709 Name: String("n"), 710 }, 711 }, 712 } 713 714 want := `{ 715 "total_count": 1, 716 "repositories": [ 717 { 718 "id": 1, 719 "url": "u", 720 "name": "n" 721 } 722 ] 723 }` 724 725 testJSONMarshal(t, u, want) 726 } 727 728 func TestRegistrationToken_Marshal(t *testing.T) { 729 testJSONMarshal(t, &RegistrationToken{}, "{}") 730 731 u := &RegistrationToken{ 732 Token: String("t"), 733 ExpiresAt: &Timestamp{referenceTime}, 734 } 735 736 want := `{ 737 "token": "t", 738 "expires_at": ` + referenceTimeStr + ` 739 }` 740 741 testJSONMarshal(t, u, want) 742 } 743 744 func TestRunnerLabels_Marshal(t *testing.T) { 745 testJSONMarshal(t, &RunnerLabels{}, "{}") 746 747 u := &RunnerLabels{ 748 ID: Int64(1), 749 Name: String("n"), 750 Type: String("t"), 751 } 752 753 want := `{ 754 "id": 1, 755 "name": "n", 756 "type": "t" 757 }` 758 759 testJSONMarshal(t, u, want) 760 } 761 762 func TestRunner_Marshal(t *testing.T) { 763 testJSONMarshal(t, &Runner{}, "{}") 764 765 u := &Runner{ 766 ID: Int64(1), 767 Name: String("n"), 768 OS: String("o"), 769 Status: String("s"), 770 Busy: Bool(false), 771 Labels: []*RunnerLabels{ 772 { 773 ID: Int64(1), 774 Name: String("n"), 775 Type: String("t"), 776 }, 777 }, 778 } 779 780 want := `{ 781 "id": 1, 782 "name": "n", 783 "os": "o", 784 "status": "s", 785 "busy": false, 786 "labels": [ 787 { 788 "id": 1, 789 "name": "n", 790 "type": "t" 791 } 792 ] 793 }` 794 795 testJSONMarshal(t, u, want) 796 } 797 798 func TestRunners_Marshal(t *testing.T) { 799 testJSONMarshal(t, &Runners{}, "{}") 800 801 u := &Runners{ 802 TotalCount: 1, 803 Runners: []*Runner{ 804 { 805 ID: Int64(1), 806 Name: String("n"), 807 OS: String("o"), 808 Status: String("s"), 809 Busy: Bool(false), 810 Labels: []*RunnerLabels{ 811 { 812 ID: Int64(1), 813 Name: String("n"), 814 Type: String("t"), 815 }, 816 }, 817 }, 818 }, 819 } 820 821 want := `{ 822 "total_count": 1, 823 "runners": [ 824 { 825 "id": 1, 826 "name": "n", 827 "os": "o", 828 "status": "s", 829 "busy": false, 830 "labels": [ 831 { 832 "id": 1, 833 "name": "n", 834 "type": "t" 835 } 836 ] 837 } 838 ] 839 }` 840 841 testJSONMarshal(t, u, want) 842 } 843 844 func TestRemoveToken_Marshal(t *testing.T) { 845 testJSONMarshal(t, &RemoveToken{}, "{}") 846 847 u := &RemoveToken{ 848 Token: String("t"), 849 ExpiresAt: &Timestamp{referenceTime}, 850 } 851 852 want := `{ 853 "token": "t", 854 "expires_at": ` + referenceTimeStr + ` 855 }` 856 857 testJSONMarshal(t, u, want) 858 }