github.com/rakutentech/cli@v6.12.5-0.20151006231303-24468b65536e+incompatible/cf/commands/service/create_user_provided_service_test.go (about)

     1  package service_test
     2  
     3  import (
     4  	testapi "github.com/cloudfoundry/cli/cf/api/fakes"
     5  	"github.com/cloudfoundry/cli/cf/command_registry"
     6  	"github.com/cloudfoundry/cli/cf/configuration/core_config"
     7  	testcmd "github.com/cloudfoundry/cli/testhelpers/commands"
     8  	testconfig "github.com/cloudfoundry/cli/testhelpers/configuration"
     9  	testreq "github.com/cloudfoundry/cli/testhelpers/requirements"
    10  	testterm "github.com/cloudfoundry/cli/testhelpers/terminal"
    11  	. "github.com/onsi/ginkgo"
    12  	. "github.com/onsi/gomega"
    13  
    14  	. "github.com/cloudfoundry/cli/testhelpers/matchers"
    15  )
    16  
    17  var _ = Describe("create-user-provided-service command", func() {
    18  	var (
    19  		ui                  *testterm.FakeUI
    20  		config              core_config.Repository
    21  		repo                *testapi.FakeUserProvidedServiceInstanceRepository
    22  		requirementsFactory *testreq.FakeReqFactory
    23  		deps                command_registry.Dependency
    24  	)
    25  
    26  	updateCommandDependency := func(pluginCall bool) {
    27  		deps.Ui = ui
    28  		deps.RepoLocator = deps.RepoLocator.SetUserProvidedServiceInstanceRepository(repo)
    29  		deps.Config = config
    30  		command_registry.Commands.SetCommand(command_registry.Commands.FindCommand("create-user-provided-service").SetDependency(deps, pluginCall))
    31  	}
    32  
    33  	BeforeEach(func() {
    34  		ui = &testterm.FakeUI{}
    35  		config = testconfig.NewRepositoryWithDefaults()
    36  		repo = &testapi.FakeUserProvidedServiceInstanceRepository{}
    37  		requirementsFactory = &testreq.FakeReqFactory{LoginSuccess: true, TargetedSpaceSuccess: true}
    38  	})
    39  
    40  	Describe("login requirements", func() {
    41  		It("fails if the user is not logged in", func() {
    42  			requirementsFactory.LoginSuccess = false
    43  			Expect(testcmd.RunCliCommand("create-user-provided-service", []string{"my-service"}, requirementsFactory, updateCommandDependency, false)).To(BeFalse())
    44  		})
    45  		It("fails when a space is not targeted", func() {
    46  			requirementsFactory.TargetedSpaceSuccess = false
    47  			Expect(testcmd.RunCliCommand("create-user-provided-service", []string{"my-service"}, requirementsFactory, updateCommandDependency, false)).To(BeFalse())
    48  		})
    49  	})
    50  
    51  	It("creates a new user provided service given just a name", func() {
    52  		testcmd.RunCliCommand("create-user-provided-service", []string{"my-custom-service"}, requirementsFactory, updateCommandDependency, false)
    53  		Expect(ui.Outputs).To(ContainSubstrings(
    54  			[]string{"Creating user provided service"},
    55  			[]string{"OK"},
    56  		))
    57  	})
    58  
    59  	It("accepts service parameters interactively", func() {
    60  		ui.Inputs = []string{"foo value", "bar value", "baz value"}
    61  		testcmd.RunCliCommand("create-user-provided-service", []string{"-p", `"foo, bar, baz"`, "my-custom-service"}, requirementsFactory, updateCommandDependency, false)
    62  
    63  		Expect(ui.Prompts).To(ContainSubstrings(
    64  			[]string{"foo"},
    65  			[]string{"bar"},
    66  			[]string{"baz"},
    67  		))
    68  
    69  		Expect(repo.CreateCallCount()).To(Equal(1))
    70  		name, drainUrl, params := repo.CreateArgsForCall(0)
    71  		Expect(name).To(Equal("my-custom-service"))
    72  		Expect(drainUrl).To(Equal(""))
    73  		Expect(params["foo"]).To(Equal("foo value"))
    74  		Expect(params["bar"]).To(Equal("bar value"))
    75  		Expect(params["baz"]).To(Equal("baz value"))
    76  
    77  		Expect(ui.Outputs).To(ContainSubstrings(
    78  			[]string{"Creating user provided service", "my-custom-service", "my-org", "my-space", "my-user"},
    79  			[]string{"OK"},
    80  		))
    81  	})
    82  
    83  	It("accepts service parameters as JSON without prompting", func() {
    84  		args := []string{"-p", `{"foo": "foo value", "bar": "bar value", "baz": 4}`, "my-custom-service"}
    85  		testcmd.RunCliCommand("create-user-provided-service", args, requirementsFactory, updateCommandDependency, false)
    86  
    87  		name, _, params := repo.CreateArgsForCall(0)
    88  		Expect(name).To(Equal("my-custom-service"))
    89  
    90  		Expect(ui.Prompts).To(BeEmpty())
    91  		Expect(params).To(Equal(map[string]interface{}{
    92  			"foo": "foo value",
    93  			"bar": "bar value",
    94  			"baz": float64(4),
    95  		}))
    96  
    97  		Expect(ui.Outputs).To(ContainSubstrings(
    98  			[]string{"Creating user provided service"},
    99  			[]string{"OK"},
   100  		))
   101  	})
   102  
   103  	It("creates a user provided service with a syslog drain url", func() {
   104  		args := []string{"-l", "syslog://example.com", "-p", `{"foo": "foo value", "bar": "bar value", "baz": "baz value"}`, "my-custom-service"}
   105  		testcmd.RunCliCommand("create-user-provided-service", args, requirementsFactory, updateCommandDependency, false)
   106  
   107  		_, drainUrl, _ := repo.CreateArgsForCall(0)
   108  		Expect(drainUrl).To(Equal("syslog://example.com"))
   109  		Expect(ui.Outputs).To(ContainSubstrings(
   110  			[]string{"Creating user provided service"},
   111  			[]string{"OK"},
   112  		))
   113  	})
   114  })