@@ -67,4 +67,69 @@ describe("invocation_context_helpers", () => {
6767 expect ( resolved . eventRepo ) . toEqual ( { owner : "target-owner" , repo : "target-repo" } ) ;
6868 expect ( resolved . eventPayload . issue . number ) . toBe ( 777 ) ;
6969 } ) ;
70+
71+ it . each ( [ "target_repo" , "targetRepo" ] ) ( "rejects workflow_dispatch %s when not in allowlist" , targetRepoKey => {
72+ const originalAllowedRepos = process . env . GH_AW_ALLOWED_REPOS ;
73+ try {
74+ process . env . GH_AW_ALLOWED_REPOS = "allowed-owner/allowed-repo" ;
75+
76+ expect ( ( ) =>
77+ resolveInvocationContext ( {
78+ eventName : "workflow_dispatch" ,
79+ repo : { owner : "side-owner" , repo : "side-repo" } ,
80+ payload : {
81+ inputs : {
82+ [ targetRepoKey ] : "target-owner/target-repo" ,
83+ } ,
84+ } ,
85+ } )
86+ ) . toThrow ( / E R R _ V A L I D A T I O N : R e p o s i t o r y ' t a r g e t - o w n e r \/ t a r g e t - r e p o ' i s n o t i n t h e a l l o w e d - r e p o s l i s t / ) ;
87+ } finally {
88+ if ( originalAllowedRepos === undefined ) {
89+ delete process . env . GH_AW_ALLOWED_REPOS ;
90+ } else {
91+ process . env . GH_AW_ALLOWED_REPOS = originalAllowedRepos ;
92+ }
93+ }
94+ } ) ;
95+
96+ it ( "allows workflow_dispatch target_repo when it is in allowlist" , ( ) => {
97+ const originalAllowedRepos = process . env . GH_AW_ALLOWED_REPOS ;
98+ try {
99+ process . env . GH_AW_ALLOWED_REPOS = "target-owner/target-repo" ;
100+
101+ const resolved = resolveInvocationContext ( {
102+ eventName : "workflow_dispatch" ,
103+ repo : { owner : "side-owner" , repo : "side-repo" } ,
104+ payload : {
105+ inputs : {
106+ target_repo : "target-owner/target-repo" ,
107+ } ,
108+ } ,
109+ } ) ;
110+
111+ expect ( resolved . eventRepo ) . toEqual ( { owner : "target-owner" , repo : "target-repo" } ) ;
112+ } finally {
113+ if ( originalAllowedRepos === undefined ) {
114+ delete process . env . GH_AW_ALLOWED_REPOS ;
115+ } else {
116+ process . env . GH_AW_ALLOWED_REPOS = originalAllowedRepos ;
117+ }
118+ }
119+ } ) ;
120+
121+ it ( "allows workflow_dispatch without target_repo inputs" , ( ) => {
122+ const resolved = resolveInvocationContext ( {
123+ eventName : "workflow_dispatch" ,
124+ repo : { owner : "side-owner" , repo : "side-repo" } ,
125+ payload : {
126+ inputs : {
127+ event_name : "issues" ,
128+ } ,
129+ } ,
130+ } ) ;
131+
132+ expect ( resolved . eventName ) . toBe ( "issues" ) ;
133+ expect ( resolved . eventRepo ) . toEqual ( { owner : "side-owner" , repo : "side-repo" } ) ;
134+ } ) ;
70135} ) ;
0 commit comments