code.cloudfoundry.org/cli@v7.1.0+incompatible/command/v7/disable_ssh_command_test.go (about)

     1  package v7_test
     2  
     3  import (
     4  	"errors"
     5  
     6  	"code.cloudfoundry.org/cli/actor/actionerror"
     7  	"code.cloudfoundry.org/cli/actor/v7action"
     8  	"code.cloudfoundry.org/cli/command/commandfakes"
     9  	. "code.cloudfoundry.org/cli/command/v7"
    10  	"code.cloudfoundry.org/cli/command/v7/v7fakes"
    11  	"code.cloudfoundry.org/cli/resources"
    12  	"code.cloudfoundry.org/cli/util/ui"
    13  	. "github.com/onsi/ginkgo"
    14  	. "github.com/onsi/gomega"
    15  	. "github.com/onsi/gomega/gbytes"
    16  )
    17  
    18  var _ = Describe("disable-ssh Command", func() {
    19  	var (
    20  		cmd                 DisableSSHCommand
    21  		testUI              *ui.UI
    22  		fakeConfig          *commandfakes.FakeConfig
    23  		fakeSharedActor     *commandfakes.FakeSharedActor
    24  		fakeDisableSSHActor *v7fakes.FakeActor
    25  
    26  		binaryName      string
    27  		currentUserName string
    28  		executeErr      error
    29  	)
    30  
    31  	BeforeEach(func() {
    32  		testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer())
    33  		fakeConfig = new(commandfakes.FakeConfig)
    34  		fakeSharedActor = new(commandfakes.FakeSharedActor)
    35  		fakeDisableSSHActor = new(v7fakes.FakeActor)
    36  
    37  		cmd = DisableSSHCommand{
    38  			BaseCommand: BaseCommand{
    39  				UI:          testUI,
    40  				Config:      fakeConfig,
    41  				SharedActor: fakeSharedActor,
    42  				Actor:       fakeDisableSSHActor,
    43  			},
    44  		}
    45  
    46  		cmd.RequiredArgs.AppName = "some-app"
    47  
    48  		binaryName = "faceman"
    49  		fakeConfig.BinaryNameReturns(binaryName)
    50  		currentUserName = "some-user"
    51  		fakeConfig.CurrentUserNameReturns(currentUserName, nil)
    52  	})
    53  
    54  	JustBeforeEach(func() {
    55  		executeErr = cmd.Execute(nil)
    56  	})
    57  
    58  	When("checking target fails", func() {
    59  		BeforeEach(func() {
    60  			fakeSharedActor.CheckTargetReturns(actionerror.NotLoggedInError{BinaryName: binaryName})
    61  		})
    62  
    63  		It("returns an error", func() {
    64  			Expect(executeErr).To(MatchError(actionerror.NotLoggedInError{BinaryName: "faceman"}))
    65  
    66  			Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1))
    67  			checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0)
    68  			Expect(checkTargetedOrg).To(BeTrue())
    69  			Expect(checkTargetedSpace).To(BeTrue())
    70  		})
    71  	})
    72  
    73  	When("the user is logged in", func() {
    74  		When("no errors occur", func() {
    75  			BeforeEach(func() {
    76  				fakeDisableSSHActor.GetApplicationByNameAndSpaceReturns(
    77  					resources.Application{Name: "some-app", GUID: "some-app-guid"},
    78  					v7action.Warnings{"some-get-app-warnings"},
    79  					nil,
    80  				)
    81  				fakeDisableSSHActor.GetAppFeatureReturns(
    82  					resources.ApplicationFeature{Enabled: true, Name: "ssh"},
    83  					v7action.Warnings{"some-feature-warnings"},
    84  					nil,
    85  				)
    86  				fakeDisableSSHActor.UpdateAppFeatureReturns(
    87  					v7action.Warnings{"some-update-ssh-warnings"},
    88  					nil,
    89  				)
    90  			})
    91  
    92  			It("disables ssh on the app", func() {
    93  				Expect(executeErr).ToNot(HaveOccurred())
    94  
    95  				Expect(fakeDisableSSHActor.GetApplicationByNameAndSpaceCallCount()).To(Equal(1))
    96  
    97  				appName, spaceGUID := fakeDisableSSHActor.GetApplicationByNameAndSpaceArgsForCall(0)
    98  				Expect(appName).To(Equal(cmd.RequiredArgs.AppName))
    99  				Expect(spaceGUID).To(Equal(cmd.Config.TargetedSpace().GUID))
   100  
   101  				Expect(fakeDisableSSHActor.GetAppFeatureCallCount()).To(Equal(1))
   102  
   103  				appGUID, featureName := fakeDisableSSHActor.GetAppFeatureArgsForCall(0)
   104  				Expect(appGUID).To(Equal("some-app-guid"))
   105  				Expect(featureName).To(Equal("ssh"))
   106  
   107  				Expect(fakeDisableSSHActor.UpdateAppFeatureCallCount()).To(Equal(1))
   108  				app, enabled, featureName := fakeDisableSSHActor.UpdateAppFeatureArgsForCall(0)
   109  				Expect(app.Name).To(Equal("some-app"))
   110  				Expect(enabled).To(Equal(false))
   111  				Expect(featureName).To(Equal("ssh"))
   112  
   113  				Expect(testUI.Err).To(Say("some-get-app-warnings"))
   114  				Expect(testUI.Err).To(Say("some-feature-warnings"))
   115  				Expect(testUI.Err).To(Say("some-update-ssh-warnings"))
   116  				Expect(testUI.Out).To(Say(`Disabling ssh support for app %s as %s\.\.\.`, appName, currentUserName))
   117  				Expect(testUI.Out).To(Say("OK"))
   118  			})
   119  		})
   120  
   121  		When("app ssh is already disabled", func() {
   122  			BeforeEach(func() {
   123  				fakeDisableSSHActor.UpdateAppFeatureReturns(
   124  					v7action.Warnings{"ssh support for app 'some-app' is already disabled.", "some-other-warnings"},
   125  					nil,
   126  				)
   127  				fakeDisableSSHActor.GetAppFeatureReturns(
   128  					resources.ApplicationFeature{Enabled: false, Name: "ssh"},
   129  					v7action.Warnings{},
   130  					nil,
   131  				)
   132  			})
   133  
   134  			It("shows the app ssh is already disabled", func() {
   135  				Expect(testUI.Out).To(Say("ssh support for app 'some-app' is already disabled."))
   136  				Expect(testUI.Out).To(Say("OK"))
   137  			})
   138  		})
   139  
   140  		When("an error occurs", func() {
   141  			When("GetApp action errors", func() {
   142  				When("no user is found", func() {
   143  					var returnedErr error
   144  
   145  					BeforeEach(func() {
   146  						returnedErr = actionerror.ApplicationNotFoundError{Name: "some-app"}
   147  						fakeDisableSSHActor.GetApplicationByNameAndSpaceReturns(
   148  							resources.Application{},
   149  							nil,
   150  							returnedErr)
   151  					})
   152  
   153  					It("returns the same error", func() {
   154  						Expect(executeErr).To(HaveOccurred())
   155  						Expect(executeErr).To(MatchError(returnedErr))
   156  					})
   157  				})
   158  			})
   159  
   160  			When("GetAppFeature action errors", func() {
   161  				returnedErr := errors.New("some-error")
   162  				BeforeEach(func() {
   163  
   164  					fakeDisableSSHActor.GetAppFeatureReturns(
   165  						resources.ApplicationFeature{},
   166  						nil,
   167  						returnedErr,
   168  					)
   169  				})
   170  
   171  				It("returns the same error", func() {
   172  					Expect(executeErr).To(HaveOccurred())
   173  					Expect(executeErr).To(MatchError(returnedErr))
   174  				})
   175  			})
   176  
   177  			When("Disable ssh action errors", func() {
   178  				var returnedErr error
   179  
   180  				BeforeEach(func() {
   181  					returnedErr = errors.New("some-error")
   182  					fakeDisableSSHActor.GetApplicationByNameAndSpaceReturns(
   183  						resources.Application{Name: "some-app"},
   184  						v7action.Warnings{"some-warning"},
   185  						nil,
   186  					)
   187  					fakeDisableSSHActor.UpdateAppFeatureReturns(nil, returnedErr)
   188  				})
   189  
   190  				It("returns the same error", func() {
   191  					Expect(executeErr).To(MatchError(returnedErr))
   192  				})
   193  			})
   194  		})
   195  	})
   196  })