github.com/liamawhite/cli-with-i18n@v6.32.1-0.20171122084555-dede0a5c3448+incompatible/command/v2/ssh_code_command_test.go (about)

     1  package v2_test
     2  
     3  import (
     4  	"errors"
     5  
     6  	"github.com/liamawhite/cli-with-i18n/actor/sharedaction"
     7  	"github.com/liamawhite/cli-with-i18n/command/commandfakes"
     8  	"github.com/liamawhite/cli-with-i18n/command/translatableerror"
     9  	. "github.com/liamawhite/cli-with-i18n/command/v2"
    10  	"github.com/liamawhite/cli-with-i18n/command/v2/v2fakes"
    11  	"github.com/liamawhite/cli-with-i18n/util/ui"
    12  	. "github.com/onsi/ginkgo"
    13  	. "github.com/onsi/gomega"
    14  	. "github.com/onsi/gomega/gbytes"
    15  )
    16  
    17  var _ = Describe("ssh-code Command", func() {
    18  	var (
    19  		cmd             SSHCodeCommand
    20  		testUI          *ui.UI
    21  		fakeConfig      *commandfakes.FakeConfig
    22  		fakeSharedActor *commandfakes.FakeSharedActor
    23  		fakeActor       *v2fakes.FakeSSHCodeActor
    24  		binaryName      string
    25  		executeErr      error
    26  	)
    27  
    28  	BeforeEach(func() {
    29  		testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer())
    30  		fakeConfig = new(commandfakes.FakeConfig)
    31  		fakeSharedActor = new(commandfakes.FakeSharedActor)
    32  		fakeActor = new(v2fakes.FakeSSHCodeActor)
    33  
    34  		cmd = SSHCodeCommand{
    35  			UI:          testUI,
    36  			Config:      fakeConfig,
    37  			SharedActor: fakeSharedActor,
    38  			Actor:       fakeActor,
    39  		}
    40  
    41  		binaryName = "faceman"
    42  		fakeConfig.BinaryNameReturns(binaryName)
    43  	})
    44  
    45  	JustBeforeEach(func() {
    46  		executeErr = cmd.Execute(nil)
    47  	})
    48  
    49  	Context("when checking the target fails", func() {
    50  		BeforeEach(func() {
    51  			fakeSharedActor.CheckTargetReturns(
    52  				sharedaction.NotLoggedInError{BinaryName: binaryName})
    53  		})
    54  
    55  		It("returns an error", func() {
    56  			Expect(executeErr).To(MatchError(translatableerror.NotLoggedInError{BinaryName: binaryName}))
    57  
    58  			Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1))
    59  			config, targetedOrganizationRequired, targetedSpaceRequired := fakeSharedActor.CheckTargetArgsForCall(0)
    60  			Expect(config).To(Equal(fakeConfig))
    61  			Expect(targetedOrganizationRequired).To(Equal(false))
    62  			Expect(targetedSpaceRequired).To(Equal(false))
    63  		})
    64  	})
    65  
    66  	Context("when the user is logged in", func() {
    67  		var code string
    68  
    69  		BeforeEach(func() {
    70  			code = "s3curep4ss"
    71  			fakeActor.GetSSHPasscodeReturns(code, nil)
    72  		})
    73  
    74  		It("displays the ssh code", func() {
    75  			Expect(executeErr).NotTo(HaveOccurred())
    76  			Expect(testUI.Out).To(Say(code))
    77  			Expect(fakeActor.GetSSHPasscodeCallCount()).To(Equal(1))
    78  		})
    79  
    80  		Context("when an error is encountered getting the ssh code", func() {
    81  			var expectedErr error
    82  
    83  			BeforeEach(func() {
    84  				expectedErr = errors.New("get ssh code error")
    85  				fakeActor.GetSSHPasscodeReturns("", expectedErr)
    86  			})
    87  
    88  			It("returns the error", func() {
    89  				Expect(executeErr).To(MatchError(expectedErr))
    90  
    91  				Expect(fakeActor.GetSSHPasscodeCallCount()).To(Equal(1))
    92  			})
    93  		})
    94  	})
    95  })