github.com/argoproj/argo-cd/v3@v3.2.1/cmd/argocd/commands/utils/prompt_test.go (about) 1 package utils 2 3 import ( 4 "os" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 "github.com/stretchr/testify/require" 9 ) 10 11 func TestNewPrompt_PromptsEnabled_True(t *testing.T) { 12 prompt := NewPrompt(true) 13 assert.True(t, prompt.enabled) 14 } 15 16 func TestNewPrompt_PromptsEnabled_False(t *testing.T) { 17 prompt := NewPrompt(false) 18 assert.False(t, prompt.enabled) 19 } 20 21 func TestConfirm_PromptsEnabled_False(t *testing.T) { 22 prompt := NewPrompt(false) 23 assert.True(t, prompt.Confirm("Are you sure you want to run this command? (y/n) ")) 24 } 25 26 // Returns true, true when prompt is disabled 27 func TestConfirmAllPromptDisabled(t *testing.T) { 28 p := &Prompt{enabled: false} 29 result1, result2 := p.ConfirmAll("Proceed?") 30 assert.True(t, result1) 31 assert.True(t, result2) 32 } 33 34 func TestConfirmBaseOnCountPromptDisabled(t *testing.T) { 35 p := &Prompt{enabled: false} 36 result1, result2 := p.ConfirmBaseOnCount("Proceed?", "Process all?", 2) 37 assert.True(t, result1) 38 assert.True(t, result2) 39 } 40 41 func TestConfirmBaseOnCount(t *testing.T) { 42 tests := []struct { 43 input string 44 output bool 45 count int 46 }{ 47 { 48 input: "y\n", 49 output: true, 50 count: 0, 51 }, 52 { 53 input: "y\n", 54 output: true, 55 count: 1, 56 }, 57 { 58 input: "n\n", 59 output: false, 60 count: 1, 61 }, 62 } 63 64 origStdin := os.Stdin 65 66 for _, tt := range tests { 67 tmpFile, err := writeToStdin(tt.input) 68 require.NoError(t, err) 69 p := &Prompt{enabled: true} 70 result1, result2 := p.ConfirmBaseOnCount("Proceed?", "Proceed all?", tt.count) 71 assert.Equal(t, tt.output, result1) 72 if tt.count == 1 { 73 assert.False(t, result2) 74 } else { 75 assert.Equal(t, tt.output, result2) 76 } 77 _ = tmpFile.Close() 78 os.Remove(tmpFile.Name()) 79 } 80 81 os.Stdin = origStdin 82 } 83 84 func TestConfirmPrompt(t *testing.T) { 85 cases := []struct { 86 input string 87 output bool 88 }{ 89 {"y\n", true}, 90 {"n\n", false}, 91 } 92 93 origStdin := os.Stdin 94 95 for _, c := range cases { 96 tmpFile, err := writeToStdin(c.input) 97 require.NoError(t, err) 98 p := &Prompt{enabled: true} 99 result := p.Confirm("Are you sure you want to run this command? (y/n) \n") 100 assert.Equal(t, c.output, result) 101 _ = tmpFile.Close() 102 os.Remove(tmpFile.Name()) 103 } 104 105 os.Stdin = origStdin 106 } 107 108 func TestConfirmAllPrompt(t *testing.T) { 109 cases := []struct { 110 input string 111 confirm bool 112 confirmAll bool 113 }{ 114 {"y\n", true, false}, 115 {"n\n", false, false}, 116 {"a\n", true, true}, 117 } 118 119 origStdin := os.Stdin 120 121 for _, c := range cases { 122 tmpFile, err := writeToStdin(c.input) 123 require.NoError(t, err) 124 p := &Prompt{enabled: true} 125 confirm, confirmAll := p.ConfirmAll("Are you sure you want to run this command? (y/n) \n") 126 assert.Equal(t, c.confirm, confirm) 127 assert.Equal(t, c.confirmAll, confirmAll) 128 _ = tmpFile.Close() 129 os.Remove(tmpFile.Name()) 130 } 131 132 os.Stdin = origStdin 133 } 134 135 func writeToStdin(msg string) (*os.File, error) { 136 tmpFile, err := os.CreateTemp("", "test-input") 137 if err != nil { 138 return nil, err 139 } 140 141 // Write the input to the temporary file 142 if _, err := tmpFile.WriteString(msg); err != nil { 143 return nil, err 144 } 145 146 // Seek to the beginning of the file so it can be read from the start 147 if _, err := tmpFile.Seek(0, 0); err != nil { 148 return nil, err 149 } 150 151 os.Stdin = tmpFile 152 153 return tmpFile, nil 154 }