github.com/orange-cloudfoundry/cli@v7.1.0+incompatible/command/v7/set_org_role_command_test.go (about) 1 package v7_test 2 3 import ( 4 "code.cloudfoundry.org/cli/actor/v7action" 5 "code.cloudfoundry.org/cli/api/cloudcontroller/ccerror" 6 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/constant" 7 "code.cloudfoundry.org/cli/cf/errors" 8 "code.cloudfoundry.org/cli/command/flag" 9 "code.cloudfoundry.org/cli/command/translatableerror" 10 "code.cloudfoundry.org/cli/command/v7/v7fakes" 11 "code.cloudfoundry.org/cli/resources" 12 "code.cloudfoundry.org/cli/util/configv3" 13 14 "code.cloudfoundry.org/cli/command/commandfakes" 15 . "code.cloudfoundry.org/cli/command/v7" 16 "code.cloudfoundry.org/cli/util/ui" 17 . "github.com/onsi/ginkgo" 18 . "github.com/onsi/gomega" 19 . "github.com/onsi/gomega/gbytes" 20 ) 21 22 var _ = Describe("set-org-role Command", func() { 23 var ( 24 cmd SetOrgRoleCommand 25 testUI *ui.UI 26 fakeConfig *commandfakes.FakeConfig 27 fakeSharedActor *commandfakes.FakeSharedActor 28 fakeActor *v7fakes.FakeActor 29 binaryName string 30 executeErr error 31 input *Buffer 32 ) 33 34 BeforeEach(func() { 35 input = NewBuffer() 36 testUI = ui.NewTestUI(input, NewBuffer(), NewBuffer()) 37 fakeConfig = new(commandfakes.FakeConfig) 38 fakeSharedActor = new(commandfakes.FakeSharedActor) 39 fakeActor = new(v7fakes.FakeActor) 40 41 cmd = SetOrgRoleCommand{ 42 BaseCommand: BaseCommand{ 43 UI: testUI, 44 Config: fakeConfig, 45 SharedActor: fakeSharedActor, 46 Actor: fakeActor, 47 }, 48 } 49 50 binaryName = "faceman" 51 fakeConfig.BinaryNameReturns(binaryName) 52 }) 53 54 JustBeforeEach(func() { 55 executeErr = cmd.Execute(nil) 56 }) 57 58 BeforeEach(func() { 59 fakeConfig.CurrentUserReturns(configv3.User{Name: "current-user"}, nil) 60 61 fakeActor.GetOrganizationByNameReturns( 62 resources.Organization{GUID: "some-org-guid", Name: "some-org-name"}, 63 v7action.Warnings{"get-org-warning"}, 64 nil, 65 ) 66 67 fakeActor.GetUserReturns( 68 resources.User{GUID: "target-user-guid", Username: "target-user"}, 69 nil, 70 ) 71 }) 72 73 When("neither origin nor client flag is provided", func() { 74 BeforeEach(func() { 75 cmd.Args.Organization = "some-org-name" 76 cmd.Args.Role = flag.OrgRole{Role: "OrgAuditor"} 77 cmd.Args.Username = "target-user-name" 78 }) 79 80 It("creates the org role", func() { 81 Expect(fakeActor.CreateOrgRoleCallCount()).To(Equal(1)) 82 givenRoleType, givenOrgGUID, givenUserName, givenOrigin, givenIsClient := fakeActor.CreateOrgRoleArgsForCall(0) 83 Expect(givenRoleType).To(Equal(constant.OrgAuditorRole)) 84 Expect(givenOrgGUID).To(Equal("some-org-guid")) 85 Expect(givenUserName).To(Equal("target-user-name")) 86 Expect(givenOrigin).To(Equal("")) 87 Expect(givenIsClient).To(BeFalse()) 88 }) 89 90 It("displays flavor text and returns without error", func() { 91 Expect(testUI.Out).To(Say("Assigning role OrgAuditor to user target-user-name in org some-org-name as current-user...")) 92 Expect(testUI.Out).To(Say("OK")) 93 Expect(executeErr).NotTo(HaveOccurred()) 94 }) 95 }) 96 97 When("origin flag is provided", func() { 98 BeforeEach(func() { 99 cmd.Args.Organization = "some-org-name" 100 cmd.Args.Role = flag.OrgRole{Role: "OrgAuditor"} 101 cmd.Args.Username = "target-user-name" 102 cmd.Origin = "ldap" 103 }) 104 105 It("creates the org role by username", func() { 106 Expect(fakeActor.CreateOrgRoleCallCount()).To(Equal(1)) 107 givenRoleType, givenOrgGUID, givenUserName, givenOrigin, givenIsClient := fakeActor.CreateOrgRoleArgsForCall(0) 108 Expect(givenRoleType).To(Equal(constant.OrgAuditorRole)) 109 Expect(givenOrgGUID).To(Equal("some-org-guid")) 110 Expect(givenUserName).To(Equal("target-user-name")) 111 Expect(givenOrigin).To(Equal("ldap")) 112 Expect(givenIsClient).To(BeFalse()) 113 }) 114 115 It("displays flavor text and returns without error", func() { 116 Expect(testUI.Out).To(Say("Assigning role OrgAuditor to user target-user-name in org some-org-name as current-user...")) 117 Expect(testUI.Out).To(Say("OK")) 118 Expect(executeErr).NotTo(HaveOccurred()) 119 }) 120 }) 121 122 When("client flag is provided", func() { 123 BeforeEach(func() { 124 cmd.Args.Organization = "some-org-name" 125 cmd.Args.Role = flag.OrgRole{Role: "OrgAuditor"} 126 cmd.Args.Username = "target-user-name" 127 cmd.IsClient = true 128 }) 129 130 It("does not try to get the user", func() { 131 Expect(fakeActor.GetUserCallCount()).To(Equal(0)) 132 }) 133 134 It("creates the org role correctly", func() { 135 Expect(fakeActor.CreateOrgRoleCallCount()).To(Equal(1)) 136 givenRoleType, givenOrgGUID, givenUserGUID, givenOrigin, givenIsClient := fakeActor.CreateOrgRoleArgsForCall(0) 137 Expect(givenRoleType).To(Equal(constant.OrgAuditorRole)) 138 Expect(givenOrgGUID).To(Equal("some-org-guid")) 139 Expect(givenUserGUID).To(Equal("target-user-name")) 140 Expect(givenOrigin).To(Equal("")) 141 Expect(givenIsClient).To(BeTrue()) 142 }) 143 144 It("displays flavor text and returns without error", func() { 145 Expect(testUI.Out).To(Say("Assigning role OrgAuditor to user target-user-name in org some-org-name as current-user...")) 146 Expect(testUI.Out).To(Say("OK")) 147 Expect(executeErr).NotTo(HaveOccurred()) 148 }) 149 }) 150 151 When("both client and origin flags are provided", func() { 152 BeforeEach(func() { 153 cmd.Args.Organization = "some-org-name" 154 cmd.Args.Role = flag.OrgRole{Role: "OrgAuditor"} 155 cmd.Args.Username = "target-user-name" 156 cmd.Origin = "ldap" 157 cmd.IsClient = true 158 }) 159 160 It("returns an error", func() { 161 Expect(executeErr).To(MatchError(translatableerror.ArgumentCombinationError{ 162 Args: []string{"--client", "--origin"}, 163 })) 164 }) 165 }) 166 167 When("the role already exists", func() { 168 BeforeEach(func() { 169 cmd.Args.Organization = "some-org-name" 170 cmd.Args.Role = flag.OrgRole{Role: "OrgAuditor"} 171 cmd.Args.Username = "target-user-name" 172 173 fakeActor.CreateOrgRoleReturns( 174 v7action.Warnings{"create-role-warning"}, 175 ccerror.RoleAlreadyExistsError{}, 176 ) 177 }) 178 179 It("displays warnings and returns without error", func() { 180 Expect(testUI.Err).To(Say("create-role-warning")) 181 Expect(testUI.Err).To(Say("User 'target-user-name' already has role 'OrgAuditor' in org 'some-org-name'.")) 182 Expect(testUI.Out).To(Say("OK")) 183 Expect(executeErr).NotTo(HaveOccurred()) 184 }) 185 }) 186 187 When("when the role argument is invalid", func() { 188 BeforeEach(func() { 189 cmd.Args.Role = flag.OrgRole{Role: "MiddleManager"} 190 }) 191 192 It("returns an error", func() { 193 Expect(executeErr).To(MatchError("Invalid role type.")) 194 }) 195 }) 196 197 When("getting the org fails", func() { 198 BeforeEach(func() { 199 cmd.Args.Role = flag.OrgRole{Role: "OrgAuditor"} 200 201 fakeActor.GetOrganizationByNameReturns( 202 resources.Organization{}, 203 v7action.Warnings{"get-org-warning"}, 204 errors.New("get-org-error"), 205 ) 206 }) 207 208 It("displays warnings and returns an error", func() { 209 Expect(testUI.Err).To(Say("get-org-warning")) 210 Expect(executeErr).To(MatchError("get-org-error")) 211 }) 212 }) 213 214 When("creating the role fails", func() { 215 BeforeEach(func() { 216 cmd.Args.Organization = "some-org-name" 217 cmd.Args.Role = flag.OrgRole{Role: "OrgAuditor"} 218 cmd.Args.Username = "target-user-name" 219 220 fakeActor.CreateOrgRoleReturns( 221 v7action.Warnings{"create-role-warning"}, 222 errors.New("create-role-error"), 223 ) 224 }) 225 226 It("displays warnings and returns without error", func() { 227 Expect(testUI.Err).To(Say("create-role-warning")) 228 Expect(executeErr).To(MatchError("create-role-error")) 229 }) 230 }) 231 })