github.com/nimakaviani/cli@v6.37.1-0.20180619223813-e734901a73fa+incompatible/command/v3/set_space_isolation_segment_command_test.go (about) 1 package v3_test 2 3 import ( 4 "code.cloudfoundry.org/cli/actor/actionerror" 5 "code.cloudfoundry.org/cli/actor/v2action" 6 "code.cloudfoundry.org/cli/actor/v3action" 7 "code.cloudfoundry.org/cli/api/cloudcontroller/ccversion" 8 "code.cloudfoundry.org/cli/command/commandfakes" 9 "code.cloudfoundry.org/cli/command/translatableerror" 10 "code.cloudfoundry.org/cli/command/v3" 11 "code.cloudfoundry.org/cli/command/v3/v3fakes" 12 "code.cloudfoundry.org/cli/util/configv3" 13 "code.cloudfoundry.org/cli/util/ui" 14 . "github.com/onsi/ginkgo" 15 . "github.com/onsi/gomega" 16 . "github.com/onsi/gomega/gbytes" 17 ) 18 19 var _ = Describe("set-space-isolation-segment Command", func() { 20 var ( 21 cmd v3.SetSpaceIsolationSegmentCommand 22 testUI *ui.UI 23 fakeConfig *commandfakes.FakeConfig 24 fakeSharedActor *commandfakes.FakeSharedActor 25 fakeActor *v3fakes.FakeSetSpaceIsolationSegmentActor 26 fakeActorV2 *v3fakes.FakeSetSpaceIsolationSegmentActorV2 27 binaryName string 28 executeErr error 29 isolationSegment string 30 space string 31 org string 32 ) 33 34 BeforeEach(func() { 35 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 36 fakeConfig = new(commandfakes.FakeConfig) 37 fakeSharedActor = new(commandfakes.FakeSharedActor) 38 fakeActor = new(v3fakes.FakeSetSpaceIsolationSegmentActor) 39 fakeActorV2 = new(v3fakes.FakeSetSpaceIsolationSegmentActorV2) 40 41 cmd = v3.SetSpaceIsolationSegmentCommand{ 42 UI: testUI, 43 Config: fakeConfig, 44 SharedActor: fakeSharedActor, 45 Actor: fakeActor, 46 ActorV2: fakeActorV2, 47 } 48 49 binaryName = "faceman" 50 fakeConfig.BinaryNameReturns(binaryName) 51 space = "some-space" 52 org = "some-org" 53 isolationSegment = "segment1" 54 55 fakeActor.CloudControllerAPIVersionReturns(ccversion.MinVersionIsolationSegmentV3) 56 }) 57 58 JustBeforeEach(func() { 59 executeErr = cmd.Execute(nil) 60 }) 61 62 Context("when the API version is below the minimum", func() { 63 BeforeEach(func() { 64 fakeActor.CloudControllerAPIVersionReturns("0.0.0") 65 }) 66 67 It("returns a MinimumAPIVersionNotMetError", func() { 68 Expect(executeErr).To(MatchError(translatableerror.MinimumAPIVersionNotMetError{ 69 CurrentVersion: "0.0.0", 70 MinimumVersion: ccversion.MinVersionIsolationSegmentV3, 71 })) 72 }) 73 }) 74 75 Context("when checking target fails", func() { 76 BeforeEach(func() { 77 fakeSharedActor.CheckTargetReturns(actionerror.NotLoggedInError{BinaryName: binaryName}) 78 }) 79 80 It("returns an error", func() { 81 Expect(executeErr).To(MatchError(actionerror.NotLoggedInError{BinaryName: binaryName})) 82 83 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 84 checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0) 85 Expect(checkTargetedOrg).To(BeTrue()) 86 Expect(checkTargetedSpace).To(BeFalse()) 87 }) 88 }) 89 90 Context("when the user is logged in", func() { 91 BeforeEach(func() { 92 fakeConfig.CurrentUserReturns(configv3.User{Name: "banana"}, nil) 93 fakeConfig.TargetedOrganizationReturns(configv3.Organization{ 94 Name: org, 95 GUID: "some-org-guid", 96 }) 97 98 cmd.RequiredArgs.SpaceName = space 99 cmd.RequiredArgs.IsolationSegmentName = isolationSegment 100 }) 101 102 Context("when the space lookup is unsuccessful", func() { 103 BeforeEach(func() { 104 fakeActorV2.GetSpaceByOrganizationAndNameReturns(v2action.Space{}, v2action.Warnings{"I am a warning", "I am also a warning"}, actionerror.SpaceNotFoundError{Name: space}) 105 }) 106 107 It("returns the warnings and error", func() { 108 Expect(executeErr).To(MatchError(actionerror.SpaceNotFoundError{Name: space})) 109 Expect(testUI.Err).To(Say("I am a warning")) 110 Expect(testUI.Err).To(Say("I am also a warning")) 111 }) 112 }) 113 114 Context("when the space lookup is successful", func() { 115 BeforeEach(func() { 116 fakeActorV2.GetSpaceByOrganizationAndNameReturns(v2action.Space{ 117 Name: space, 118 GUID: "some-space-guid", 119 }, v2action.Warnings{"I am a warning", "I am also a warning"}, nil) 120 }) 121 122 Context("when the entitlement is successful", func() { 123 BeforeEach(func() { 124 fakeActor.AssignIsolationSegmentToSpaceByNameAndSpaceReturns(v3action.Warnings{"entitlement-warning", "banana"}, nil) 125 }) 126 127 It("Displays the header and okay", func() { 128 Expect(executeErr).ToNot(HaveOccurred()) 129 130 Expect(testUI.Out).To(Say("Updating isolation segment of space %s in org %s as banana...", space, org)) 131 Expect(testUI.Out).To(Say("OK")) 132 133 Expect(testUI.Err).To(Say("I am a warning")) 134 Expect(testUI.Err).To(Say("I am also a warning")) 135 Expect(testUI.Err).To(Say("entitlement-warning")) 136 Expect(testUI.Err).To(Say("banana")) 137 138 Expect(testUI.Out).To(Say("In order to move running applications to this isolation segment, they must be restarted.")) 139 140 Expect(fakeActor.AssignIsolationSegmentToSpaceByNameAndSpaceCallCount()).To(Equal(1)) 141 isolationSegmentName, spaceGUID := fakeActor.AssignIsolationSegmentToSpaceByNameAndSpaceArgsForCall(0) 142 Expect(isolationSegmentName).To(Equal(isolationSegment)) 143 Expect(spaceGUID).To(Equal("some-space-guid")) 144 }) 145 }) 146 147 Context("when the entitlement errors", func() { 148 BeforeEach(func() { 149 fakeActor.AssignIsolationSegmentToSpaceByNameAndSpaceReturns(v3action.Warnings{"entitlement-warning", "banana"}, actionerror.IsolationSegmentNotFoundError{Name: "segment1"}) 150 }) 151 152 It("returns the warnings and error", func() { 153 Expect(testUI.Out).To(Say("Updating isolation segment of space %s in org %s as banana...", space, org)) 154 Expect(testUI.Err).To(Say("I am a warning")) 155 Expect(testUI.Err).To(Say("I am also a warning")) 156 Expect(testUI.Err).To(Say("entitlement-warning")) 157 Expect(testUI.Err).To(Say("banana")) 158 Expect(executeErr).To(MatchError(actionerror.IsolationSegmentNotFoundError{Name: "segment1"})) 159 }) 160 }) 161 }) 162 }) 163 })