test.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. const test = require('tap').test
  2. const nock = require('nock')
  3. const Octokit = require('@octokit/rest')
  4. .plugin(require('.'))
  5. test('@octokit/pagination-methods', (t) => {
  6. nock('https://api.github.com', {
  7. reqheaders: {
  8. authorization: 'token secrettoken123'
  9. }
  10. })
  11. .get('/organizations')
  12. .query({ page: 3, per_page: 1 })
  13. .reply(200, [{}], {
  14. 'Link': '<https://api.github.com/organizations?page=4&per_page=1>; rel="next", <https://api.github.com/organizations?page=1&per_page=1>; rel="first", <https://api.github.com/organizations?page=2&per_page=1>; rel="prev"',
  15. 'X-GitHub-Media-Type': 'octokit.v3; format=json'
  16. })
  17. .get('/organizations')
  18. .query({ page: 1, per_page: 1 })
  19. .reply(200, [{}])
  20. .get('/organizations')
  21. .query({ page: 2, per_page: 1 })
  22. .reply(200, [{}])
  23. .get('/organizations')
  24. .query({ page: 4, per_page: 1 })
  25. .reply(404, {})
  26. const octokit = new Octokit()
  27. octokit.authenticate({
  28. type: 'token',
  29. token: 'secrettoken123'
  30. })
  31. return octokit.orgs.getAll({
  32. page: 3,
  33. per_page: 1
  34. })
  35. .then((response) => {
  36. t.ok(octokit.hasNextPage(response))
  37. t.ok(octokit.hasPreviousPage(response))
  38. t.ok(octokit.hasFirstPage(response))
  39. t.notOk(octokit.hasLastPage(response))
  40. const noop = () => {}
  41. return Promise.all([
  42. octokit.getFirstPage(response)
  43. .then(response => {
  44. t.doesNotThrow(() => {
  45. octokit.hasPreviousPage(response)
  46. })
  47. t.notOk(octokit.hasPreviousPage(response))
  48. }),
  49. octokit.getPreviousPage(response, { foo: 'bar', accept: 'application/vnd.octokit.v3+json' }),
  50. octokit.getNextPage(response).catch(noop),
  51. octokit.getLastPage(response, { foo: 'bar' })
  52. .catch(error => {
  53. t.equals(error.code, 404)
  54. }),
  55. // test error with promise
  56. octokit.getLastPage(response).catch(noop)
  57. ])
  58. })
  59. .catch(t.error)
  60. })
  61. test('carries accept header correctly', () => {
  62. nock('https://api.github.com', {
  63. reqheaders: {
  64. accept: 'application/vnd.github.hellcat-preview+json'
  65. }
  66. })
  67. .get('/user/teams')
  68. .query({ per_page: 1 })
  69. .reply(200, [{}], {
  70. 'Link': '<https://api.github.com/user/teams?page=2&per_page=1>; rel="next"',
  71. 'X-GitHub-Media-Type': 'github; param=hellcat-preview; format=json'
  72. })
  73. .get('/user/teams')
  74. .query({ page: 2, per_page: 1 })
  75. .reply(200, [])
  76. const octokit = new Octokit()
  77. return octokit.users.getTeams({ per_page: 1 })
  78. .then(response => {
  79. return octokit.getNextPage(response)
  80. })
  81. })