github.com/LukasHeimann/cloudfoundrycli/v8@v8.4.4/command/v7/unbind_security_group_test.go (about) 1 package v7_test 2 3 import ( 4 "errors" 5 6 "github.com/LukasHeimann/cloudfoundrycli/v8/actor/actionerror" 7 "github.com/LukasHeimann/cloudfoundrycli/v8/actor/v7action" 8 "github.com/LukasHeimann/cloudfoundrycli/v8/api/cloudcontroller/ccv3/constant" 9 "github.com/LukasHeimann/cloudfoundrycli/v8/command/commandfakes" 10 . "github.com/LukasHeimann/cloudfoundrycli/v8/command/v7" 11 "github.com/LukasHeimann/cloudfoundrycli/v8/command/v7/v7fakes" 12 "github.com/LukasHeimann/cloudfoundrycli/v8/util/configv3" 13 "github.com/LukasHeimann/cloudfoundrycli/v8/util/ui" 14 . "github.com/onsi/ginkgo" 15 . "github.com/onsi/gomega" 16 . "github.com/onsi/gomega/gbytes" 17 ) 18 19 var _ = Describe("unbind-security-group Command", func() { 20 var ( 21 cmd UnbindSecurityGroupCommand 22 testUI *ui.UI 23 fakeConfig *commandfakes.FakeConfig 24 fakeSharedActor *commandfakes.FakeSharedActor 25 fakeActor *v7fakes.FakeActor 26 binaryName string 27 executeErr error 28 expectedErr error 29 ) 30 31 BeforeEach(func() { 32 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 33 fakeConfig = new(commandfakes.FakeConfig) 34 fakeSharedActor = new(commandfakes.FakeSharedActor) 35 fakeActor = new(v7fakes.FakeActor) 36 37 cmd = UnbindSecurityGroupCommand{ 38 BaseCommand: BaseCommand{ 39 UI: testUI, 40 Config: fakeConfig, 41 SharedActor: fakeSharedActor, 42 Actor: fakeActor, 43 }, 44 } 45 46 cmd.RequiredArgs.SecurityGroupName = "some-security-group" 47 cmd.RequiredArgs.OrganizationName = "some-org" 48 cmd.RequiredArgs.SpaceName = "some-space" 49 cmd.Lifecycle = "some-lifecycle" 50 51 binaryName = "faceman" 52 fakeConfig.BinaryNameReturns(binaryName) 53 fakeConfig.ExperimentalReturns(true) 54 55 fakeActor.GetCurrentUserReturns( 56 configv3.User{Name: "some-user"}, 57 nil) 58 fakeActor.UnbindSecurityGroupReturns( 59 v7action.Warnings{"unbind warning"}, 60 nil) 61 fakeSharedActor.CheckTargetReturns(nil) 62 63 }) 64 65 JustBeforeEach(func() { 66 executeErr = cmd.Execute(nil) 67 }) 68 69 When("checking target fails", func() { 70 BeforeEach(func() { 71 fakeSharedActor.CheckTargetReturns(actionerror.NotLoggedInError{BinaryName: binaryName}) 72 }) 73 74 It("returns an error", func() { 75 Expect(executeErr).To(MatchError(actionerror.NotLoggedInError{BinaryName: "faceman"})) 76 77 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 78 checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0) 79 Expect(checkTargetedOrg).To(BeFalse()) 80 Expect(checkTargetedSpace).To(BeFalse()) 81 }) 82 }) 83 84 When("getting the current user fails", func() { 85 BeforeEach(func() { 86 expectedErr = errors.New("getting user failed") 87 fakeActor.GetCurrentUserReturns(configv3.User{}, expectedErr) 88 }) 89 90 It("returns an error", func() { 91 Expect(executeErr).To(MatchError(expectedErr)) 92 }) 93 }) 94 95 It("indicates that it will unbind the security group", func() { 96 Expect(testUI.Out).To(Say(`Unbinding some-lifecycle security group %s from org %s / space %s as %s\.\.\.`, "some-security-group", "some-org", "some-space", "some-user")) 97 }) 98 99 It("displays the warnings from unbinding the security group", func() { 100 Expect(testUI.Err).To(Say("unbind warning")) 101 }) 102 103 When("unbinding the security group fails", func() { 104 BeforeEach(func() { 105 fakeActor.UnbindSecurityGroupReturns( 106 v7action.Warnings{"unbind warning"}, 107 errors.New("unbind-error"), 108 ) 109 }) 110 When("security group is unbound", func() { 111 BeforeEach(func() { 112 fakeActor.UnbindSecurityGroupReturns( 113 v7action.Warnings{"unbind warning"}, 114 actionerror.SecurityGroupNotBoundToSpaceError{ 115 Name: "some-security-group", 116 Space: "some-space", 117 Lifecycle: constant.SecurityGroupLifecycle("some-lifecycle"), 118 }) 119 }) 120 It("returns the security group not bound error as a warning and succeeds", func() { 121 Expect(fakeActor.UnbindSecurityGroupCallCount()).To(Equal(1)) 122 securityGroupName, orgName, spaceName, lifecycle := fakeActor.UnbindSecurityGroupArgsForCall(0) 123 Expect(securityGroupName).To(Equal("some-security-group")) 124 Expect(orgName).To(Equal("some-org")) 125 Expect(spaceName).To(Equal("some-space")) 126 Expect(lifecycle).To(Equal(constant.SecurityGroupLifecycle("some-lifecycle"))) 127 Expect(testUI.Err).To(Say("Security group some-security-group not bound to space some-space for lifecycle phase 'some-lifecycle'.")) 128 Expect(testUI.Out).To(Say("OK\n\n")) 129 Expect(testUI.Out).To(Say(`TIP: If Dynamic ASG's are enabled, changes will automatically apply for running and staging applications. Otherwise, changes will require an app restart \(for running\) or restage \(for staging\) to apply to existing applications\.`)) 130 Expect(executeErr).NotTo(HaveOccurred()) 131 }) 132 }) 133 It("returns the error", func() { 134 Expect(fakeActor.UnbindSecurityGroupCallCount()).To(Equal(1)) 135 securityGroupName, orgName, spaceName, lifecycle := fakeActor.UnbindSecurityGroupArgsForCall(0) 136 Expect(securityGroupName).To(Equal("some-security-group")) 137 Expect(orgName).To(Equal("some-org")) 138 Expect(spaceName).To(Equal("some-space")) 139 Expect(lifecycle).To(Equal(constant.SecurityGroupLifecycle("some-lifecycle"))) 140 Expect(executeErr).To(MatchError("unbind-error")) 141 }) 142 }) 143 144 It("indicates it successfully unbound the security group", func() { 145 Expect(testUI.Out).To(Say("OK\n\n")) 146 Expect(testUI.Out).To(Say(`TIP: If Dynamic ASG's are enabled, changes will automatically apply for running and staging applications. Otherwise, changes will require an app restart \(for running\) or restage \(for staging\) to apply to existing applications\.`)) 147 }) 148 149 })