github.com/niteshexa/cloudfoundry_cli@v7.1.0+incompatible/command/v7/delete_service_broker_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/configv3"
    13  	"code.cloudfoundry.org/cli/util/ui"
    14  	. "github.com/onsi/ginkgo"
    15  	. "github.com/onsi/gomega"
    16  	. "github.com/onsi/gomega/gbytes"
    17  )
    18  
    19  var _ = Describe("delete-service-broker Command", func() {
    20  	var (
    21  		cmd               DeleteServiceBrokerCommand
    22  		testUI            *ui.UI
    23  		fakeConfig        *commandfakes.FakeConfig
    24  		fakeSharedActor   *commandfakes.FakeSharedActor
    25  		fakeActor         *v7fakes.FakeActor
    26  		input             *Buffer
    27  		binaryName        string
    28  		executeErr        error
    29  		serviceBrokerName string
    30  		serviceBrokerGUID string
    31  	)
    32  
    33  	BeforeEach(func() {
    34  		input = NewBuffer()
    35  		testUI = ui.NewTestUI(input, NewBuffer(), NewBuffer())
    36  		fakeConfig = new(commandfakes.FakeConfig)
    37  		fakeSharedActor = new(commandfakes.FakeSharedActor)
    38  		fakeActor = new(v7fakes.FakeActor)
    39  
    40  		binaryName = "faceman"
    41  		fakeConfig.BinaryNameReturns(binaryName)
    42  		serviceBrokerName = "some-service-broker"
    43  		serviceBrokerGUID = "service-broker-guid"
    44  
    45  		cmd = DeleteServiceBrokerCommand{
    46  			BaseCommand: BaseCommand{UI: testUI,
    47  				Config:      fakeConfig,
    48  				SharedActor: fakeSharedActor,
    49  				Actor:       fakeActor,
    50  			},
    51  		}
    52  
    53  		setPositionalFlags(&cmd, serviceBrokerName)
    54  
    55  		fakeConfig.CurrentUserReturns(configv3.User{Name: "steve"}, nil)
    56  	})
    57  
    58  	JustBeforeEach(func() {
    59  		executeErr = cmd.Execute(nil)
    60  	})
    61  
    62  	When("the user is not logged in", func() {
    63  		BeforeEach(func() {
    64  			fakeSharedActor.CheckTargetReturns(actionerror.NotLoggedInError{
    65  				BinaryName: binaryName,
    66  			})
    67  		})
    68  
    69  		It("returns an error", func() {
    70  			Expect(executeErr).To(MatchError(actionerror.NotLoggedInError{BinaryName: binaryName}))
    71  
    72  			Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1))
    73  			checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0)
    74  			Expect(checkTargetedOrg).To(BeFalse())
    75  			Expect(checkTargetedSpace).To(BeFalse())
    76  		})
    77  	})
    78  
    79  	When("the -f flag is NOT provided", func() {
    80  		BeforeEach(func() {
    81  			cmd.Force = false
    82  		})
    83  
    84  		When("the user inputs yes", func() {
    85  			BeforeEach(func() {
    86  				_, err := input.Write([]byte("y\n"))
    87  				Expect(err).ToNot(HaveOccurred())
    88  
    89  				fakeActor.GetServiceBrokerByNameReturns(resources.ServiceBroker{Name: serviceBrokerName, GUID: serviceBrokerGUID}, v7action.Warnings{"get-broker-by-name-warning"}, nil)
    90  				fakeActor.DeleteServiceBrokerReturns(v7action.Warnings{"delete-broker-warning"}, nil)
    91  			})
    92  
    93  			It("delegates to the Actor", func() {
    94  				actualServiceBrokerGUID := fakeActor.DeleteServiceBrokerArgsForCall(0)
    95  				Expect(actualServiceBrokerGUID).To(Equal(serviceBrokerGUID))
    96  			})
    97  
    98  			It("deletes the service broker", func() {
    99  				Expect(executeErr).ToNot(HaveOccurred())
   100  
   101  				Expect(testUI.Out).To(Say(`Deleting service broker %s...`, serviceBrokerName))
   102  				Expect(testUI.Err).To(Say("get-broker-by-name-warning"))
   103  				Expect(testUI.Err).To(Say("delete-broker-warning"))
   104  				Expect(testUI.Out).To(Say("OK"))
   105  				Expect(testUI.Out).NotTo(Say("ServiceBroker 'service-broker' does not exist"))
   106  			})
   107  		})
   108  
   109  		When("the user inputs no", func() {
   110  			BeforeEach(func() {
   111  				_, err := input.Write([]byte("n\n"))
   112  				Expect(err).ToNot(HaveOccurred())
   113  			})
   114  
   115  			It("cancels the delete", func() {
   116  				Expect(executeErr).ToNot(HaveOccurred())
   117  
   118  				Expect(testUI.Out).To(Say("'%s' has not been deleted.", serviceBrokerName))
   119  				Expect(fakeActor.DeleteServiceBrokerCallCount()).To(Equal(0))
   120  			})
   121  		})
   122  
   123  		When("the user chooses the default", func() {
   124  			BeforeEach(func() {
   125  				_, err := input.Write([]byte("\n"))
   126  				Expect(err).ToNot(HaveOccurred())
   127  			})
   128  
   129  			It("cancels the delete", func() {
   130  				Expect(executeErr).ToNot(HaveOccurred())
   131  
   132  				Expect(testUI.Out).To(Say("'%s' has not been deleted.", serviceBrokerName))
   133  				Expect(fakeActor.DeleteServiceBrokerCallCount()).To(Equal(0))
   134  			})
   135  		})
   136  
   137  		When("the user input is invalid", func() {
   138  			BeforeEach(func() {
   139  				_, err := input.Write([]byte("e\n\n"))
   140  				Expect(err).ToNot(HaveOccurred())
   141  			})
   142  
   143  			It("asks the user again", func() {
   144  				Expect(executeErr).NotTo(HaveOccurred())
   145  
   146  				Expect(testUI.Out).To(Say(`Really delete the service broker some\-service\-broker\? \[yN\]`))
   147  				Expect(testUI.Out).To(Say(`invalid input \(not y, n, yes, or no\)`))
   148  				Expect(testUI.Out).To(Say(`Really delete the service broker some\-service\-broker\? \[yN\]`))
   149  				Expect(fakeActor.DeleteServiceBrokerCallCount()).To(Equal(0))
   150  			})
   151  		})
   152  	})
   153  
   154  	When("the -f flag is provided", func() {
   155  		BeforeEach(func() {
   156  			cmd.Force = true
   157  		})
   158  
   159  		When("deleting the service broker errors", func() {
   160  			Context("generic error", func() {
   161  				BeforeEach(func() {
   162  					fakeActor.DeleteServiceBrokerReturns(v7action.Warnings{"some-warning"}, errors.New("some-error"))
   163  				})
   164  
   165  				It("displays all warnings, and returns the error", func() {
   166  					Expect(testUI.Err).To(Say("some-warning"))
   167  					Expect(testUI.Out).To(Say(`Deleting service broker some\-service\-broker\.\.\.`))
   168  					Expect(testUI.Out).ToNot(Say("OK"))
   169  					Expect(executeErr).To(MatchError("some-error"))
   170  				})
   171  			})
   172  		})
   173  
   174  		When("the service broker doesn't exist", func() {
   175  			BeforeEach(func() {
   176  				fakeActor.GetServiceBrokerByNameReturns(
   177  					resources.ServiceBroker{},
   178  					v7action.Warnings{"some-warning"},
   179  					actionerror.ServiceBrokerNotFoundError{
   180  						Name: serviceBrokerName},
   181  				)
   182  			})
   183  
   184  			It("displays all warnings, that the domain wasn't found, and does not error", func() {
   185  				Expect(executeErr).ToNot(HaveOccurred())
   186  
   187  				Expect(testUI.Err).To(Say("some-warning"))
   188  				Expect(testUI.Out).To(Say(`Deleting service broker %s...`, serviceBrokerName))
   189  				Expect(testUI.Out).To(Say(`Service broker '%s' does not exist.`, serviceBrokerName))
   190  				Expect(testUI.Out).To(Say("OK"))
   191  			})
   192  		})
   193  
   194  		When("the service broker exists", func() {
   195  			BeforeEach(func() {
   196  				fakeActor.DeleteServiceBrokerReturns(v7action.Warnings{"some-warning"}, nil)
   197  			})
   198  
   199  			It("displays all warnings, and does not error", func() {
   200  				Expect(executeErr).ToNot(HaveOccurred())
   201  
   202  				Expect(testUI.Err).To(Say("some-warning"))
   203  				Expect(testUI.Out).To(Say(`Deleting service broker %s...`, serviceBrokerName))
   204  				Expect(testUI.Out).To(Say("OK"))
   205  			})
   206  		})
   207  	})
   208  })