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 })