github.com/sleungcy/cli@v7.1.0+incompatible/command/v7/rename_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  	v7 "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("rename-service-broker command", func() {
    20  	const (
    21  		binaryName    = "cf-command"
    22  		oldBrokerName = "old-name"
    23  		newBrokerName = "new-name"
    24  	)
    25  
    26  	var (
    27  		cmd                          *v7.RenameServiceBrokerCommand
    28  		fakeUpdateServiceBrokerActor *v7fakes.FakeActor
    29  		fakeSharedActor              *commandfakes.FakeSharedActor
    30  		fakeConfig                   *commandfakes.FakeConfig
    31  		testUI                       *ui.UI
    32  		executeErr                   error
    33  	)
    34  
    35  	BeforeEach(func() {
    36  		fakeUpdateServiceBrokerActor = &v7fakes.FakeActor{}
    37  		fakeSharedActor = &commandfakes.FakeSharedActor{}
    38  		testUI = ui.NewTestUI(NewBuffer(), NewBuffer(), NewBuffer())
    39  		fakeConfig = &commandfakes.FakeConfig{}
    40  		cmd = &v7.RenameServiceBrokerCommand{
    41  			BaseCommand: v7.BaseCommand{
    42  				Actor:       fakeUpdateServiceBrokerActor,
    43  				SharedActor: fakeSharedActor,
    44  				UI:          testUI,
    45  				Config:      fakeConfig,
    46  			},
    47  		}
    48  
    49  		setPositionalFlags(cmd, oldBrokerName, newBrokerName)
    50  	})
    51  
    52  	When("logged in", func() {
    53  		const guid = "fake-service-broker-guid"
    54  
    55  		BeforeEach(func() {
    56  			fakeUpdateServiceBrokerActor.GetServiceBrokerByNameReturns(
    57  				resources.ServiceBroker{GUID: guid},
    58  				v7action.Warnings{"get broker by name warning"},
    59  				nil,
    60  			)
    61  
    62  			fakeConfig.CurrentUserReturns(configv3.User{Name: "user"}, nil)
    63  		})
    64  
    65  		When("rename succeeds", func() {
    66  			BeforeEach(func() {
    67  				fakeUpdateServiceBrokerActor.UpdateServiceBrokerReturns(v7action.Warnings{"update service broker warning"}, nil)
    68  				executeErr = cmd.Execute(nil)
    69  			})
    70  
    71  			It("does not return any errors", func() {
    72  				Expect(executeErr).NotTo(HaveOccurred())
    73  			})
    74  
    75  			It("calls actor correctly and passes the new name", func() {
    76  				Expect(fakeUpdateServiceBrokerActor.UpdateServiceBrokerCallCount()).To(Equal(1))
    77  				serviceBrokerGUID, model := fakeUpdateServiceBrokerActor.UpdateServiceBrokerArgsForCall(0)
    78  				Expect(serviceBrokerGUID).To(Equal(guid))
    79  				Expect(model).To(Equal(
    80  					resources.ServiceBroker{
    81  						Name: newBrokerName,
    82  					},
    83  				))
    84  			})
    85  
    86  			It("yields warnings", func() {
    87  				Expect(testUI.Err).To(Say("get broker by name warning"))
    88  				Expect(testUI.Err).To(Say("update service broker warning"))
    89  			})
    90  
    91  			It("obtains broker GUID correctly by name", func() {
    92  				Expect(fakeUpdateServiceBrokerActor.GetServiceBrokerByNameCallCount()).To(Equal(1))
    93  				Expect(fakeUpdateServiceBrokerActor.GetServiceBrokerByNameArgsForCall(0)).To(Equal(oldBrokerName))
    94  			})
    95  		})
    96  
    97  		When("the UpdateServiceBroker actor fails to get the broker name", func() {
    98  			BeforeEach(func() {
    99  				fakeUpdateServiceBrokerActor.GetServiceBrokerByNameReturns(
   100  					resources.ServiceBroker{},
   101  					v7action.Warnings{"some-warning"},
   102  					actionerror.ServiceBrokerNotFoundError{
   103  						Name: oldBrokerName,
   104  					},
   105  				)
   106  			})
   107  
   108  			It("returns the error and displays all warnings", func() {
   109  				err := cmd.Execute(nil)
   110  				Expect(err).To(MatchError(actionerror.ServiceBrokerNotFoundError{Name: oldBrokerName}))
   111  				Expect(testUI.Err).To(Say("some-warning"))
   112  			})
   113  		})
   114  
   115  		When("the UpdateServiceBroker actor fails to rename the broker", func() {
   116  			It("returns the error and displays any warnings", func() {
   117  				fakeUpdateServiceBrokerActor.UpdateServiceBrokerReturns(v7action.Warnings{"a-warning"}, errors.New("something went wrong"))
   118  
   119  				err := cmd.Execute(nil)
   120  
   121  				Expect(err).To(HaveOccurred())
   122  				Expect(err.Error()).To(Equal("something went wrong"))
   123  				Expect(testUI.Err).To(Say("a-warning"))
   124  			})
   125  		})
   126  
   127  		When("it fails to get the current user", func() {
   128  			BeforeEach(func() {
   129  				fakeConfig.CurrentUserReturns(configv3.User{}, errors.New("no user found"))
   130  			})
   131  
   132  			It("returns the error and displays all warnings", func() {
   133  				err := cmd.Execute(nil)
   134  
   135  				Expect(err).To(HaveOccurred())
   136  				Expect(err).To(MatchError("no user found"))
   137  			})
   138  		})
   139  	})
   140  
   141  	When("not logged in", func() {
   142  		BeforeEach(func() {
   143  			fakeSharedActor.CheckTargetReturns(actionerror.NotLoggedInError{
   144  				BinaryName: binaryName,
   145  			})
   146  		})
   147  
   148  		It("returns an error", func() {
   149  			err := cmd.Execute(nil)
   150  
   151  			Expect(err).To(MatchError(actionerror.NotLoggedInError{BinaryName: binaryName}))
   152  
   153  			Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1))
   154  			checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0)
   155  			Expect(checkTargetedOrg).To(BeFalse())
   156  			Expect(checkTargetedSpace).To(BeFalse())
   157  		})
   158  	})
   159  })