github.com/loafoe/cli@v7.1.0+incompatible/command/v7/update_security_group_command_test.go (about) 1 package v7_test 2 3 import ( 4 "encoding/json" 5 6 "code.cloudfoundry.org/cli/actor/actionerror" 7 "code.cloudfoundry.org/cli/actor/v7action" 8 "code.cloudfoundry.org/cli/command/commandfakes" 9 "code.cloudfoundry.org/cli/command/flag" 10 v7 "code.cloudfoundry.org/cli/command/v7" 11 "code.cloudfoundry.org/cli/command/v7/v7fakes" 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("update-security-group Command", func() { 20 var ( 21 cmd v7.UpdateSecurityGroupCommand 22 testUI *ui.UI 23 fakeConfig *commandfakes.FakeConfig 24 fakeSharedActor *commandfakes.FakeSharedActor 25 fakeActor *v7fakes.FakeActor 26 27 binaryName string 28 executeErr error 29 securityGroupName string 30 securityGroupFilePath flag.PathWithExistenceCheck 31 ) 32 33 BeforeEach(func() { 34 securityGroupName = "some-name" 35 securityGroupFilePath = "some-path" 36 binaryName = "faceman" 37 fakeConfig = new(commandfakes.FakeConfig) 38 fakeSharedActor = new(commandfakes.FakeSharedActor) 39 fakeActor = new(v7fakes.FakeActor) 40 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 41 42 cmd = v7.UpdateSecurityGroupCommand{ 43 BaseCommand: v7.BaseCommand{ 44 UI: testUI, 45 Config: fakeConfig, 46 SharedActor: fakeSharedActor, 47 Actor: fakeActor, 48 }, 49 RequiredArgs: flag.SecurityGroupArgs{ 50 SecurityGroup: securityGroupName, 51 PathToJSONRules: securityGroupFilePath, 52 }, 53 } 54 fakeConfig.HasTargetedOrganizationReturns(false) 55 fakeConfig.HasTargetedSpaceReturns(false) 56 fakeConfig.CurrentUserReturns(configv3.User{Name: "steve"}, nil) 57 }) 58 59 JustBeforeEach(func() { 60 executeErr = cmd.Execute(nil) 61 }) 62 63 When("checking target fails", func() { 64 BeforeEach(func() { 65 fakeSharedActor.CheckTargetReturns(actionerror.NotLoggedInError{BinaryName: binaryName}) 66 }) 67 68 It("returns an error", func() { 69 Expect(executeErr).To(MatchError(actionerror.NotLoggedInError{BinaryName: binaryName})) 70 71 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 72 checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0) 73 Expect(checkTargetedOrg).To(BeFalse()) 74 Expect(checkTargetedSpace).To(BeFalse()) 75 }) 76 }) 77 78 When("updating the security group", func() { 79 BeforeEach(func() { 80 fakeActor.UpdateSecurityGroupReturns( 81 v7action.Warnings{"update-security-group-warning"}, 82 nil) 83 }) 84 85 It("succeeds", func() { 86 Expect(executeErr).ToNot(HaveOccurred()) 87 Expect(testUI.Err).To(Say("update-security-group-warning")) 88 Expect(fakeActor.UpdateSecurityGroupCallCount()).To(Equal(1)) 89 }) 90 }) 91 92 When("the provided JSON is invalid", func() { 93 BeforeEach(func() { 94 fakeActor.UpdateSecurityGroupReturns( 95 v7action.Warnings{"update-security-group-warning"}, 96 &json.SyntaxError{}) 97 }) 98 99 It("returns a custom error and provides an example", func() { 100 Expect(executeErr).To(HaveOccurred()) 101 Expect(executeErr).To(Equal(actionerror.SecurityGroupJsonSyntaxError{Path: "some-path"})) 102 Expect(testUI.Err).To(Say("update-security-group-warning")) 103 }) 104 }) 105 106 When("something goes wrong updating the security group", func() { 107 BeforeEach(func() { 108 fakeActor.UpdateSecurityGroupReturns( 109 v7action.Warnings{"update-security-group-warning"}, 110 actionerror.SecurityGroupNotFoundError{}, 111 ) 112 }) 113 114 It("returns a helpful error", func() { 115 Expect(executeErr).To(HaveOccurred()) 116 Expect(executeErr).To(Equal(actionerror.SecurityGroupNotFoundError{})) 117 Expect(testUI.Err).To(Say("update-security-group-warning")) 118 }) 119 }) 120 })