@@ -11,15 +11,47 @@ const { getOctokit } = require('@actions/github')
1111const pkg = require ( '../package.json' )
1212const meetings = require ( '../lib/meetings' )
1313
14+ const mainRepo = 'pkgjs/meet'
15+
16+ function getTestRepo ( ) {
17+ let testRepo = { owner : 'wesleytodd' , repo : 'meeting-maker' } // ✨ Wes, the meeting maker ✨
18+
19+ if ( process . env . GITHUB_REPOSITORY ) {
20+ // we appear to be in a GH action
21+ if ( process . env . GITHUB_REPOSITORY !== mainRepo ) {
22+ // action running in a fork
23+ const [ owner , repo ] = process . env . GITHUB_REPOSITORY . split ( '/' )
24+ testRepo = { owner, repo }
25+ } else if ( process . env . GITHUB_HEAD_REPO &&
26+ process . env . GITHUB_HEAD_REPO !== mainRepo ) {
27+ // action running in a fork PR targeting main repo
28+ // skip tests - GH token doesn't have write permissions for either repo
29+ throw new Error ( 'skipping integration tests: fork PR targeting main repo (no permissions)' )
30+ }
31+ }
32+
33+ console . log ( `using repository ${ testRepo . owner } /${ testRepo . repo } ` )
34+ return testRepo
35+ }
36+
1437suite ( `${ pkg . name } integration` , ( ) => {
1538 let client
39+ let testRepo
40+
1641 before ( ( ) => {
17- client = getOctokit ( process . env . GITHUB_TOKEN )
42+ const token = process . env . GITHUB_TOKEN
43+ if ( ! token ) {
44+ throw new Error ( 'GITHUB_TOKEN environment variable is required for integration tests' )
45+ }
46+
47+ client = getOctokit ( token )
48+ testRepo = getTestRepo ( )
1849 } )
50+
1951 test ( 'should create next meeting issue' , async ( ) => {
2052 const issue = await meetings . shouldCreateNextMeetingIssue ( client , {
21- owner : 'wesleytodd' ,
22- repo : 'meeting-maker' ,
53+ owner : testRepo . owner ,
54+ repo : testRepo . repo ,
2355 issueTitle : ( { date } ) => `Test Meeting ${ date . toZonedDateTimeISO ( 'UTC' ) . toPlainDate ( ) . toString ( ) } ` ,
2456 createWithin : 'P7D' ,
2557 agendaLabel : 'meeting-agenda' ,
@@ -30,8 +62,8 @@ suite(`${pkg.name} integration`, () => {
3062 now : Temporal . Instant . from ( '2020-04-13T13:00:00.0Z' ) ,
3163 meetingLabels : [ 'testMeeting' , 'test' ]
3264 } )
33- assert . deepStrictEqual ( issue . owner , 'wesleytodd' )
34- assert . deepStrictEqual ( issue . repo , 'meeting-maker' )
65+ assert . deepStrictEqual ( issue . owner , testRepo . owner )
66+ assert . deepStrictEqual ( issue . repo , testRepo . repo )
3567 assert . deepStrictEqual ( issue . title , `Test Meeting ${ Temporal . Instant . from ( '2020-04-16T13:00:00.0Z' ) . toZonedDateTimeISO ( 'UTC' ) . toPlainDate ( ) . toString ( ) } ` )
3668 assert . deepStrictEqual ( issue . agendaLabel , 'meeting-agenda' )
3769 assert . deepStrictEqual ( issue . labels , [ 'testMeeting' , 'test' ] )
@@ -41,8 +73,8 @@ suite(`${pkg.name} integration`, () => {
4173
4274 test ( 'create next meeting issue' , async ( ) => {
4375 const issue = await meetings . createNextMeeting ( client , {
44- owner : 'wesleytodd' ,
45- repo : 'meeting-maker' ,
76+ owner : testRepo . owner ,
77+ repo : testRepo . repo ,
4678 createWithin : 'P7D' ,
4779 schedules : [
4880 // 5pm GMT April 2 repeating every 28 days
@@ -60,8 +92,8 @@ suite(`${pkg.name} integration`, () => {
6092 assert . deepStrictEqual ( issue . data . state , 'open' )
6193
6294 await client . rest . issues . update ( {
63- owner : 'wesleytodd' ,
64- repo : 'meeting-maker' ,
95+ owner : testRepo . owner ,
96+ repo : testRepo . repo ,
6597 issue_number : issue . data . number ,
6698 state : 'closed'
6799 } )
0 commit comments