github.com/willmadison/cli@v6.40.1-0.20181018160101-29d5937903ff+incompatible/cf/commands/servicebroker/create_service_broker_test.go (about)

     1  package servicebroker_test
     2  
     3  import (
     4  	"errors"
     5  
     6  	"code.cloudfoundry.org/cli/cf/commandregistry"
     7  	"code.cloudfoundry.org/cli/cf/commands/servicebroker"
     8  	"code.cloudfoundry.org/cli/cf/configuration/coreconfig"
     9  	"code.cloudfoundry.org/cli/cf/flags"
    10  	"code.cloudfoundry.org/cli/cf/requirements"
    11  	"code.cloudfoundry.org/cli/cf/requirements/requirementsfakes"
    12  
    13  	"code.cloudfoundry.org/cli/cf/api/apifakes"
    14  	testconfig "code.cloudfoundry.org/cli/cf/util/testhelpers/configuration"
    15  	testterm "code.cloudfoundry.org/cli/cf/util/testhelpers/terminal"
    16  
    17  	. "code.cloudfoundry.org/cli/cf/util/testhelpers/matchers"
    18  	. "github.com/onsi/ginkgo"
    19  	. "github.com/onsi/gomega"
    20  )
    21  
    22  var _ = Describe("CreateServiceBroker", func() {
    23  	var (
    24  		ui                *testterm.FakeUI
    25  		configRepo        coreconfig.Repository
    26  		serviceBrokerRepo *apifakes.FakeServiceBrokerRepository
    27  
    28  		cmd         commandregistry.Command
    29  		deps        commandregistry.Dependency
    30  		factory     *requirementsfakes.FakeFactory
    31  		flagContext flags.FlagContext
    32  
    33  		loginRequirement         requirements.Requirement
    34  		targetedSpaceRequirement requirements.Requirement
    35  	)
    36  
    37  	BeforeEach(func() {
    38  		ui = &testterm.FakeUI{}
    39  		configRepo = testconfig.NewRepositoryWithDefaults()
    40  		serviceBrokerRepo = new(apifakes.FakeServiceBrokerRepository)
    41  		repoLocator := deps.RepoLocator.SetServiceBrokerRepository(serviceBrokerRepo)
    42  
    43  		deps = commandregistry.Dependency{
    44  			UI:          ui,
    45  			Config:      configRepo,
    46  			RepoLocator: repoLocator,
    47  		}
    48  
    49  		cmd = &servicebroker.CreateServiceBroker{}
    50  		cmd.SetDependency(deps, false)
    51  
    52  		flagContext = flags.NewFlagContext(cmd.MetaData().Flags)
    53  		factory = new(requirementsfakes.FakeFactory)
    54  
    55  		loginRequirement = &passingRequirement{Name: "login-requirement"}
    56  		factory.NewLoginRequirementReturns(loginRequirement)
    57  
    58  		targetedSpaceRequirement = &passingRequirement{Name: "targeted-space-requirement"}
    59  		factory.NewTargetedSpaceRequirementReturns(targetedSpaceRequirement)
    60  	})
    61  
    62  	It("has an alias of `csb`", func() {
    63  		cmd := &servicebroker.CreateServiceBroker{}
    64  
    65  		Expect(cmd.MetaData().ShortName).To(Equal("csb"))
    66  	})
    67  
    68  	Describe("Requirements", func() {
    69  		Context("when not provided exactly four args", func() {
    70  			BeforeEach(func() {
    71  				flagContext.Parse("service-broker")
    72  			})
    73  
    74  			It("fails with usage", func() {
    75  				_, err := cmd.Requirements(factory, flagContext)
    76  				Expect(err).To(HaveOccurred())
    77  				Expect(ui.Outputs()).To(ContainSubstrings(
    78  					[]string{"FAILED"},
    79  					[]string{"Incorrect Usage. Requires SERVICE_BROKER, USERNAME, PASSWORD, URL as arguments"},
    80  				))
    81  			})
    82  		})
    83  
    84  		Context("when provided exactly four args", func() {
    85  			BeforeEach(func() {
    86  				flagContext.Parse("service-broker", "username", "password", "url")
    87  			})
    88  
    89  			It("returns a LoginRequirement", func() {
    90  				actualRequirements, err := cmd.Requirements(factory, flagContext)
    91  				Expect(err).NotTo(HaveOccurred())
    92  				Expect(factory.NewLoginRequirementCallCount()).To(Equal(1))
    93  				Expect(actualRequirements).To(ContainElement(loginRequirement))
    94  			})
    95  		})
    96  
    97  		Context("when the --space-scoped flag is provided", func() {
    98  			BeforeEach(func() {
    99  				flagContext.Parse("service-broker", "username", "password", "url", "--space-scoped")
   100  			})
   101  
   102  			It("returns a TargetedSpaceRequirement", func() {
   103  				actualRequirements, err := cmd.Requirements(factory, flagContext)
   104  				Expect(err).NotTo(HaveOccurred())
   105  				Expect(factory.NewTargetedSpaceRequirementCallCount()).To(Equal(1))
   106  				Expect(actualRequirements).To(ContainElement(targetedSpaceRequirement))
   107  			})
   108  		})
   109  	})
   110  
   111  	Describe("Execute", func() {
   112  		var runCLIErr error
   113  
   114  		BeforeEach(func() {
   115  			err := flagContext.Parse("service-broker", "username", "password", "url")
   116  			Expect(err).NotTo(HaveOccurred())
   117  			cmd.Requirements(factory, flagContext)
   118  		})
   119  
   120  		JustBeforeEach(func() {
   121  			runCLIErr = cmd.Execute(flagContext)
   122  		})
   123  
   124  		It("tells the user it is creating the service broker", func() {
   125  			Expect(runCLIErr).NotTo(HaveOccurred())
   126  			Expect(ui.Outputs()).To(ContainSubstrings(
   127  				[]string{"Creating service broker", "service-broker", "my-user"},
   128  				[]string{"OK"},
   129  			))
   130  		})
   131  
   132  		It("tries to create the service broker", func() {
   133  			Expect(runCLIErr).NotTo(HaveOccurred())
   134  			Expect(serviceBrokerRepo.CreateCallCount()).To(Equal(1))
   135  			name, url, username, password, spaceGUID := serviceBrokerRepo.CreateArgsForCall(0)
   136  			Expect(name).To(Equal("service-broker"))
   137  			Expect(url).To(Equal("url"))
   138  			Expect(username).To(Equal("username"))
   139  			Expect(password).To(Equal("password"))
   140  			Expect(spaceGUID).To(Equal(""))
   141  		})
   142  
   143  		Context("when the --space-scoped flag is passed", func() {
   144  			BeforeEach(func() {
   145  				err := flagContext.Parse("service-broker", "username", "password", "url", "--space-scoped")
   146  				Expect(err).NotTo(HaveOccurred())
   147  			})
   148  
   149  			It("tries to create the service broker with the targeted space guid", func() {
   150  				Expect(runCLIErr).NotTo(HaveOccurred())
   151  				Expect(serviceBrokerRepo.CreateCallCount()).To(Equal(1))
   152  				name, url, username, password, spaceGUID := serviceBrokerRepo.CreateArgsForCall(0)
   153  				Expect(name).To(Equal("service-broker"))
   154  				Expect(url).To(Equal("url"))
   155  				Expect(username).To(Equal("username"))
   156  				Expect(password).To(Equal("password"))
   157  				Expect(spaceGUID).To(Equal("my-space-guid"))
   158  			})
   159  
   160  			It("tells the user it is creating the service broker in the targeted org and space", func() {
   161  				Expect(runCLIErr).NotTo(HaveOccurred())
   162  				Expect(ui.Outputs()).To(ContainSubstrings(
   163  					[]string{"Creating service broker service-broker in org my-org / space my-space as my-user"},
   164  					[]string{"OK"},
   165  				))
   166  			})
   167  		})
   168  
   169  		Context("when creating the service broker succeeds", func() {
   170  			BeforeEach(func() {
   171  				serviceBrokerRepo.CreateReturns(nil)
   172  			})
   173  
   174  			It("says OK", func() {
   175  				Expect(runCLIErr).NotTo(HaveOccurred())
   176  				Expect(ui.Outputs()).To(ContainSubstrings([]string{"OK"}))
   177  			})
   178  		})
   179  
   180  		Context("when creating the service broker fails", func() {
   181  			BeforeEach(func() {
   182  				serviceBrokerRepo.CreateReturns(errors.New("create-err"))
   183  			})
   184  
   185  			It("returns an error", func() {
   186  				Expect(runCLIErr).To(HaveOccurred())
   187  				Expect(runCLIErr.Error()).To(Equal("create-err"))
   188  			})
   189  		})
   190  	})
   191  })