github.com/sleungcy/cli@v7.1.0+incompatible/command/v7/cancel_deployment_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/flag"
    10  	. "code.cloudfoundry.org/cli/command/v7"
    11  	"code.cloudfoundry.org/cli/command/v7/v7fakes"
    12  	"code.cloudfoundry.org/cli/resources"
    13  	"code.cloudfoundry.org/cli/util/configv3"
    14  	"code.cloudfoundry.org/cli/util/ui"
    15  
    16  	. "github.com/onsi/ginkgo"
    17  	. "github.com/onsi/gomega"
    18  	. "github.com/onsi/gomega/gbytes"
    19  )
    20  
    21  var _ = Describe("Cancel deployment command", func() {
    22  	var (
    23  		cmd             CancelDeploymentCommand
    24  		testUI          *ui.UI
    25  		input           *Buffer
    26  		fakeConfig      *commandfakes.FakeConfig
    27  		fakeSharedActor *commandfakes.FakeSharedActor
    28  		fakeActor       *v7fakes.FakeActor
    29  		binaryName      string
    30  		appName         string
    31  		spaceGUID       string
    32  		executeErr      error
    33  	)
    34  
    35  	BeforeEach(func() {
    36  		input = NewBuffer()
    37  		testUI = ui.NewTestUI(input, NewBuffer(), NewBuffer())
    38  		fakeConfig = new(commandfakes.FakeConfig)
    39  		fakeSharedActor = new(commandfakes.FakeSharedActor)
    40  		fakeActor = new(v7fakes.FakeActor)
    41  
    42  		binaryName = "clodFoundry"
    43  		fakeConfig.BinaryNameReturns(binaryName)
    44  
    45  		cmd = CancelDeploymentCommand{
    46  			RequiredArgs: flag.AppName{AppName: appName},
    47  			BaseCommand: BaseCommand{
    48  				UI:          testUI,
    49  				Config:      fakeConfig,
    50  				SharedActor: fakeSharedActor,
    51  				Actor:       fakeActor,
    52  			},
    53  		}
    54  
    55  		fakeConfig.TargetedOrganizationReturns(configv3.Organization{
    56  			Name: "some-org",
    57  			GUID: "some-org-guid",
    58  		})
    59  
    60  		spaceGUID = "some-space-guid"
    61  		fakeConfig.TargetedSpaceReturns(configv3.Space{
    62  			Name: "some-space",
    63  			GUID: spaceGUID,
    64  		})
    65  
    66  		fakeConfig.CurrentUserReturns(configv3.User{Name: "timmyD"}, nil)
    67  	})
    68  
    69  	JustBeforeEach(func() {
    70  		executeErr = cmd.Execute(nil)
    71  	})
    72  
    73  	When("checking target fails", func() {
    74  		BeforeEach(func() {
    75  			fakeSharedActor.CheckTargetReturns(actionerror.NoOrganizationTargetedError{BinaryName: binaryName})
    76  		})
    77  
    78  		It("returns an error", func() {
    79  			Expect(executeErr).To(MatchError(actionerror.NoOrganizationTargetedError{BinaryName: binaryName}))
    80  
    81  			Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1))
    82  			checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0)
    83  			Expect(checkTargetedOrg).To(BeTrue())
    84  			Expect(checkTargetedSpace).To(BeTrue())
    85  		})
    86  	})
    87  
    88  	When("the user is not logged in", func() {
    89  		var expectedErr error
    90  
    91  		BeforeEach(func() {
    92  			expectedErr = errors.New("some current user error")
    93  			fakeConfig.CurrentUserNameReturns("", expectedErr)
    94  		})
    95  
    96  		It("return an error", func() {
    97  			Expect(executeErr).To(Equal(expectedErr))
    98  		})
    99  	})
   100  
   101  	When("the user is logged in", func() {
   102  		It("delegates to actor.GetApplicationByNameAndSpace", func() {
   103  			Expect(fakeActor.GetApplicationByNameAndSpaceCallCount()).To(Equal(1))
   104  			actualAppName, actualSpaceGUID := fakeActor.GetApplicationByNameAndSpaceArgsForCall(0)
   105  			Expect(actualAppName).To(Equal(appName))
   106  			Expect(actualSpaceGUID).To(Equal(spaceGUID))
   107  		})
   108  
   109  		When("getting the app fails", func() {
   110  			BeforeEach(func() {
   111  				fakeActor.GetApplicationByNameAndSpaceReturns(
   112  					resources.Application{},
   113  					v7action.Warnings{"get-app-warning"},
   114  					errors.New("get-app-error"),
   115  				)
   116  			})
   117  
   118  			It("returns the errors and outputs warnings", func() {
   119  				Expect(executeErr).To(MatchError("get-app-error"))
   120  				Expect(testUI.Err).To(Say("get-app-warning"))
   121  
   122  				Expect(fakeActor.GetLatestActiveDeploymentForAppCallCount()).To(Equal(0))
   123  				Expect(fakeActor.CancelDeploymentCallCount()).To(Equal(0))
   124  			})
   125  		})
   126  
   127  		When("getting the app succeeds", func() {
   128  			var appGUID string
   129  			BeforeEach(func() {
   130  				appGUID = "some-app-guid"
   131  				fakeActor.GetApplicationByNameAndSpaceReturns(
   132  					resources.Application{Name: appName, GUID: appGUID},
   133  					v7action.Warnings{"get-app-warning"},
   134  					nil,
   135  				)
   136  			})
   137  
   138  			It("delegates to actor.GetLatestDeployment", func() {
   139  				Expect(fakeActor.GetLatestActiveDeploymentForAppCallCount()).To(Equal(1))
   140  				Expect(fakeActor.GetLatestActiveDeploymentForAppArgsForCall(0)).To(Equal(appGUID))
   141  			})
   142  
   143  			When("getting the latest deployment fails", func() {
   144  				BeforeEach(func() {
   145  					fakeActor.GetLatestActiveDeploymentForAppReturns(
   146  						v7action.Deployment{},
   147  						v7action.Warnings{"get-deployment-warning"},
   148  						errors.New("get-deployment-error"),
   149  					)
   150  				})
   151  
   152  				It("returns the error and all warnings", func() {
   153  					Expect(executeErr).To(MatchError("get-deployment-error"))
   154  					Expect(testUI.Err).To(Say("get-app-warning"))
   155  					Expect(testUI.Err).To(Say("get-deployment-warning"))
   156  
   157  					Expect(fakeActor.CancelDeploymentCallCount()).To(Equal(0))
   158  				})
   159  			})
   160  
   161  			When("getting the latest deployment succeeds", func() {
   162  				var deploymentGUID string
   163  				BeforeEach(func() {
   164  					deploymentGUID = "some-deployment-guid"
   165  					fakeActor.GetLatestActiveDeploymentForAppReturns(
   166  						v7action.Deployment{GUID: deploymentGUID},
   167  						v7action.Warnings{"get-deployment-warning"},
   168  						nil,
   169  					)
   170  				})
   171  
   172  				It("delegates to actor.CancelDeployment", func() {
   173  					Expect(fakeActor.CancelDeploymentCallCount()).To(Equal(1))
   174  					Expect(fakeActor.CancelDeploymentArgsForCall(0)).To(Equal(deploymentGUID))
   175  				})
   176  
   177  				When("cancelling the deployment fails", func() {
   178  					BeforeEach(func() {
   179  						fakeActor.CancelDeploymentReturns(
   180  							v7action.Warnings{"cancel-deployment-warning"},
   181  							errors.New("cancel-deployment-error"),
   182  						)
   183  					})
   184  
   185  					It("returns all warnings and errors", func() {
   186  						Expect(executeErr).To(MatchError("cancel-deployment-error"))
   187  						Expect(testUI.Err).To(Say("get-app-warning"))
   188  						Expect(testUI.Err).To(Say("get-deployment-warning"))
   189  						Expect(testUI.Err).To(Say("cancel-deployment-warning"))
   190  					})
   191  				})
   192  
   193  				When("cancelling the deployment succeeds", func() {
   194  					BeforeEach(func() {
   195  						fakeActor.CancelDeploymentReturns(
   196  							v7action.Warnings{"cancel-deployment-warning"},
   197  							nil,
   198  						)
   199  					})
   200  
   201  					It("returns warnings and success", func() {
   202  						Expect(executeErr).ToNot(HaveOccurred())
   203  						Expect(testUI.Err).To(Say("get-app-warning"))
   204  						Expect(testUI.Err).To(Say("get-deployment-warning"))
   205  						Expect(testUI.Err).To(Say("cancel-deployment-warning"))
   206  					})
   207  				})
   208  			})
   209  		})
   210  	})
   211  })