github.com/LukasHeimann/cloudfoundrycli/v8@v8.4.4/command/v7/share_service_command_test.go (about) 1 package v7_test 2 3 import ( 4 "errors" 5 6 "github.com/LukasHeimann/cloudfoundrycli/v8/util/configv3" 7 8 "github.com/LukasHeimann/cloudfoundrycli/v8/command/flag" 9 10 "github.com/LukasHeimann/cloudfoundrycli/v8/types" 11 12 "github.com/LukasHeimann/cloudfoundrycli/v8/actor/v7action" 13 14 "github.com/LukasHeimann/cloudfoundrycli/v8/command/commandfakes" 15 . "github.com/LukasHeimann/cloudfoundrycli/v8/command/v7" 16 "github.com/LukasHeimann/cloudfoundrycli/v8/command/v7/v7fakes" 17 "github.com/LukasHeimann/cloudfoundrycli/v8/util/ui" 18 . "github.com/onsi/ginkgo" 19 . "github.com/onsi/gomega" 20 . "github.com/onsi/gomega/gbytes" 21 ) 22 23 var _ = Describe("share-service command", func() { 24 var ( 25 cmd ShareServiceCommand 26 testUI *ui.UI 27 fakeConfig *commandfakes.FakeConfig 28 fakeSharedActor *commandfakes.FakeSharedActor 29 fakeActor *v7fakes.FakeActor 30 executeErr error 31 ) 32 33 BeforeEach(func() { 34 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 35 fakeConfig = new(commandfakes.FakeConfig) 36 fakeSharedActor = new(commandfakes.FakeSharedActor) 37 fakeActor = new(v7fakes.FakeActor) 38 39 cmd = ShareServiceCommand{ 40 BaseCommand: BaseCommand{ 41 UI: testUI, 42 Config: fakeConfig, 43 SharedActor: fakeSharedActor, 44 Actor: fakeActor, 45 }, 46 } 47 }) 48 49 JustBeforeEach(func() { 50 executeErr = cmd.Execute(nil) 51 }) 52 53 It("checks the user is logged in, and targeting an org and space", func() { 54 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 55 orgChecked, spaceChecked := fakeSharedActor.CheckTargetArgsForCall(0) 56 Expect(orgChecked).To(BeTrue()) 57 Expect(spaceChecked).To(BeTrue()) 58 }) 59 60 Context("user not targeting space", func() { 61 BeforeEach(func() { 62 fakeSharedActor.CheckTargetReturns(errors.New("space not targeted")) 63 }) 64 65 It("fails the command", func() { 66 Expect(executeErr).To(Not(BeNil())) 67 Expect(executeErr.Error()).To(ContainSubstring("space not targeted")) 68 }) 69 }) 70 71 Context("user is targeting a space and org", func() { 72 var ( 73 expectedServiceInstanceName = "fake-service-instance-name" 74 expectedSpaceName = "fake-space-name" 75 expectedTargetedSpaceGuid = "fake-space-guid" 76 expectedTargetedOrgName = "fake-org-name" 77 expectedTargetedOrgGuid = "fake-org-guid" 78 expectedUser = "fake-username" 79 ) 80 81 BeforeEach(func() { 82 cmd.RequiredArgs.ServiceInstance = flag.TrimmedString(expectedServiceInstanceName) 83 cmd.SpaceName = expectedSpaceName 84 85 fakeSharedActor.CheckTargetReturns(nil) 86 fakeConfig.TargetedSpaceReturns(configv3.Space{GUID: expectedTargetedSpaceGuid}) 87 fakeConfig.TargetedOrganizationReturns(configv3.Organization{GUID: expectedTargetedOrgGuid, Name: expectedTargetedOrgName}) 88 fakeActor.GetCurrentUserReturns(configv3.User{Name: expectedUser}, nil) 89 }) 90 91 When("the share completes successfully", func() { 92 BeforeEach(func() { 93 fakeActor.ShareServiceInstanceToSpaceAndOrgReturns(v7action.Warnings{"warning one", "warning two"}, nil) 94 }) 95 96 It("returns an OK message", func() { 97 Expect(executeErr).To(BeNil()) 98 99 Expect(testUI.Out).To( 100 Say(`Sharing service instance %s into org %s / space %s as %s`, 101 expectedServiceInstanceName, 102 expectedTargetedOrgName, 103 expectedSpaceName, 104 expectedUser)) 105 Expect(testUI.Out).To(Say(`OK`)) 106 Expect(testUI.Err).To(SatisfyAll( 107 Say("warning one"), 108 Say("warning two"), 109 )) 110 }) 111 }) 112 113 It("calls the actor to share in specified space and targeted org", func() { 114 Expect(fakeActor.ShareServiceInstanceToSpaceAndOrgCallCount()).To(Equal(1)) 115 116 actualServiceInstance, actualTargetedSpace, actualTargetedOrg, actualSharingParams := fakeActor.ShareServiceInstanceToSpaceAndOrgArgsForCall(0) 117 Expect(actualServiceInstance).To(Equal(expectedServiceInstanceName)) 118 Expect(actualTargetedSpace).To(Equal(expectedTargetedSpaceGuid)) 119 Expect(actualTargetedOrg).To(Equal(expectedTargetedOrgGuid)) 120 Expect(actualSharingParams).To(Equal(v7action.ServiceInstanceSharingParams{ 121 SpaceName: expectedSpaceName, 122 OrgName: types.OptionalString{}, 123 })) 124 }) 125 126 When("organization flag is specified", func() { 127 var expectedSpecifiedOrgName = "fake-org-name" 128 129 BeforeEach(func() { 130 setFlag(&cmd, "-o", flag.OptionalString{IsSet: true, Value: expectedSpecifiedOrgName}) 131 }) 132 133 It("calls the actor to share in specified space and org", func() { 134 Expect(fakeActor.ShareServiceInstanceToSpaceAndOrgCallCount()).To(Equal(1)) 135 136 _, _, _, actualSharingParams := fakeActor.ShareServiceInstanceToSpaceAndOrgArgsForCall(0) 137 Expect(actualSharingParams).To(Equal(v7action.ServiceInstanceSharingParams{ 138 SpaceName: expectedSpaceName, 139 OrgName: types.NewOptionalString(expectedSpecifiedOrgName), 140 })) 141 }) 142 }) 143 144 When("the actor errors", func() { 145 BeforeEach(func() { 146 fakeSharedActor.CheckTargetReturns(nil) 147 fakeActor.ShareServiceInstanceToSpaceAndOrgReturns(v7action.Warnings{}, errors.New("test error")) 148 }) 149 150 It("fails with an error", func() { 151 Expect(executeErr).To(Not(BeNil())) 152 Expect(executeErr.Error()).To(ContainSubstring("test error")) 153 }) 154 }) 155 }) 156 157 Context("pre-share errors", func() { 158 When("checking the target returns an error", func() { 159 BeforeEach(func() { 160 fakeSharedActor.CheckTargetReturns(errors.New("explode")) 161 }) 162 163 It("returns the error", func() { 164 Expect(executeErr).To(MatchError("explode")) 165 }) 166 }) 167 168 When("getting the username fails", func() { 169 BeforeEach(func() { 170 fakeActor.GetCurrentUserReturns(configv3.User{}, errors.New("boom")) 171 }) 172 173 It("returns the error", func() { 174 Expect(executeErr).To(MatchError("boom")) 175 }) 176 }) 177 }) 178 })