github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/cf/commands/servicekey/service_keys_test.go (about)

     1  package servicekey_test
     2  
     3  import (
     4  	"errors"
     5  
     6  	"code.cloudfoundry.org/cli/cf/commandregistry"
     7  	"code.cloudfoundry.org/cli/cf/configuration/coreconfig"
     8  	"code.cloudfoundry.org/cli/cf/models"
     9  	"code.cloudfoundry.org/cli/cf/requirements"
    10  	"code.cloudfoundry.org/cli/cf/requirements/requirementsfakes"
    11  
    12  	"code.cloudfoundry.org/cli/cf/api/apifakes"
    13  	testcmd "code.cloudfoundry.org/cli/cf/util/testhelpers/commands"
    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  
    19  	. "github.com/onsi/ginkgo"
    20  	. "github.com/onsi/gomega"
    21  )
    22  
    23  var _ = Describe("service-keys command", func() {
    24  	var (
    25  		ui                  *testterm.FakeUI
    26  		config              coreconfig.Repository
    27  		requirementsFactory *requirementsfakes.FakeFactory
    28  		serviceRepo         *apifakes.FakeServiceRepository
    29  		serviceKeyRepo      *apifakes.OldFakeServiceKeyRepo
    30  		deps                commandregistry.Dependency
    31  	)
    32  
    33  	updateCommandDependency := func(pluginCall bool) {
    34  		deps.UI = ui
    35  		deps.RepoLocator = deps.RepoLocator.SetServiceRepository(serviceRepo)
    36  		deps.RepoLocator = deps.RepoLocator.SetServiceKeyRepository(serviceKeyRepo)
    37  		deps.Config = config
    38  		commandregistry.Commands.SetCommand(commandregistry.Commands.FindCommand("service-keys").SetDependency(deps, pluginCall))
    39  	}
    40  
    41  	BeforeEach(func() {
    42  		ui = &testterm.FakeUI{}
    43  		config = testconfig.NewRepositoryWithDefaults()
    44  		serviceRepo = new(apifakes.FakeServiceRepository)
    45  		serviceInstance := models.ServiceInstance{}
    46  		serviceInstance.GUID = "fake-instance-guid"
    47  		serviceInstance.Name = "fake-service-instance"
    48  		serviceRepo.FindInstanceByNameReturns(serviceInstance, nil)
    49  		serviceKeyRepo = apifakes.NewFakeServiceKeyRepo()
    50  		requirementsFactory = new(requirementsfakes.FakeFactory)
    51  		requirementsFactory.NewLoginRequirementReturns(requirements.Passing{})
    52  		requirementsFactory.NewTargetedSpaceRequirementReturns(requirements.Passing{})
    53  		serviceInstanceReq := new(requirementsfakes.FakeServiceInstanceRequirement)
    54  		requirementsFactory.NewServiceInstanceRequirementReturns(serviceInstanceReq)
    55  		serviceInstanceReq.GetServiceInstanceReturns(serviceInstance)
    56  	})
    57  
    58  	var callListServiceKeys = func(args []string) bool {
    59  		return testcmd.RunCLICommand("service-keys", args, requirementsFactory, updateCommandDependency, false, ui)
    60  	}
    61  
    62  	Describe("requirements", func() {
    63  		It("fails when not logged in", func() {
    64  			requirementsFactory.NewLoginRequirementReturns(requirements.Failing{Message: "not logged in"})
    65  			Expect(callListServiceKeys([]string{"fake-service-instance", "fake-service-key"})).To(BeFalse())
    66  		})
    67  
    68  		It("requires one argument to run", func() {
    69  			Expect(callListServiceKeys([]string{})).To(BeFalse())
    70  			Expect(callListServiceKeys([]string{"fake-arg-one"})).To(BeTrue())
    71  			Expect(callListServiceKeys([]string{"fake-arg-one", "fake-arg-two"})).To(BeFalse())
    72  		})
    73  
    74  		It("fails when service instance is not found", func() {
    75  			serviceInstanceReq := new(requirementsfakes.FakeServiceInstanceRequirement)
    76  			serviceInstanceReq.ExecuteReturns(errors.New("no service instance"))
    77  			requirementsFactory.NewServiceInstanceRequirementReturns(serviceInstanceReq)
    78  			Expect(callListServiceKeys([]string{"non-exist-service-instance"})).To(BeFalse())
    79  		})
    80  
    81  		It("fails when space is not targetted", func() {
    82  			requirementsFactory.NewTargetedSpaceRequirementReturns(requirements.Failing{Message: "no targeted space"})
    83  			Expect(callListServiceKeys([]string{"non-exist-service-instance"})).To(BeFalse())
    84  		})
    85  	})
    86  
    87  	Describe("requirements are satisfied", func() {
    88  		It("list service keys successfully", func() {
    89  			serviceKeyRepo.ListServiceKeysMethod.ServiceKeys = []models.ServiceKey{
    90  				{
    91  					Fields: models.ServiceKeyFields{
    92  						Name: "fake-service-key-1",
    93  					},
    94  				},
    95  				{
    96  					Fields: models.ServiceKeyFields{
    97  						Name: "fake-service-key-2",
    98  					},
    99  				},
   100  			}
   101  			callListServiceKeys([]string{"fake-service-instance"})
   102  			Expect(ui.Outputs()).To(ContainSubstrings(
   103  				[]string{"Getting keys for service instance", "fake-service-instance", "as", "my-user"},
   104  				[]string{"name"},
   105  				[]string{"fake-service-key-1"},
   106  				[]string{"fake-service-key-2"},
   107  			))
   108  			Expect(ui.Outputs()[1]).To(BeEmpty())
   109  			Expect(serviceKeyRepo.ListServiceKeysMethod.InstanceGUID).To(Equal("fake-instance-guid"))
   110  		})
   111  
   112  		It("does not list service keys when none are returned", func() {
   113  			callListServiceKeys([]string{"fake-service-instance"})
   114  			Expect(ui.Outputs()).To(ContainSubstrings(
   115  				[]string{"Getting keys for service instance", "fake-service-instance", "as", "my-user"},
   116  				[]string{"No service key for service instance", "fake-service-instance"},
   117  			))
   118  		})
   119  	})
   120  })