github.com/LukasHeimann/cloudfoundrycli/v8@v8.4.4/command/v7/services_command_test.go (about)

     1  package v7_test
     2  
     3  import (
     4  	"github.com/LukasHeimann/cloudfoundrycli/v8/actor/v7action"
     5  	"github.com/LukasHeimann/cloudfoundrycli/v8/cf/errors"
     6  	"github.com/LukasHeimann/cloudfoundrycli/v8/command/commandfakes"
     7  	. "github.com/LukasHeimann/cloudfoundrycli/v8/command/v7"
     8  	"github.com/LukasHeimann/cloudfoundrycli/v8/command/v7/v7fakes"
     9  	"github.com/LukasHeimann/cloudfoundrycli/v8/resources"
    10  	"github.com/LukasHeimann/cloudfoundrycli/v8/types"
    11  	"github.com/LukasHeimann/cloudfoundrycli/v8/util/configv3"
    12  	"github.com/LukasHeimann/cloudfoundrycli/v8/util/ui"
    13  	. "github.com/onsi/ginkgo"
    14  	. "github.com/onsi/gomega"
    15  	. "github.com/onsi/gomega/gbytes"
    16  )
    17  
    18  var _ = Describe("services command", func() {
    19  	const (
    20  		org       = "fake-org"
    21  		space     = "fake-space"
    22  		spaceGUID = "fake-space-guid"
    23  		username  = "fake-user"
    24  	)
    25  
    26  	var (
    27  		cmd             ServicesCommand
    28  		testUI          *ui.UI
    29  		fakeConfig      *commandfakes.FakeConfig
    30  		fakeSharedActor *commandfakes.FakeSharedActor
    31  		fakeActor       *v7fakes.FakeActor
    32  		executeErr      error
    33  	)
    34  
    35  	BeforeEach(func() {
    36  		testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer())
    37  		fakeConfig = new(commandfakes.FakeConfig)
    38  		fakeSharedActor = new(commandfakes.FakeSharedActor)
    39  		fakeActor = new(v7fakes.FakeActor)
    40  
    41  		cmd = ServicesCommand{
    42  			BaseCommand: BaseCommand{
    43  				UI:          testUI,
    44  				Config:      fakeConfig,
    45  				SharedActor: fakeSharedActor,
    46  				Actor:       fakeActor,
    47  			},
    48  		}
    49  
    50  		fakeConfig.TargetedSpaceReturns(configv3.Space{
    51  			GUID: spaceGUID,
    52  			Name: space,
    53  		})
    54  
    55  		fakeConfig.TargetedOrganizationReturns(configv3.Organization{
    56  			Name: org,
    57  		})
    58  
    59  		fakeActor.GetCurrentUserReturns(configv3.User{Name: username}, nil)
    60  
    61  		fakeActor.GetServiceInstancesForSpaceReturns(
    62  			[]v7action.ServiceInstance{
    63  				{
    64  					Name:                "msi1",
    65  					Type:                resources.ManagedServiceInstance,
    66  					ServicePlanName:     "fake-plan-1",
    67  					ServiceOfferingName: "fake-offering-1",
    68  					ServiceBrokerName:   "fake-broker-1",
    69  					UpgradeAvailable:    types.NewOptionalBoolean(true),
    70  					BoundApps:           []string{"foo", "bar"},
    71  					LastOperation:       "create succeeded",
    72  				},
    73  				{
    74  					Name:                "msi2",
    75  					Type:                resources.ManagedServiceInstance,
    76  					ServicePlanName:     "fake-plan-2",
    77  					ServiceOfferingName: "fake-offering-2",
    78  					ServiceBrokerName:   "fake-broker-2",
    79  					UpgradeAvailable:    types.NewOptionalBoolean(false),
    80  					BoundApps:           []string{"baz", "quz"},
    81  					LastOperation:       "delete in progress",
    82  				},
    83  				{
    84  					Name:                "msi3",
    85  					Type:                resources.ManagedServiceInstance,
    86  					ServicePlanName:     "fake-plan-3",
    87  					ServiceOfferingName: "fake-offering-3",
    88  					ServiceBrokerName:   "fake-broker-2",
    89  					BoundApps:           []string{},
    90  					LastOperation:       "update failed",
    91  				},
    92  				{
    93  					Name:      "upsi1",
    94  					Type:      resources.UserProvidedServiceInstance,
    95  					BoundApps: []string{"foo", "bar"},
    96  				},
    97  				{
    98  					Name:      "upsi2",
    99  					Type:      resources.UserProvidedServiceInstance,
   100  					BoundApps: []string{"baz", "qux"},
   101  				},
   102  				{
   103  					Name:      "upsi3",
   104  					Type:      resources.UserProvidedServiceInstance,
   105  					BoundApps: []string{},
   106  				},
   107  			},
   108  			v7action.Warnings{"something silly"},
   109  			nil,
   110  		)
   111  	})
   112  
   113  	JustBeforeEach(func() {
   114  		executeErr = cmd.Execute(nil)
   115  	})
   116  
   117  	It("checks that the user is logged in and a space is targeted", func() {
   118  		Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1))
   119  		actualSpace, actualOrg := fakeSharedActor.CheckTargetArgsForCall(0)
   120  		Expect(actualSpace).To(BeTrue())
   121  		Expect(actualOrg).To(BeTrue())
   122  	})
   123  
   124  	It("prints an introductory message", func() {
   125  		Expect(testUI.Out).To(Say(`Getting service instances in org %s / space %s as %s...\n\n`, org, space, username))
   126  	})
   127  
   128  	It("asks the actor to get the service instances", func() {
   129  		Expect(fakeActor.GetServiceInstancesForSpaceCallCount()).To(Equal(1))
   130  		Expect(fakeActor.GetServiceInstancesForSpaceArgsForCall(0)).To(Equal(spaceGUID))
   131  	})
   132  
   133  	It("prints a table with the services, and warning", func() {
   134  		Expect(executeErr).NotTo(HaveOccurred())
   135  		Expect(testUI.Err).To(Say("something silly"))
   136  		Expect(testUI.Out).To(SatisfyAll(
   137  			Say(`name\s+offering\s+plan\s+bound apps\s+last operation\s+broker\s+upgrade available\n`),
   138  			Say(`msi1\s+fake-offering-1\s+fake-plan-1\s+foo, bar\s+create succeeded\s+fake-broker-1\s+yes\n`),
   139  			Say(`msi2\s+fake-offering-2\s+fake-plan-2\s+baz, quz\s+delete in progress\s+fake-broker-2\s+no\n`),
   140  			Say(`msi3\s+fake-offering-3\s+fake-plan-3\s+update failed\s+fake-broker-2\s*\n`),
   141  			Say(`upsi1\s+user-provided\s+foo, bar\s*\n`),
   142  			Say(`upsi2\s+user-provided\s+baz, qux\s*\n`),
   143  			Say(`upsi3\s+user-provided\s*\n`),
   144  		))
   145  	})
   146  
   147  	When("omit apps is set", func() {
   148  		BeforeEach(func() {
   149  			cmd.OmitApps = true
   150  		})
   151  		It("doesn't print the bound apps table", func() {
   152  			Expect(executeErr).NotTo(HaveOccurred())
   153  			Expect(testUI.Err).To(Say("something silly"))
   154  			Expect(testUI.Out).To(SatisfyAll(
   155  				Say(`name\s+offering\s+plan\s+last operation\s+broker\s+upgrade available\n`),
   156  				Say(`msi1\s+fake-offering-1\s+fake-plan-1\s+create succeeded\s+fake-broker-1\s+yes\n`),
   157  				Say(`msi2\s+fake-offering-2\s+fake-plan-2\s+delete in progress\s+fake-broker-2\s+no\n`),
   158  				Say(`msi3\s+fake-offering-3\s+fake-plan-3\s+update failed\s+fake-broker-2\s*\n`),
   159  				Say(`upsi1\s+user-provided\s*\n`),
   160  				Say(`upsi2\s+user-provided\s*\n`),
   161  				Say(`upsi3\s+user-provided\s*\n`),
   162  			))
   163  		})
   164  	})
   165  
   166  	When("there are no service instances", func() {
   167  		BeforeEach(func() {
   168  			fakeActor.GetServiceInstancesForSpaceReturns(
   169  				[]v7action.ServiceInstance{},
   170  				v7action.Warnings{"foo warning"},
   171  				nil,
   172  			)
   173  		})
   174  
   175  		It("says that none were found", func() {
   176  			Expect(executeErr).NotTo(HaveOccurred())
   177  			Expect(testUI.Err).To(Say("foo warning"))
   178  			Expect(testUI.Out).To(Say(`No service instances found\.`))
   179  		})
   180  	})
   181  
   182  	When("checking target fails", func() {
   183  		BeforeEach(func() {
   184  			fakeSharedActor.CheckTargetReturns(errors.New("not logged in"))
   185  		})
   186  
   187  		It("fails", func() {
   188  			Expect(executeErr).To(MatchError("not logged in"))
   189  		})
   190  	})
   191  
   192  	When("getting the user fails", func() {
   193  		BeforeEach(func() {
   194  			fakeActor.GetCurrentUserReturns(configv3.User{}, errors.New("bang"))
   195  		})
   196  
   197  		It("fails", func() {
   198  			Expect(executeErr).To(MatchError("bang"))
   199  		})
   200  	})
   201  
   202  	When("getting the instances fails", func() {
   203  		BeforeEach(func() {
   204  			fakeActor.GetServiceInstancesForSpaceReturns(
   205  				[]v7action.ServiceInstance{},
   206  				v7action.Warnings{"a warning"},
   207  				errors.New("a bad thing happened"),
   208  			)
   209  		})
   210  
   211  		It("fails and prints warnings", func() {
   212  			Expect(testUI.Err).To(Say(`a warning\n`))
   213  			Expect(executeErr).To(MatchError("a bad thing happened"))
   214  		})
   215  	})
   216  })