@@ -273,6 +273,97 @@ func TestPasswordPrompt(t *testing.T) {
273273 }
274274}
275275
276+ func TestConfirmPrompt (t * testing.T ) {
277+ tests := map [string ]struct {
278+ expectedError string
279+ }{
280+ "error if non-TTY" : {
281+ expectedError : slackerror .ErrPrompt ,
282+ },
283+ }
284+ for name , tc := range tests {
285+ t .Run (name , func (t * testing.T ) {
286+ ctx := slackcontext .MockContext (t .Context ())
287+
288+ fsMock := slackdeps .NewFsMock ()
289+ osMock := slackdeps .NewOsMock ()
290+ osMock .On ("Stdout" ).Return (& slackdeps.FileMock {FileInfo : & slackdeps.FileInfoNamedPipe {}})
291+ cfg := config .NewConfig (fsMock , osMock )
292+ io := NewIOStreams (cfg , fsMock , osMock )
293+
294+ _ , err := io .ConfirmPrompt (ctx , "Continue?" , false )
295+
296+ assert .Error (t , err )
297+ assert .Equal (t , tc .expectedError , slackerror .ToSlackError (err ).Code )
298+ })
299+ }
300+ }
301+
302+ func TestInputPrompt (t * testing.T ) {
303+ tests := map [string ]struct {
304+ required bool
305+ expectedError string
306+ expectedValue string
307+ }{
308+ "error if non-TTY and required" : {
309+ required : true ,
310+ expectedError : slackerror .ErrPrompt ,
311+ },
312+ "no error if non-TTY and optional" : {
313+ required : false ,
314+ expectedValue : "" ,
315+ },
316+ }
317+ for name , tc := range tests {
318+ t .Run (name , func (t * testing.T ) {
319+ ctx := slackcontext .MockContext (t .Context ())
320+
321+ fsMock := slackdeps .NewFsMock ()
322+ osMock := slackdeps .NewOsMock ()
323+ osMock .On ("Stdout" ).Return (& slackdeps.FileMock {FileInfo : & slackdeps.FileInfoNamedPipe {}})
324+ cfg := config .NewConfig (fsMock , osMock )
325+ io := NewIOStreams (cfg , fsMock , osMock )
326+
327+ value , err := io .InputPrompt (ctx , "Enter name" , InputPromptConfig {
328+ Required : tc .required ,
329+ })
330+
331+ if err != nil {
332+ assert .Equal (t , tc .expectedError , slackerror .ToSlackError (err ).Code )
333+ } else {
334+ assert .NoError (t , err )
335+ assert .Equal (t , tc .expectedValue , value )
336+ }
337+ })
338+ }
339+ }
340+
341+ func TestMultiSelectPrompt (t * testing.T ) {
342+ tests := map [string ]struct {
343+ expectedError string
344+ }{
345+ "error if non-TTY" : {
346+ expectedError : slackerror .ErrPrompt ,
347+ },
348+ }
349+ for name , tc := range tests {
350+ t .Run (name , func (t * testing.T ) {
351+ ctx := slackcontext .MockContext (t .Context ())
352+
353+ fsMock := slackdeps .NewFsMock ()
354+ osMock := slackdeps .NewOsMock ()
355+ osMock .On ("Stdout" ).Return (& slackdeps.FileMock {FileInfo : & slackdeps.FileInfoNamedPipe {}})
356+ cfg := config .NewConfig (fsMock , osMock )
357+ io := NewIOStreams (cfg , fsMock , osMock )
358+
359+ _ , err := io .MultiSelectPrompt (ctx , "Pick items" , []string {"a" , "b" })
360+
361+ assert .Error (t , err )
362+ assert .Equal (t , tc .expectedError , slackerror .ToSlackError (err ).Code )
363+ })
364+ }
365+ }
366+
276367func TestSelectPrompt (t * testing.T ) {
277368 tests := map [string ]struct {
278369 flagValue string
0 commit comments