@@ -41,21 +41,21 @@ func Test_gitHubRepository_GetVersions(t *testing.T) {
41
41
client , mux , teardown := test .NewFakeGitHub ()
42
42
defer teardown ()
43
43
44
- // setup an handler for returning 5 fake releases
44
+ // Setup an handler for returning 5 fake releases.
45
45
mux .HandleFunc ("/repos/o/r1/releases" , func (w http.ResponseWriter , r * http.Request ) {
46
46
testMethod (t , r , "GET" )
47
47
fmt .Fprint (w , `[` )
48
48
fmt .Fprint (w , `{"id":1, "tag_name": "v0.4.0"},` )
49
49
fmt .Fprint (w , `{"id":2, "tag_name": "v0.4.1"},` )
50
50
fmt .Fprint (w , `{"id":3, "tag_name": "v0.4.2"},` )
51
- fmt .Fprint (w , `{"id":4, "tag_name": "v0.4.3-alpha"}` ) // prerelease
51
+ fmt .Fprint (w , `{"id":4, "tag_name": "v0.4.3-alpha"}` ) // Pre-release
52
52
fmt .Fprint (w , `]` )
53
53
})
54
54
55
55
clientGoproxy , muxGoproxy , teardownGoproxy := newFakeGoproxy ()
56
56
defer teardownGoproxy ()
57
57
58
- // setup an handler for returning 4 fake releases
58
+ // Setup a handler for returning 4 fake releases.
59
59
muxGoproxy .HandleFunc ("/github.com/o/r2/@v/list" , func (w http.ResponseWriter , r * http.Request ) {
60
60
testMethod (t , r , "GET" )
61
61
fmt .Fprint (w , "v0.5.0\n " )
@@ -64,7 +64,7 @@ func Test_gitHubRepository_GetVersions(t *testing.T) {
64
64
fmt .Fprint (w , "v0.3.1\n " )
65
65
})
66
66
67
- // setup an handler for returning 3 different major fake releases
67
+ // Setup a handler for returning 3 different major fake releases.
68
68
muxGoproxy .HandleFunc ("/github.com/o/r3/@v/list" , func (w http.ResponseWriter , r * http.Request ) {
69
69
testMethod (t , r , "GET" )
70
70
fmt .Fprint (w , "v1.0.0\n " )
@@ -265,13 +265,13 @@ func Test_githubRepository_getFile(t *testing.T) {
265
265
266
266
providerConfig := config .NewProvider ("test" , "https://github.com/o/r/releases/v0.4.1/file.yaml" , clusterctlv1 .CoreProviderType )
267
267
268
- // test.NewFakeGitHub and handler for returning a fake release
268
+ // Setup a handler for returning a fake release.
269
269
mux .HandleFunc ("/repos/o/r/releases/tags/v0.4.1" , func (w http.ResponseWriter , r * http.Request ) {
270
270
testMethod (t , r , "GET" )
271
271
fmt .Fprint (w , `{"id":13, "tag_name": "v0.4.1", "assets": [{"id": 1, "name": "file.yaml"}] }` )
272
272
})
273
273
274
- // test.NewFakeGitHub an handler for returning a fake release asset
274
+ // Setup a handler for returning a fake release asset.
275
275
mux .HandleFunc ("/repos/o/r/releases/assets/1" , func (w http.ResponseWriter , r * http.Request ) {
276
276
testMethod (t , r , "GET" )
277
277
w .Header ().Set ("Content-Type" , "application/octet-stream" )
@@ -337,16 +337,36 @@ func Test_gitHubRepository_getVersions(t *testing.T) {
337
337
client , mux , teardown := test .NewFakeGitHub ()
338
338
defer teardown ()
339
339
340
- // setup an handler for returning 5 fake releases
340
+ // Setup a handler for returning fake releases in a paginated manner
341
+ // Each response contains a link to the next page (if available) which
342
+ // is parsed by the handler to navigate through all pages
341
343
mux .HandleFunc ("/repos/o/r1/releases" , func (w http.ResponseWriter , r * http.Request ) {
342
344
testMethod (t , r , "GET" )
343
- fmt .Fprint (w , `[` )
344
- fmt .Fprint (w , `{"id":1, "tag_name": "v0.4.0"},` )
345
- fmt .Fprint (w , `{"id":2, "tag_name": "v0.4.1"},` )
346
- fmt .Fprint (w , `{"id":3, "tag_name": "v0.4.2"},` )
347
- fmt .Fprint (w , `{"id":4, "tag_name": "v0.4.3-alpha"},` ) // prerelease
348
- fmt .Fprint (w , `{"id":5, "tag_name": "foo"}` ) // no semantic version tag
349
- fmt .Fprint (w , `]` )
345
+ page := r .URL .Query ().Get ("page" )
346
+ switch page {
347
+ case "" , "1" :
348
+ // Page 1
349
+ w .Header ().Set ("Link" , `<https://api.github.com/repositories/12345/releases?page=2>; rel="next"` ) // Link to page 2
350
+ fmt .Fprint (w , `[` )
351
+ fmt .Fprint (w , `{"id":1, "tag_name": "v0.4.0"},` )
352
+ fmt .Fprint (w , `{"id":2, "tag_name": "v0.4.1"}` )
353
+ fmt .Fprint (w , `]` )
354
+ case "2" :
355
+ // Page 2
356
+ w .Header ().Set ("Link" , `<https://api.github.com/repositories/12345/releases?page=3>; rel="next"` ) // Link to page 3
357
+ fmt .Fprint (w , `[` )
358
+ fmt .Fprint (w , `{"id":3, "tag_name": "v0.4.2"},` )
359
+ fmt .Fprint (w , `{"id":4, "tag_name": "v0.4.3-alpha"}` ) // Pre-release
360
+ fmt .Fprint (w , `]` )
361
+ case "3" :
362
+ // Page 3 (last page)
363
+ fmt .Fprint (w , `[` )
364
+ fmt .Fprint (w , `{"id":4, "tag_name": "v0.4.4-beta"},` ) // Pre-release
365
+ fmt .Fprint (w , `{"id":5, "tag_name": "foo"}` ) // No semantic version tag
366
+ fmt .Fprint (w , `]` )
367
+ default :
368
+ t .Fatalf ("unexpected page requested" )
369
+ }
350
370
})
351
371
352
372
configVariablesClient := test .NewFakeVariableClient ()
@@ -361,11 +381,11 @@ func Test_gitHubRepository_getVersions(t *testing.T) {
361
381
wantErr bool
362
382
}{
363
383
{
364
- name : "Get versions" ,
384
+ name : "Get versions with all releases " ,
365
385
field : field {
366
386
providerConfig : config .NewProvider ("test" , "https://github.com/o/r1/releases/v0.4.1/path" , clusterctlv1 .CoreProviderType ),
367
387
},
368
- want : []string {"v0.4.0" , "v0.4.1" , "v0.4.2" , "v0.4.3-alpha" },
388
+ want : []string {"v0.4.0" , "v0.4.1" , "v0.4.2" , "v0.4.3-alpha" , "v0.4.4-beta" },
369
389
wantErr : false ,
370
390
},
371
391
}
@@ -395,13 +415,13 @@ func Test_gitHubRepository_getLatestContractRelease(t *testing.T) {
395
415
client , mux , teardown := test .NewFakeGitHub ()
396
416
defer teardown ()
397
417
398
- // test.NewFakeGitHub and handler for returning a fake release
418
+ // Setup a handler for returning a fake release.
399
419
mux .HandleFunc ("/repos/o/r1/releases/tags/v0.5.0" , func (w http.ResponseWriter , r * http.Request ) {
400
420
testMethod (t , r , "GET" )
401
421
fmt .Fprint (w , `{"id":13, "tag_name": "v0.5.0", "assets": [{"id": 1, "name": "metadata.yaml"}] }` )
402
422
})
403
423
404
- // test.NewFakeGitHub an handler for returning a fake release metadata file
424
+ // Setup a handler for returning a fake release metadata file.
405
425
mux .HandleFunc ("/repos/o/r1/releases/assets/1" , func (w http.ResponseWriter , r * http.Request ) {
406
426
testMethod (t , r , "GET" )
407
427
w .Header ().Set ("Content-Type" , "application/octet-stream" )
@@ -412,7 +432,7 @@ func Test_gitHubRepository_getLatestContractRelease(t *testing.T) {
412
432
clientGoproxy , muxGoproxy , teardownGoproxy := newFakeGoproxy ()
413
433
defer teardownGoproxy ()
414
434
415
- // setup an handler for returning 4 fake releases
435
+ // Setup a handler for returning 4 fake releases.
416
436
muxGoproxy .HandleFunc ("/github.com/o/r1/@v/list" , func (w http.ResponseWriter , r * http.Request ) {
417
437
testMethod (t , r , "GET" )
418
438
fmt .Fprint (w , "v0.5.0\n " )
@@ -486,7 +506,7 @@ func Test_gitHubRepository_getLatestRelease(t *testing.T) {
486
506
clientGoproxy , muxGoproxy , teardownGoproxy := newFakeGoproxy ()
487
507
defer teardownGoproxy ()
488
508
489
- // setup an handler for returning 4 fake releases
509
+ // Setup a handler for returning 4 fake releases.
490
510
muxGoproxy .HandleFunc ("/github.com/o/r1/@v/list" , func (w http.ResponseWriter , r * http.Request ) {
491
511
testMethod (t , r , "GET" )
492
512
fmt .Fprint (w , "v0.4.1\n " )
@@ -495,13 +515,13 @@ func Test_gitHubRepository_getLatestRelease(t *testing.T) {
495
515
fmt .Fprint (w , "foo\n " ) // no semantic version tag
496
516
})
497
517
498
- // setup an handler for returning no releases
518
+ // Setup a handler for returning no releases.
499
519
muxGoproxy .HandleFunc ("/github.com/o/r2/@v/list" , func (w http.ResponseWriter , r * http.Request ) {
500
520
testMethod (t , r , "GET" )
501
521
// no releases
502
522
})
503
523
504
- // setup an handler for returning fake prereleases only
524
+ // Setup a handler for returning fake prereleases only.
505
525
muxGoproxy .HandleFunc ("/github.com/o/r3/@v/list" , func (w http.ResponseWriter , r * http.Request ) {
506
526
testMethod (t , r , "GET" )
507
527
fmt .Fprint (w , "v0.1.0-alpha.0\n " )
@@ -571,7 +591,7 @@ func Test_gitHubRepository_getLatestPatchRelease(t *testing.T) {
571
591
clientGoproxy , muxGoproxy , teardownGoproxy := newFakeGoproxy ()
572
592
defer teardownGoproxy ()
573
593
574
- // setup an handler for returning 4 fake releases
594
+ // Setup a handler for returning 4 fake releases.
575
595
muxGoproxy .HandleFunc ("/github.com/o/r1/@v/list" , func (w http.ResponseWriter , r * http.Request ) {
576
596
testMethod (t , r , "GET" )
577
597
fmt .Fprint (w , "v0.4.0\n " )
@@ -654,7 +674,7 @@ func Test_gitHubRepository_getReleaseByTag(t *testing.T) {
654
674
655
675
providerConfig := config .NewProvider ("test" , "https://github.com/o/r/releases/v0.4.1/path" , clusterctlv1 .CoreProviderType )
656
676
657
- // setup and handler for returning a fake release
677
+ // Setup a handler for returning a fake release.
658
678
mux .HandleFunc ("/repos/o/r/releases/tags/foo" , func (w http.ResponseWriter , r * http.Request ) {
659
679
testMethod (t , r , "GET" )
660
680
fmt .Fprint (w , `{"id":13, "tag_name": "v0.4.1"}` )
@@ -722,14 +742,14 @@ func Test_gitHubRepository_downloadFilesFromRelease(t *testing.T) {
722
742
providerConfig := config .NewProvider ("test" , "https://github.com/o/r/releases/v0.4.1/file.yaml" , clusterctlv1 .CoreProviderType ) // tree/main/path not relevant for the test
723
743
providerConfigWithRedirect := config .NewProvider ("test" , "https://github.com/o/r-with-redirect/releases/v0.4.1/file.yaml" , clusterctlv1 .CoreProviderType ) // tree/main/path not relevant for the test
724
744
725
- // test.NewFakeGitHub an handler for returning a fake release asset
745
+ // Setup a handler for returning a fake release asset.
726
746
mux .HandleFunc ("/repos/o/r/releases/assets/1" , func (w http.ResponseWriter , r * http.Request ) {
727
747
testMethod (t , r , "GET" )
728
748
w .Header ().Set ("Content-Type" , "application/octet-stream" )
729
749
w .Header ().Set ("Content-Disposition" , "attachment; filename=file.yaml" )
730
750
fmt .Fprint (w , "content" )
731
751
})
732
- // handler which redirects to a different location
752
+ // Setup a handler which redirects to a different location.
733
753
mux .HandleFunc ("/repos/o/r-with-redirect/releases/assets/1" , func (w http.ResponseWriter , r * http.Request ) {
734
754
testMethod (t , r , "GET" )
735
755
http .Redirect (w , r , "/api-v3/repos/o/r/releases/assets/1" , http .StatusFound )
0 commit comments