@@ -29,6 +29,13 @@ func TestHelperProcess(t *testing.T) {
2929 return
3030 }
3131 if err := func (args []string ) error {
32+ // Dispatch tests use this marker argument to inspect the environment gh handed to
33+ // the extension, rather than echoing the arguments back.
34+ if len (args ) > 0 && args [len (args )- 1 ] == "print-env" {
35+ fmt .Fprintf (os .Stdout , "GH_EXTENSION=%s\n " , os .Getenv ("GH_EXTENSION" ))
36+ fmt .Fprintf (os .Stdout , "GH_HELPER_INHERITED=%s\n " , os .Getenv ("GH_HELPER_INHERITED" ))
37+ return nil
38+ }
3239 fmt .Fprintf (os .Stdout , "%v\n " , args )
3340 return nil
3441 }(os .Args [3 :]); err != nil {
@@ -38,7 +45,7 @@ func TestHelperProcess(t *testing.T) {
3845 os .Exit (0 )
3946}
4047
41- func newTestManager (dataDir , updateDir string , client * http.Client , gitClient gitClient , ios * iostreams.IOStreams ) * Manager {
48+ func newTestManager (dataDir , updateDir string , client * http.Client , gitClient gitClient , ios * iostreams.IOStreams , extraEnv ... string ) * Manager {
4249 return & Manager {
4350 dataDir : func () string { return dataDir },
4451 updateDir : func () string { return updateDir },
@@ -51,7 +58,7 @@ func newTestManager(dataDir, updateDir string, client *http.Client, gitClient gi
5158 cmd .Stdout = ios .Out
5259 cmd .Stderr = ios .ErrOut
5360 }
54- cmd .Env = []string {"GH_WANT_HELPER_PROCESS=1" }
61+ cmd .Env = append ( []string {"GH_WANT_HELPER_PROCESS=1" }, extraEnv ... )
5562 return cmd
5663 },
5764 config : config .NewBlankConfig (),
@@ -191,6 +198,75 @@ func TestManager_Dispatch_binary(t *testing.T) {
191198 assert .Equal (t , "" , stderr .String ())
192199}
193200
201+ func TestManager_Dispatch_ghExtensionEnv (t * testing.T ) {
202+ tests := []struct {
203+ name string
204+ extraEnv []string
205+ wantOut string
206+ }{
207+ {
208+ name : "sets GH_EXTENSION" ,
209+ wantOut : "GH_EXTENSION=1\n GH_HELPER_INHERITED=\n " ,
210+ },
211+ {
212+ name : "preserves the rest of the environment" ,
213+ extraEnv : []string {"GH_HELPER_INHERITED=yes" },
214+ wantOut : "GH_EXTENSION=1\n GH_HELPER_INHERITED=yes\n " ,
215+ },
216+ {
217+ name : "overrides an inherited GH_EXTENSION" ,
218+ extraEnv : []string {"GH_EXTENSION=0" , "GH_HELPER_INHERITED=yes" },
219+ wantOut : "GH_EXTENSION=1\n GH_HELPER_INHERITED=yes\n " ,
220+ },
221+ }
222+
223+ for _ , tt := range tests {
224+ t .Run ("script extension: " + tt .name , func (t * testing.T ) {
225+ dataDir := t .TempDir ()
226+ updateDir := t .TempDir ()
227+ extDir := filepath .Join (dataDir , "extensions" , "gh-hello" )
228+ require .NoError (t , stubExtension (filepath .Join (extDir , "gh-hello" )))
229+
230+ gc , gcOne := & mockGitClient {}, & mockGitClient {}
231+ gc .On ("ForRepo" , extDir ).Return (gcOne ).Once ()
232+
233+ m := newTestManager (dataDir , updateDir , nil , gc , nil , tt .extraEnv ... )
234+
235+ stdout := & bytes.Buffer {}
236+ stderr := & bytes.Buffer {}
237+ found , err := m .Dispatch ([]string {"hello" , "print-env" }, nil , stdout , stderr )
238+ require .NoError (t , err )
239+ require .True (t , found )
240+
241+ assert .Equal (t , tt .wantOut , stdout .String ())
242+ assert .Equal (t , "" , stderr .String ())
243+ })
244+
245+ t .Run ("binary extension: " + tt .name , func (t * testing.T ) {
246+ dataDir := t .TempDir ()
247+ updateDir := t .TempDir ()
248+ extDir := filepath .Join (dataDir , "extensions" , "gh-hello" )
249+ require .NoError (t , stubBinaryExtension (extDir , binManifest {
250+ Owner : "owner" ,
251+ Name : "gh-hello" ,
252+ Host : "github.com" ,
253+ Tag : "v1.0.0" ,
254+ }))
255+
256+ m := newTestManager (dataDir , updateDir , nil , nil , nil , tt .extraEnv ... )
257+
258+ stdout := & bytes.Buffer {}
259+ stderr := & bytes.Buffer {}
260+ found , err := m .Dispatch ([]string {"hello" , "print-env" }, nil , stdout , stderr )
261+ require .NoError (t , err )
262+ require .True (t , found )
263+
264+ assert .Equal (t , tt .wantOut , stdout .String ())
265+ assert .Equal (t , "" , stderr .String ())
266+ })
267+ }
268+ }
269+
194270func TestManager_Remove (t * testing.T ) {
195271 dataDir := t .TempDir ()
196272 updateDir := t .TempDir ()
0 commit comments