Skip to content

Commit 9c9f8a2

Browse files
committed
Update tests to use the Octokit RequestError class
1 parent 9a4705d commit 9c9f8a2

File tree

3 files changed

+29
-12
lines changed

3 files changed

+29
-12
lines changed

package-lock.json

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
"espree": "^9.6.1"
3131
},
3232
"devDependencies": {
33+
"@octokit/request-error": "^5.0.1",
3334
"@vercel/ncc": "^0.38.1",
3435
"eslint": "^8.57.0",
3536
"eslint-config-prettier": "^8.8.0",

src/api-client.test.js

+27-12
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,24 @@
11
const core = require('@actions/core')
22
const apiClient = require('./api-client')
3+
const { RequestError } = require('@octokit/request-error')
34

45
const mockGetPages = jest.fn()
56
const mockCreatePagesSite = jest.fn()
67

8+
const generateRequestError = statusCode => {
9+
const fakeRequest = { headers: {}, url: '/' }
10+
const fakeResponse = { status: statusCode }
11+
let message = 'Oops'
12+
if (statusCode === 404) {
13+
message = 'Not Found'
14+
}
15+
if (statusCode === 409) {
16+
message = 'Too Busy'
17+
}
18+
const error = new RequestError(message, statusCode, { request: fakeRequest, response: fakeResponse })
19+
return error
20+
}
21+
722
jest.mock('@actions/github', () => ({
823
context: {
924
repo: {
@@ -48,7 +63,7 @@ describe('apiClient', () => {
4863
})
4964

5065
it('handles a 409 response when the page already exists', async () => {
51-
mockCreatePagesSite.mockImplementationOnce(() => Promise.reject({ response: { status: 409 } }))
66+
mockCreatePagesSite.mockImplementationOnce(() => Promise.reject(generateRequestError(409)))
5267

5368
// Simply assert that no error is raised
5469
const result = await apiClient.enablePagesSite({
@@ -59,7 +74,7 @@ describe('apiClient', () => {
5974
})
6075

6176
it('re-raises errors on failure status codes', async () => {
62-
mockCreatePagesSite.mockImplementationOnce(() => Promise.reject({ response: { status: 404 } }))
77+
mockCreatePagesSite.mockImplementationOnce(() => Promise.reject(generateRequestError(404)))
6378

6479
let erred = false
6580
try {
@@ -86,7 +101,7 @@ describe('apiClient', () => {
86101
})
87102

88103
it('re-raises errors on failure status codes', async () => {
89-
mockGetPages.mockImplementationOnce(() => Promise.reject({ response: { status: 404 } }))
104+
mockGetPages.mockImplementationOnce(() => Promise.reject(generateRequestError(404)))
90105

91106
let erred = false
92107
try {
@@ -105,7 +120,7 @@ describe('apiClient', () => {
105120
it('does not make a request to create a page if it already exists', async () => {
106121
const PAGE_OBJECT = { html_url: 'https://actions.github.io/is-awesome/' }
107122
mockGetPages.mockImplementationOnce(() => Promise.resolve({ status: 200, data: PAGE_OBJECT }))
108-
mockCreatePagesSite.mockImplementationOnce(() => Promise.reject({ response: { status: 404 } }))
123+
mockCreatePagesSite.mockImplementationOnce(() => Promise.reject(generateRequestError(404)))
109124

110125
const result = await apiClient.findOrCreatePagesSite({
111126
githubToken: GITHUB_TOKEN
@@ -117,7 +132,7 @@ describe('apiClient', () => {
117132

118133
it('makes request to create a page by default if it does not exist', async () => {
119134
const PAGE_OBJECT = { html_url: 'https://actions.github.io/is-awesome/' }
120-
mockGetPages.mockImplementationOnce(() => Promise.reject({ response: { status: 404 } }))
135+
mockGetPages.mockImplementationOnce(() => Promise.reject(generateRequestError(404)))
121136
mockCreatePagesSite.mockImplementationOnce(() => Promise.resolve({ status: 201, data: PAGE_OBJECT }))
122137

123138
const result = await apiClient.findOrCreatePagesSite({
@@ -130,7 +145,7 @@ describe('apiClient', () => {
130145

131146
it('makes a request to create a page when explicitly enabled if it does not exist', async () => {
132147
const PAGE_OBJECT = { html_url: 'https://actions.github.io/is-awesome/' }
133-
mockGetPages.mockImplementationOnce(() => Promise.reject({ response: { status: 404 } }))
148+
mockGetPages.mockImplementationOnce(() => Promise.reject(generateRequestError(404)))
134149
mockCreatePagesSite.mockImplementationOnce(() => Promise.resolve({ status: 201, data: PAGE_OBJECT }))
135150

136151
const result = await apiClient.findOrCreatePagesSite({
@@ -143,8 +158,8 @@ describe('apiClient', () => {
143158
})
144159

145160
it('does not make a request to create a page when explicitly disabled even if it does not exist', async () => {
146-
mockGetPages.mockImplementationOnce(() => Promise.reject({ response: { status: 404 } }))
147-
mockCreatePagesSite.mockImplementationOnce(() => Promise.reject({ response: { status: 500 } })) // just so they both aren't 404
161+
mockGetPages.mockImplementationOnce(() => Promise.reject(generateRequestError(404)))
162+
mockCreatePagesSite.mockImplementationOnce(() => Promise.reject(generateRequestError(500))) // just so they both aren't 404
148163

149164
let erred = false
150165
try {
@@ -163,8 +178,8 @@ describe('apiClient', () => {
163178
})
164179

165180
it('does not make a second request to get page if create fails for reason other than existence', async () => {
166-
mockGetPages.mockImplementationOnce(() => Promise.reject({ response: { status: 404 } }))
167-
mockCreatePagesSite.mockImplementationOnce(() => Promise.reject({ response: { status: 500 } })) // just so they both aren't 404
181+
mockGetPages.mockImplementationOnce(() => Promise.reject(generateRequestError(404)))
182+
mockCreatePagesSite.mockImplementationOnce(() => Promise.reject(generateRequestError(500))) // just so they both aren't 404
168183

169184
let erred = false
170185
try {
@@ -184,9 +199,9 @@ describe('apiClient', () => {
184199
it('makes second request to get page if create fails because of existence', async () => {
185200
const PAGE_OBJECT = { html_url: 'https://actions.github.io/is-awesome/' }
186201
mockGetPages
187-
.mockImplementationOnce(() => Promise.reject({ response: { status: 404 } }))
202+
.mockImplementationOnce(() => Promise.reject(generateRequestError(404)))
188203
.mockImplementationOnce(() => Promise.resolve({ status: 200, data: PAGE_OBJECT }))
189-
mockCreatePagesSite.mockImplementationOnce(() => Promise.reject({ response: { status: 409 } }))
204+
mockCreatePagesSite.mockImplementationOnce(() => Promise.reject(generateRequestError(409)))
190205

191206
const result = await apiClient.findOrCreatePagesSite({
192207
githubToken: GITHUB_TOKEN

0 commit comments

Comments
 (0)