github.com/randomtask1155/cli@v6.41.1-0.20181227003417-a98eed78cbde+incompatible/util/ui/prompt_test.go (about)

     1  package ui_test
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/util/configv3"
     5  	. "code.cloudfoundry.org/cli/util/ui"
     6  	"code.cloudfoundry.org/cli/util/ui/uifakes"
     7  	. "github.com/onsi/ginkgo"
     8  	. "github.com/onsi/gomega"
     9  	. "github.com/onsi/gomega/gbytes"
    10  )
    11  
    12  var _ = Describe("Prompts", func() {
    13  	var (
    14  		ui         *UI
    15  		fakeConfig *uifakes.FakeConfig
    16  		out        *Buffer
    17  		errBuff    *Buffer
    18  		inBuffer   *Buffer
    19  	)
    20  
    21  	BeforeEach(func() {
    22  		fakeConfig = new(uifakes.FakeConfig)
    23  		fakeConfig.ColorEnabledReturns(configv3.ColorEnabled)
    24  
    25  		var err error
    26  		ui, err = NewUI(fakeConfig)
    27  		Expect(err).NotTo(HaveOccurred())
    28  
    29  		out = NewBuffer()
    30  		ui.Out = out
    31  		ui.OutForInteration = out
    32  		errBuff = NewBuffer()
    33  		ui.Err = errBuff
    34  
    35  		inBuffer = NewBuffer()
    36  		ui.In = inBuffer
    37  	})
    38  
    39  	Describe("DisplayBoolPrompt", func() {
    40  		It("displays the passed in string", func() {
    41  			_, _ = ui.DisplayBoolPrompt(false, "some-prompt", nil)
    42  			Expect(out).To(Say(`some-prompt \[yN\]:`))
    43  		})
    44  
    45  		When("the user chooses yes", func() {
    46  			BeforeEach(func() {
    47  				_, err := inBuffer.Write([]byte("y\n"))
    48  				Expect(err).ToNot(HaveOccurred())
    49  			})
    50  
    51  			It("returns true", func() {
    52  				response, err := ui.DisplayBoolPrompt(false, "some-prompt", nil)
    53  				Expect(err).ToNot(HaveOccurred())
    54  				Expect(response).To(BeTrue())
    55  			})
    56  		})
    57  
    58  		When("the user chooses no", func() {
    59  			BeforeEach(func() {
    60  				_, err := inBuffer.Write([]byte("n\n"))
    61  				Expect(err).ToNot(HaveOccurred())
    62  			})
    63  
    64  			It("returns false", func() {
    65  				response, err := ui.DisplayBoolPrompt(false, "some-prompt", nil)
    66  				Expect(err).ToNot(HaveOccurred())
    67  				Expect(response).To(BeFalse())
    68  			})
    69  		})
    70  
    71  		When("the user chooses the default", func() {
    72  			BeforeEach(func() {
    73  				_, err := inBuffer.Write([]byte("\n"))
    74  				Expect(err).ToNot(HaveOccurred())
    75  			})
    76  
    77  			When("the default is true", func() {
    78  				It("returns true", func() {
    79  					response, err := ui.DisplayBoolPrompt(true, "some-prompt", nil)
    80  					Expect(err).ToNot(HaveOccurred())
    81  					Expect(response).To(BeTrue())
    82  				})
    83  			})
    84  
    85  			When("the default is false", func() {
    86  				It("returns false", func() {
    87  					response, err := ui.DisplayBoolPrompt(false, "some-prompt", nil)
    88  					Expect(err).ToNot(HaveOccurred())
    89  					Expect(response).To(BeFalse())
    90  				})
    91  			})
    92  		})
    93  
    94  		When("the interact library returns an error", func() {
    95  			It("returns the error", func() {
    96  				_, err := inBuffer.Write([]byte("invalid\n"))
    97  				Expect(err).ToNot(HaveOccurred())
    98  				_, err = ui.DisplayBoolPrompt(false, "some-prompt", nil)
    99  				Expect(err).To(HaveOccurred())
   100  			})
   101  		})
   102  	})
   103  
   104  	Describe("DisplayPasswordPrompt", func() {
   105  		BeforeEach(func() {
   106  			inBuffer.Write([]byte("some-input\n"))
   107  		})
   108  
   109  		It("displays the passed in string", func() {
   110  			_, _ = ui.DisplayPasswordPrompt("App {{.AppName}} does not exist.", map[string]interface{}{
   111  				"AppName": "some-app",
   112  			})
   113  			Expect(out).To(Say("App some-app does not exist."))
   114  		})
   115  
   116  		It("returns the user input", func() {
   117  			userInput, err := ui.DisplayPasswordPrompt("App {{.AppName}} does not exist.", map[string]interface{}{
   118  				"AppName": "some-app",
   119  			})
   120  
   121  			Expect(err).ToNot(HaveOccurred())
   122  			Expect(userInput).To(Equal("some-input"))
   123  			Expect(out).ToNot(Say("some-input"))
   124  		})
   125  
   126  		When("the locale is not set to English", func() {
   127  			BeforeEach(func() {
   128  				fakeConfig.LocaleReturns("fr-FR")
   129  
   130  				var err error
   131  				ui, err = NewUI(fakeConfig)
   132  				Expect(err).NotTo(HaveOccurred())
   133  
   134  				ui.Out = out
   135  				ui.OutForInteration = out
   136  			})
   137  
   138  			It("translates and displays the prompt", func() {
   139  				_, _ = ui.DisplayPasswordPrompt("App {{.AppName}} does not exist.", map[string]interface{}{
   140  					"AppName": "some-app",
   141  				})
   142  				Expect(out).To(Say("L'application some-app n'existe pas.\n"))
   143  			})
   144  		})
   145  	})
   146  })