11const core = require ( '@actions/core' )
2- const axios = require ( 'axios' )
3-
42const apiClient = require ( './api-client' )
53
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+
624describe ( 'apiClient' , ( ) => {
7- const GITHUB_REPOSITORY = 'actions/is-awesome'
825 const GITHUB_TOKEN = 'gha-token'
926 const PAGE_OBJECT = { html_url : 'https://actions.github.io/is-awesome/' }
1027
1128 beforeEach ( ( ) => {
1229 jest . restoreAllMocks ( )
30+ jest . clearAllMocks ( )
31+ jest . resetAllMocks ( )
1332
1433 // Mock error/warning/info/debug
1534 jest . spyOn ( core , 'error' ) . mockImplementation ( jest . fn ( ) )
@@ -18,59 +37,33 @@ describe('apiClient', () => {
1837 jest . spyOn ( core , 'debug' ) . mockImplementation ( jest . fn ( ) )
1938 } )
2039
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-
4440 describe ( 'enablePagesSite' , ( ) => {
4541 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 } ) )
4743
4844 const result = await apiClient . enablePagesSite ( {
49- repositoryNwo : GITHUB_REPOSITORY ,
5045 githubToken : GITHUB_TOKEN
5146 } )
5247 expect ( result ) . toEqual ( PAGE_OBJECT )
5348 } )
5449
5550 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 } } ) )
5752
5853 // Simply assert that no error is raised
5954 const result = await apiClient . enablePagesSite ( {
60- repositoryNwo : GITHUB_REPOSITORY ,
6155 githubToken : GITHUB_TOKEN
6256 } )
6357
6458 expect ( result ) . toBe ( null )
6559 } )
6660
6761 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 } } ) )
6963
7064 let erred = false
7165 try {
7266 await apiClient . enablePagesSite ( {
73- repositoryNwo : GITHUB_REPOSITORY ,
7467 githubToken : GITHUB_TOKEN
7568 } )
7669 } catch ( error ) {
@@ -84,22 +77,20 @@ describe('apiClient', () => {
8477 describe ( 'getPagesSite' , ( ) => {
8578 it ( 'makes a request to get a page' , async ( ) => {
8679 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 } ) )
8881
8982 const result = await apiClient . getPagesSite ( {
90- repositoryNwo : GITHUB_REPOSITORY ,
9183 githubToken : GITHUB_TOKEN
9284 } )
9385 expect ( result ) . toEqual ( PAGE_OBJECT )
9486 } )
9587
9688 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 } } ) )
9890
9991 let erred = false
10092 try {
10193 await apiClient . getPagesSite ( {
102- repositoryNwo : GITHUB_REPOSITORY ,
10394 githubToken : GITHUB_TOKEN
10495 } )
10596 } catch ( error ) {
@@ -113,55 +104,51 @@ describe('apiClient', () => {
113104 describe ( 'findOrCreatePagesSite' , ( ) => {
114105 it ( 'does not make a request to create a page if it already exists' , async ( ) => {
115106 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 } } ) )
118109
119110 const result = await apiClient . findOrCreatePagesSite ( {
120- repositoryNwo : GITHUB_REPOSITORY ,
121111 githubToken : GITHUB_TOKEN
122112 } )
123113 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 )
126116 } )
127117
128118 it ( 'makes request to create a page by default if it does not exist' , async ( ) => {
129119 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 } ) )
132122
133123 const result = await apiClient . findOrCreatePagesSite ( {
134- repositoryNwo : GITHUB_REPOSITORY ,
135124 githubToken : GITHUB_TOKEN
136125 } )
137126 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 )
140129 } )
141130
142131 it ( 'makes a request to create a page when explicitly enabled if it does not exist' , async ( ) => {
143132 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 } ) )
146135
147136 const result = await apiClient . findOrCreatePagesSite ( {
148- repositoryNwo : GITHUB_REPOSITORY ,
149137 githubToken : GITHUB_TOKEN ,
150138 enablement : true
151139 } )
152140 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 )
155143 } )
156144
157145 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
160148
161149 let erred = false
162150 try {
163151 await apiClient . findOrCreatePagesSite ( {
164- repositoryNwo : GITHUB_REPOSITORY ,
165152 githubToken : GITHUB_TOKEN ,
166153 enablement : false
167154 } )
@@ -171,18 +158,17 @@ describe('apiClient', () => {
171158 expect ( error . response . status ) . toEqual ( 404 )
172159 }
173160 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 )
176163 } )
177164
178165 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
181168
182169 let erred = false
183170 try {
184171 await apiClient . findOrCreatePagesSite ( {
185- repositoryNwo : GITHUB_REPOSITORY ,
186172 githubToken : GITHUB_TOKEN
187173 } )
188174 } catch ( error ) {
@@ -191,25 +177,23 @@ describe('apiClient', () => {
191177 expect ( error . response . status ) . toEqual ( 500 )
192178 }
193179 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 )
196182 } )
197183
198184 it ( 'makes second request to get page if create fails because of existence' , async ( ) => {
199185 const PAGE_OBJECT = { html_url : 'https://actions.github.io/is-awesome/' }
200- jest
201- . spyOn ( axios , 'get' )
186+ mockGetPages
202187 . mockImplementationOnce ( ( ) => Promise . reject ( { response : { status : 404 } } ) )
203188 . 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 } } ) )
205190
206191 const result = await apiClient . findOrCreatePagesSite ( {
207- repositoryNwo : GITHUB_REPOSITORY ,
208192 githubToken : GITHUB_TOKEN
209193 } )
210194 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 )
213197 } )
214198 } )
215199} )
0 commit comments