Skip to content

Commit 33fddb3

Browse files
authored
Merge pull request #140 from IvanChalukov/issue-139
Fix pagination to fetch all release assets
2 parents 43904ac + ff5771c commit 33fddb3

2 files changed

Lines changed: 53 additions & 6 deletions

File tree

github.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -227,12 +227,6 @@ func (g *GitHubClient) ListReleaseAssets(release github.RepositoryRelease) ([]*g
227227
break
228228
}
229229
opt.Page = res.NextPage
230-
231-
err = res.Body.Close()
232-
if err != nil {
233-
return nil, err
234-
}
235-
break
236230
}
237231

238232
return allAssets, nil

github_test.go

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,59 @@ var _ = Describe("GitHub Client", func() {
359359
})
360360
})
361361

362+
Describe("ListReleasesAssets without access token", func() {
363+
BeforeEach(func() {
364+
source = Source{
365+
Owner: "concourse",
366+
Repository: "concourse",
367+
}
368+
})
369+
Context("When list of assets return less than 100 items", func() {
370+
BeforeEach(func() {
371+
var result []*github.ReleaseAsset
372+
for i := 1; i <= 50; i++ {
373+
result = append(result, &github.ReleaseAsset{ID: github.Int64(int64(i))})
374+
}
375+
server.AppendHandlers(
376+
ghttp.CombineHandlers(
377+
ghttp.VerifyRequest("GET", "/repos/concourse/concourse/releases/1/assets", "per_page=100"),
378+
ghttp.RespondWithJSONEncoded(200, result),
379+
),
380+
)
381+
})
382+
It("lists all release assets", func() {
383+
releasesAssets, err := client.ListReleaseAssets(github.RepositoryRelease{ID: github.Int64(1)})
384+
Ω(err).ShouldNot(HaveOccurred())
385+
Expect(releasesAssets).To(HaveLen(50))
386+
Expect(server.ReceivedRequests()).To(HaveLen(1))
387+
})
388+
})
389+
Context("When list of assets return more then 100 items", func() {
390+
Context("List graphql releases", func() {
391+
BeforeEach(func() {
392+
var result []*github.ReleaseAsset
393+
for i := 1; i <= 102; i++ {
394+
result = append(result, &github.ReleaseAsset{ID: github.Int64(int64(i))})
395+
}
396+
server.AppendHandlers(
397+
ghttp.CombineHandlers(ghttp.VerifyRequest("GET", "/repos/concourse/concourse/releases/1/assets", "per_page=100"),
398+
ghttp.RespondWithJSONEncoded(200, result[:100], http.Header{"Link": []string{`</releases/1/assets?page=2>; rel="next"`}}),
399+
),
400+
ghttp.CombineHandlers(ghttp.VerifyRequest("GET", "/repos/concourse/concourse/releases/1/assets", "per_page=100&page=2"),
401+
ghttp.RespondWithJSONEncoded(200, result[100:])),
402+
)
403+
})
404+
It("list release assets", func() {
405+
releasesAssets, err := client.ListReleaseAssets(github.RepositoryRelease{ID: github.Int64(1)})
406+
Ω(err).ShouldNot(HaveOccurred())
407+
Expect(releasesAssets).To(HaveLen(102))
408+
Expect(server.ReceivedRequests()).To(HaveLen(2))
409+
})
410+
411+
})
412+
})
413+
})
414+
362415
Describe("GetRelease", func() {
363416
BeforeEach(func() {
364417
source = Source{

0 commit comments

Comments
 (0)