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