2
2
// @ts -check
3
3
import { MockAgent , setGlobalDispatcher } from "undici" ;
4
4
5
- export async function test ( cb = ( _mockPool ) => { } ) {
6
- // Set required environment variables and inputs
7
- process . env . GITHUB_REPOSITORY_OWNER = "actions" ;
8
- process . env . GITHUB_REPOSITORY = "actions/create-github-app-token" ;
5
+ export const DEFAULT_ENV = {
6
+ GITHUB_REPOSITORY_OWNER : "actions" ,
7
+ GITHUB_REPOSITORY : "actions/create-github-app-token" ,
9
8
// inputs are set as environment variables with the prefix INPUT_
10
9
// https://docs.github.com/en/actions/creating-actions/metadata-syntax-for-github-actions#example-specifying-inputs
11
- process . env [ "INPUT_APP-ID" ] = "123456" ;
12
- process . env [ "INPUT_PRIVATE-KEY" ] = `-----BEGIN RSA PRIVATE KEY-----
10
+ "INPUT_GITHUB-API-URL" : "https://api.github.com" ,
11
+ "INPUT_APP-ID" : "123456" ,
12
+ // This key is invalidated. It’s from https://github.com/octokit/auth-app.js/issues/465#issuecomment-1564998327.
13
+ "INPUT_PRIVATE-KEY" : `-----BEGIN RSA PRIVATE KEY-----
13
14
MIIEowIBAAKCAQEA280nfuUM9w00Ib9E2rvZJ6Qu3Ua3IqR34ZlK53vn/Iobn2EL
14
15
Z9puc5Q/nFBU15NKwHyQNb+OG2hTCkjd1Xi9XPzEOH1r42YQmTGq8YCkUSkk6KZA
15
16
5dnhLwN9pFquT9fQgrf4r1D5GJj3rqvj8JDr1sBmunArqY5u4gziSrIohcjLIZV0
@@ -35,27 +36,33 @@ r4J2gqb0xTDfq7gLMNrIXc2QQM4gKbnJp60JQM3p9NmH8huavBZGvSvNzTwXyGG3
35
36
so0tiQKBgGQXZaxaXhYUcxYHuCkQ3V4Vsj3ezlM92xXlP32SGFm3KgFhYy9kATxw
36
37
Cax1ytZzvlrKLQyQFVK1COs2rHt7W4cJ7op7C8zXfsigXCiejnS664oAuX8sQZID
37
38
x3WQZRiXlWejSMUAHuMwXrhGlltF3lw83+xAjnqsVp75kGS6OH61
38
- -----END RSA PRIVATE KEY-----` ; // This key is invalidated. It’s from https://github.com/octokit/auth-app.js/issues/465#issuecomment-1564998327.
39
+ -----END RSA PRIVATE KEY-----` ,
40
+ } ;
41
+
42
+ export async function test ( cb = ( _mockPool ) => { } , env = DEFAULT_ENV ) {
43
+ for ( const [ key , value ] of Object . entries ( env ) ) {
44
+ process . env [ key ] = value ;
45
+ }
39
46
40
47
// Set up mocking
48
+ const baseUrl = new URL ( env [ "INPUT_GITHUB-API-URL" ] ) ;
49
+ const basePath = baseUrl . pathname === '/' ? '' : baseUrl . pathname ;
41
50
const mockAgent = new MockAgent ( ) ;
42
51
mockAgent . disableNetConnect ( ) ;
43
52
setGlobalDispatcher ( mockAgent ) ;
44
- const mockPool = mockAgent . get ( "https://api.github.com" ) ;
53
+ const mockPool = mockAgent . get ( baseUrl . origin ) ;
45
54
46
55
// Calling `auth({ type: "app" })` to obtain a JWT doesn’t make network requests, so no need to intercept.
47
56
48
57
// Mock installation id request
49
58
const mockInstallationId = "123456" ;
50
- const owner = process . env . INPUT_OWNER ?? process . env . GITHUB_REPOSITORY_OWNER ;
59
+ const owner = env . INPUT_OWNER ?? env . GITHUB_REPOSITORY_OWNER ;
51
60
const repo = encodeURIComponent (
52
- ( process . env . INPUT_REPOSITORIES ?? process . env . GITHUB_REPOSITORY ) . split (
53
- ","
54
- ) [ 0 ]
61
+ ( env . INPUT_REPOSITORIES ?? env . GITHUB_REPOSITORY ) . split ( "," ) [ 0 ]
55
62
) ;
56
63
mockPool
57
64
. intercept ( {
58
- path : `/repos/${ owner } /${ repo } /installation` ,
65
+ path : `${ basePath } /repos/${ owner } /${ repo } /installation` ,
59
66
method : "GET" ,
60
67
headers : {
61
68
accept : "application/vnd.github.v3+json" ,
@@ -75,7 +82,7 @@ x3WQZRiXlWejSMUAHuMwXrhGlltF3lw83+xAjnqsVp75kGS6OH61
75
82
const mockExpiresAt = "2016-07-11T22:14:10Z" ;
76
83
mockPool
77
84
. intercept ( {
78
- path : `/app/installations/${ mockInstallationId } /access_tokens` ,
85
+ path : `${ basePath } /app/installations/${ mockInstallationId } /access_tokens` ,
79
86
method : "POST" ,
80
87
headers : {
81
88
accept : "application/vnd.github.v3+json" ,
0 commit comments