1
1
const core = require ( '@actions/core' )
2
2
const apiClient = require ( './api-client' )
3
+ const { RequestError } = require ( '@octokit/request-error' )
3
4
4
5
const mockGetPages = jest . fn ( )
5
6
const mockCreatePagesSite = jest . fn ( )
6
7
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
+
7
22
jest . mock ( '@actions/github' , ( ) => ( {
8
23
context : {
9
24
repo : {
@@ -48,7 +63,7 @@ describe('apiClient', () => {
48
63
} )
49
64
50
65
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 ) ) )
52
67
53
68
// Simply assert that no error is raised
54
69
const result = await apiClient . enablePagesSite ( {
@@ -59,7 +74,7 @@ describe('apiClient', () => {
59
74
} )
60
75
61
76
it ( 're-raises errors on failure status codes' , async ( ) => {
62
- mockCreatePagesSite . mockImplementationOnce ( ( ) => Promise . reject ( { response : { status : 404 } } ) )
77
+ mockCreatePagesSite . mockImplementationOnce ( ( ) => Promise . reject ( generateRequestError ( 404 ) ) )
63
78
64
79
let erred = false
65
80
try {
@@ -86,7 +101,7 @@ describe('apiClient', () => {
86
101
} )
87
102
88
103
it ( 're-raises errors on failure status codes' , async ( ) => {
89
- mockGetPages . mockImplementationOnce ( ( ) => Promise . reject ( { response : { status : 404 } } ) )
104
+ mockGetPages . mockImplementationOnce ( ( ) => Promise . reject ( generateRequestError ( 404 ) ) )
90
105
91
106
let erred = false
92
107
try {
@@ -105,7 +120,7 @@ describe('apiClient', () => {
105
120
it ( 'does not make a request to create a page if it already exists' , async ( ) => {
106
121
const PAGE_OBJECT = { html_url : 'https://actions.github.io/is-awesome/' }
107
122
mockGetPages . mockImplementationOnce ( ( ) => Promise . resolve ( { status : 200 , data : PAGE_OBJECT } ) )
108
- mockCreatePagesSite . mockImplementationOnce ( ( ) => Promise . reject ( { response : { status : 404 } } ) )
123
+ mockCreatePagesSite . mockImplementationOnce ( ( ) => Promise . reject ( generateRequestError ( 404 ) ) )
109
124
110
125
const result = await apiClient . findOrCreatePagesSite ( {
111
126
githubToken : GITHUB_TOKEN
@@ -117,7 +132,7 @@ describe('apiClient', () => {
117
132
118
133
it ( 'makes request to create a page by default if it does not exist' , async ( ) => {
119
134
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 ) ) )
121
136
mockCreatePagesSite . mockImplementationOnce ( ( ) => Promise . resolve ( { status : 201 , data : PAGE_OBJECT } ) )
122
137
123
138
const result = await apiClient . findOrCreatePagesSite ( {
@@ -130,7 +145,7 @@ describe('apiClient', () => {
130
145
131
146
it ( 'makes a request to create a page when explicitly enabled if it does not exist' , async ( ) => {
132
147
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 ) ) )
134
149
mockCreatePagesSite . mockImplementationOnce ( ( ) => Promise . resolve ( { status : 201 , data : PAGE_OBJECT } ) )
135
150
136
151
const result = await apiClient . findOrCreatePagesSite ( {
@@ -143,8 +158,8 @@ describe('apiClient', () => {
143
158
} )
144
159
145
160
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
148
163
149
164
let erred = false
150
165
try {
@@ -163,8 +178,8 @@ describe('apiClient', () => {
163
178
} )
164
179
165
180
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
168
183
169
184
let erred = false
170
185
try {
@@ -184,9 +199,9 @@ describe('apiClient', () => {
184
199
it ( 'makes second request to get page if create fails because of existence' , async ( ) => {
185
200
const PAGE_OBJECT = { html_url : 'https://actions.github.io/is-awesome/' }
186
201
mockGetPages
187
- . mockImplementationOnce ( ( ) => Promise . reject ( { response : { status : 404 } } ) )
202
+ . mockImplementationOnce ( ( ) => Promise . reject ( generateRequestError ( 404 ) ) )
188
203
. mockImplementationOnce ( ( ) => Promise . resolve ( { status : 200 , data : PAGE_OBJECT } ) )
189
- mockCreatePagesSite . mockImplementationOnce ( ( ) => Promise . reject ( { response : { status : 409 } } ) )
204
+ mockCreatePagesSite . mockImplementationOnce ( ( ) => Promise . reject ( generateRequestError ( 409 ) ) )
190
205
191
206
const result = await apiClient . findOrCreatePagesSite ( {
192
207
githubToken : GITHUB_TOKEN
0 commit comments