1
1
const core = require ( '@actions/core' )
2
- const axios = require ( 'axios' )
3
-
4
2
const apiClient = require ( './api-client' )
5
3
4
+ const mockGetPages = jest . fn ( )
5
+ const mockCreatePagesSite = jest . fn ( )
6
+
7
+ jest . mock ( '@actions/github' , ( ) => ( {
8
+ context : {
9
+ repo : {
10
+ owner : 'actions' ,
11
+ repo : 'is-awesome'
12
+ }
13
+ } ,
14
+ getOctokit : ( ) => ( {
15
+ rest : {
16
+ repos : {
17
+ getPages : mockGetPages ,
18
+ createPagesSite : mockCreatePagesSite
19
+ }
20
+ }
21
+ } )
22
+ } ) )
23
+
6
24
describe ( 'apiClient' , ( ) => {
7
- const GITHUB_REPOSITORY = 'actions/is-awesome'
8
25
const GITHUB_TOKEN = 'gha-token'
9
26
const PAGE_OBJECT = { html_url : 'https://actions.github.io/is-awesome/' }
10
27
11
28
beforeEach ( ( ) => {
12
29
jest . restoreAllMocks ( )
30
+ jest . clearAllMocks ( )
31
+ jest . resetAllMocks ( )
13
32
14
33
// Mock error/warning/info/debug
15
34
jest . spyOn ( core , 'error' ) . mockImplementation ( jest . fn ( ) )
@@ -18,59 +37,33 @@ describe('apiClient', () => {
18
37
jest . spyOn ( core , 'debug' ) . mockImplementation ( jest . fn ( ) )
19
38
} )
20
39
21
- describe ( 'getApiBaseUrl' , ( ) => {
22
- it ( 'returns GITHUB_API_URL environment variable when set' , async ( ) => {
23
- const expectedBaseUrl = 'https://api.ghe.com'
24
- process . env . GITHUB_API_URL = expectedBaseUrl
25
- const result = apiClient . getApiBaseUrl ( )
26
- delete process . env . GITHUB_API_URL
27
- expect ( result ) . toEqual ( expectedBaseUrl )
28
- } )
29
-
30
- it ( 'defaults to GitHub API if GITHUB_API_URL environment variable is empty' , async ( ) => {
31
- process . env . GITHUB_API_URL = ''
32
- const result = apiClient . getApiBaseUrl ( )
33
- delete process . env . GITHUB_API_URL
34
- expect ( result ) . toEqual ( 'https://api.github.com' )
35
- } )
36
-
37
- it ( 'defaults to GitHub API if GITHUB_API_URL environment variable is not set' , async ( ) => {
38
- delete process . env . GITHUB_API_URL
39
- const result = apiClient . getApiBaseUrl ( )
40
- expect ( result ) . toEqual ( 'https://api.github.com' )
41
- } )
42
- } )
43
-
44
40
describe ( 'enablePagesSite' , ( ) => {
45
41
it ( 'makes a request to create a page' , async ( ) => {
46
- jest . spyOn ( axios , 'post' ) . mockImplementationOnce ( ( ) => Promise . resolve ( { status : 201 , data : PAGE_OBJECT } ) )
42
+ mockCreatePagesSite . mockImplementationOnce ( ( ) => Promise . resolve ( { status : 201 , data : PAGE_OBJECT } ) )
47
43
48
44
const result = await apiClient . enablePagesSite ( {
49
- repositoryNwo : GITHUB_REPOSITORY ,
50
45
githubToken : GITHUB_TOKEN
51
46
} )
52
47
expect ( result ) . toEqual ( PAGE_OBJECT )
53
48
} )
54
49
55
50
it ( 'handles a 409 response when the page already exists' , async ( ) => {
56
- jest . spyOn ( axios , 'post' ) . mockImplementationOnce ( ( ) => Promise . reject ( { response : { status : 409 } } ) )
51
+ mockCreatePagesSite . mockImplementationOnce ( ( ) => Promise . reject ( { response : { status : 409 } } ) )
57
52
58
53
// Simply assert that no error is raised
59
54
const result = await apiClient . enablePagesSite ( {
60
- repositoryNwo : GITHUB_REPOSITORY ,
61
55
githubToken : GITHUB_TOKEN
62
56
} )
63
57
64
58
expect ( result ) . toBe ( null )
65
59
} )
66
60
67
61
it ( 're-raises errors on failure status codes' , async ( ) => {
68
- jest . spyOn ( axios , 'post' ) . mockImplementationOnce ( ( ) => Promise . reject ( { response : { status : 404 } } ) )
62
+ mockCreatePagesSite . mockImplementationOnce ( ( ) => Promise . reject ( { response : { status : 404 } } ) )
69
63
70
64
let erred = false
71
65
try {
72
66
await apiClient . enablePagesSite ( {
73
- repositoryNwo : GITHUB_REPOSITORY ,
74
67
githubToken : GITHUB_TOKEN
75
68
} )
76
69
} catch ( error ) {
@@ -84,22 +77,20 @@ describe('apiClient', () => {
84
77
describe ( 'getPagesSite' , ( ) => {
85
78
it ( 'makes a request to get a page' , async ( ) => {
86
79
const PAGE_OBJECT = { html_url : 'https://actions.github.io/is-awesome/' }
87
- jest . spyOn ( axios , 'get' ) . mockImplementationOnce ( ( ) => Promise . resolve ( { status : 200 , data : PAGE_OBJECT } ) )
80
+ mockGetPages . mockImplementationOnce ( ( ) => Promise . resolve ( { status : 200 , data : PAGE_OBJECT } ) )
88
81
89
82
const result = await apiClient . getPagesSite ( {
90
- repositoryNwo : GITHUB_REPOSITORY ,
91
83
githubToken : GITHUB_TOKEN
92
84
} )
93
85
expect ( result ) . toEqual ( PAGE_OBJECT )
94
86
} )
95
87
96
88
it ( 're-raises errors on failure status codes' , async ( ) => {
97
- jest . spyOn ( axios , 'get' ) . mockImplementationOnce ( ( ) => Promise . reject ( { response : { status : 404 } } ) )
89
+ mockGetPages . mockImplementationOnce ( ( ) => Promise . reject ( { response : { status : 404 } } ) )
98
90
99
91
let erred = false
100
92
try {
101
93
await apiClient . getPagesSite ( {
102
- repositoryNwo : GITHUB_REPOSITORY ,
103
94
githubToken : GITHUB_TOKEN
104
95
} )
105
96
} catch ( error ) {
@@ -113,55 +104,51 @@ describe('apiClient', () => {
113
104
describe ( 'findOrCreatePagesSite' , ( ) => {
114
105
it ( 'does not make a request to create a page if it already exists' , async ( ) => {
115
106
const PAGE_OBJECT = { html_url : 'https://actions.github.io/is-awesome/' }
116
- jest . spyOn ( axios , 'get' ) . mockImplementationOnce ( ( ) => Promise . resolve ( { status : 200 , data : PAGE_OBJECT } ) )
117
- jest . spyOn ( axios , 'post' ) . mockImplementationOnce ( ( ) => Promise . reject ( { response : { status : 404 } } ) )
107
+ mockGetPages . mockImplementationOnce ( ( ) => Promise . resolve ( { status : 200 , data : PAGE_OBJECT } ) )
108
+ mockCreatePagesSite . mockImplementationOnce ( ( ) => Promise . reject ( { response : { status : 404 } } ) )
118
109
119
110
const result = await apiClient . findOrCreatePagesSite ( {
120
- repositoryNwo : GITHUB_REPOSITORY ,
121
111
githubToken : GITHUB_TOKEN
122
112
} )
123
113
expect ( result ) . toEqual ( PAGE_OBJECT )
124
- expect ( axios . get ) . toHaveBeenCalledTimes ( 1 )
125
- expect ( axios . post ) . toHaveBeenCalledTimes ( 0 )
114
+ expect ( mockGetPages ) . toHaveBeenCalledTimes ( 1 )
115
+ expect ( mockCreatePagesSite ) . toHaveBeenCalledTimes ( 0 )
126
116
} )
127
117
128
118
it ( 'makes request to create a page by default if it does not exist' , async ( ) => {
129
119
const PAGE_OBJECT = { html_url : 'https://actions.github.io/is-awesome/' }
130
- jest . spyOn ( axios , 'get' ) . mockImplementationOnce ( ( ) => Promise . reject ( { response : { status : 404 } } ) )
131
- jest . spyOn ( axios , 'post' ) . mockImplementationOnce ( ( ) => Promise . resolve ( { status : 201 , data : PAGE_OBJECT } ) )
120
+ mockGetPages . mockImplementationOnce ( ( ) => Promise . reject ( { response : { status : 404 } } ) )
121
+ mockCreatePagesSite . mockImplementationOnce ( ( ) => Promise . resolve ( { status : 201 , data : PAGE_OBJECT } ) )
132
122
133
123
const result = await apiClient . findOrCreatePagesSite ( {
134
- repositoryNwo : GITHUB_REPOSITORY ,
135
124
githubToken : GITHUB_TOKEN
136
125
} )
137
126
expect ( result ) . toEqual ( PAGE_OBJECT )
138
- expect ( axios . get ) . toHaveBeenCalledTimes ( 1 )
139
- expect ( axios . post ) . toHaveBeenCalledTimes ( 1 )
127
+ expect ( mockGetPages ) . toHaveBeenCalledTimes ( 1 )
128
+ expect ( mockCreatePagesSite ) . toHaveBeenCalledTimes ( 1 )
140
129
} )
141
130
142
131
it ( 'makes a request to create a page when explicitly enabled if it does not exist' , async ( ) => {
143
132
const PAGE_OBJECT = { html_url : 'https://actions.github.io/is-awesome/' }
144
- jest . spyOn ( axios , 'get' ) . mockImplementationOnce ( ( ) => Promise . reject ( { response : { status : 404 } } ) )
145
- jest . spyOn ( axios , 'post' ) . mockImplementationOnce ( ( ) => Promise . resolve ( { status : 201 , data : PAGE_OBJECT } ) )
133
+ mockGetPages . mockImplementationOnce ( ( ) => Promise . reject ( { response : { status : 404 } } ) )
134
+ mockCreatePagesSite . mockImplementationOnce ( ( ) => Promise . resolve ( { status : 201 , data : PAGE_OBJECT } ) )
146
135
147
136
const result = await apiClient . findOrCreatePagesSite ( {
148
- repositoryNwo : GITHUB_REPOSITORY ,
149
137
githubToken : GITHUB_TOKEN ,
150
138
enablement : true
151
139
} )
152
140
expect ( result ) . toEqual ( PAGE_OBJECT )
153
- expect ( axios . get ) . toHaveBeenCalledTimes ( 1 )
154
- expect ( axios . post ) . toHaveBeenCalledTimes ( 1 )
141
+ expect ( mockGetPages ) . toHaveBeenCalledTimes ( 1 )
142
+ expect ( mockCreatePagesSite ) . toHaveBeenCalledTimes ( 1 )
155
143
} )
156
144
157
145
it ( 'does not make a request to create a page when explicitly disabled even if it does not exist' , async ( ) => {
158
- jest . spyOn ( axios , 'get' ) . mockImplementationOnce ( ( ) => Promise . reject ( { response : { status : 404 } } ) )
159
- jest . spyOn ( axios , 'post' ) . mockImplementationOnce ( ( ) => Promise . reject ( { response : { status : 500 } } ) ) // just so they both aren't 404
146
+ mockGetPages . mockImplementationOnce ( ( ) => Promise . reject ( { response : { status : 404 } } ) )
147
+ mockCreatePagesSite . mockImplementationOnce ( ( ) => Promise . reject ( { response : { status : 500 } } ) ) // just so they both aren't 404
160
148
161
149
let erred = false
162
150
try {
163
151
await apiClient . findOrCreatePagesSite ( {
164
- repositoryNwo : GITHUB_REPOSITORY ,
165
152
githubToken : GITHUB_TOKEN ,
166
153
enablement : false
167
154
} )
@@ -171,18 +158,17 @@ describe('apiClient', () => {
171
158
expect ( error . response . status ) . toEqual ( 404 )
172
159
}
173
160
expect ( erred ) . toBe ( true )
174
- expect ( axios . get ) . toHaveBeenCalledTimes ( 1 )
175
- expect ( axios . post ) . toHaveBeenCalledTimes ( 0 )
161
+ expect ( mockGetPages ) . toHaveBeenCalledTimes ( 1 )
162
+ expect ( mockCreatePagesSite ) . toHaveBeenCalledTimes ( 0 )
176
163
} )
177
164
178
165
it ( 'does not make a second request to get page if create fails for reason other than existence' , async ( ) => {
179
- jest . spyOn ( axios , 'get' ) . mockImplementationOnce ( ( ) => Promise . reject ( { response : { status : 404 } } ) )
180
- jest . spyOn ( axios , 'post' ) . mockImplementationOnce ( ( ) => Promise . reject ( { response : { status : 500 } } ) ) // just so they both aren't 404
166
+ mockGetPages . mockImplementationOnce ( ( ) => Promise . reject ( { response : { status : 404 } } ) )
167
+ mockCreatePagesSite . mockImplementationOnce ( ( ) => Promise . reject ( { response : { status : 500 } } ) ) // just so they both aren't 404
181
168
182
169
let erred = false
183
170
try {
184
171
await apiClient . findOrCreatePagesSite ( {
185
- repositoryNwo : GITHUB_REPOSITORY ,
186
172
githubToken : GITHUB_TOKEN
187
173
} )
188
174
} catch ( error ) {
@@ -191,25 +177,23 @@ describe('apiClient', () => {
191
177
expect ( error . response . status ) . toEqual ( 500 )
192
178
}
193
179
expect ( erred ) . toBe ( true )
194
- expect ( axios . get ) . toHaveBeenCalledTimes ( 1 )
195
- expect ( axios . post ) . toHaveBeenCalledTimes ( 1 )
180
+ expect ( mockGetPages ) . toHaveBeenCalledTimes ( 1 )
181
+ expect ( mockCreatePagesSite ) . toHaveBeenCalledTimes ( 1 )
196
182
} )
197
183
198
184
it ( 'makes second request to get page if create fails because of existence' , async ( ) => {
199
185
const PAGE_OBJECT = { html_url : 'https://actions.github.io/is-awesome/' }
200
- jest
201
- . spyOn ( axios , 'get' )
186
+ mockGetPages
202
187
. mockImplementationOnce ( ( ) => Promise . reject ( { response : { status : 404 } } ) )
203
188
. mockImplementationOnce ( ( ) => Promise . resolve ( { status : 200 , data : PAGE_OBJECT } ) )
204
- jest . spyOn ( axios , 'post' ) . mockImplementationOnce ( ( ) => Promise . reject ( { response : { status : 409 } } ) )
189
+ mockCreatePagesSite . mockImplementationOnce ( ( ) => Promise . reject ( { response : { status : 409 } } ) )
205
190
206
191
const result = await apiClient . findOrCreatePagesSite ( {
207
- repositoryNwo : GITHUB_REPOSITORY ,
208
192
githubToken : GITHUB_TOKEN
209
193
} )
210
194
expect ( result ) . toEqual ( PAGE_OBJECT )
211
- expect ( axios . get ) . toHaveBeenCalledTimes ( 2 )
212
- expect ( axios . post ) . toHaveBeenCalledTimes ( 1 )
195
+ expect ( mockGetPages ) . toHaveBeenCalledTimes ( 2 )
196
+ expect ( mockCreatePagesSite ) . toHaveBeenCalledTimes ( 1 )
213
197
} )
214
198
} )
215
199
} )
0 commit comments