github.com/liamawhite/cli-with-i18n@v6.32.1-0.20171122084555-dede0a5c3448+incompatible/command/v2/org_command_test.go (about) 1 package v2_test 2 3 import ( 4 "errors" 5 "time" 6 7 "github.com/liamawhite/cli-with-i18n/actor/sharedaction" 8 "github.com/liamawhite/cli-with-i18n/actor/v2action" 9 "github.com/liamawhite/cli-with-i18n/actor/v3action" 10 "github.com/liamawhite/cli-with-i18n/command/commandfakes" 11 "github.com/liamawhite/cli-with-i18n/command/translatableerror" 12 . "github.com/liamawhite/cli-with-i18n/command/v2" 13 "github.com/liamawhite/cli-with-i18n/command/v2/v2fakes" 14 "github.com/liamawhite/cli-with-i18n/util/configv3" 15 "github.com/liamawhite/cli-with-i18n/util/ui" 16 . "github.com/onsi/ginkgo" 17 . "github.com/onsi/gomega" 18 . "github.com/onsi/gomega/gbytes" 19 ) 20 21 var _ = Describe("org Command", func() { 22 var ( 23 cmd OrgCommand 24 testUI *ui.UI 25 fakeConfig *commandfakes.FakeConfig 26 fakeSharedActor *commandfakes.FakeSharedActor 27 fakeActor *v2fakes.FakeOrgActor 28 fakeActorV3 *v2fakes.FakeOrgActorV3 29 binaryName string 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(v2fakes.FakeOrgActor) 38 fakeActorV3 = new(v2fakes.FakeOrgActorV3) 39 40 cmd = OrgCommand{ 41 UI: testUI, 42 Config: fakeConfig, 43 SharedActor: fakeSharedActor, 44 Actor: fakeActor, 45 ActorV3: fakeActorV3, 46 } 47 48 binaryName = "faceman" 49 fakeConfig.BinaryNameReturns(binaryName) 50 cmd.RequiredArgs.Organization = "some-org" 51 fakeActorV3.CloudControllerAPIVersionReturns("3.12.0") 52 }) 53 54 JustBeforeEach(func() { 55 executeErr = cmd.Execute(nil) 56 }) 57 58 Context("when it's been six months from April 2017", func() { 59 It("should stop calling CloudControllerAPIVersion() in: org, space, target, create-isolation-segment, delete-isolation-segment, disable-org-isolation, enable-org-isolation, isolation-segments, set-space-isolation, run-task, tasks, terminate-task", func() { 60 Expect(time.Now()).Should(BeTemporally("<", time.Date(2017, 10, 7, 0, 0, 0, 0, new(time.Location)))) 61 }) 62 }) 63 64 Context("when checking the target fails", func() { 65 BeforeEach(func() { 66 fakeSharedActor.CheckTargetReturns( 67 sharedaction.NotLoggedInError{BinaryName: binaryName}) 68 }) 69 70 It("returns an error", func() { 71 Expect(executeErr).To(MatchError(translatableerror.NotLoggedInError{BinaryName: binaryName})) 72 73 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 74 config, targetedOrganizationRequired, targetedSpaceRequired := fakeSharedActor.CheckTargetArgsForCall(0) 75 Expect(config).To(Equal(fakeConfig)) 76 Expect(targetedOrganizationRequired).To(Equal(false)) 77 Expect(targetedSpaceRequired).To(Equal(false)) 78 }) 79 }) 80 81 Context("when the --guid flag is provided", func() { 82 BeforeEach(func() { 83 cmd.GUID = true 84 }) 85 86 Context("when no errors occur", func() { 87 BeforeEach(func() { 88 fakeActor.GetOrganizationByNameReturns( 89 v2action.Organization{GUID: "some-org-guid"}, 90 v2action.Warnings{"warning-1", "warning-2"}, 91 nil) 92 }) 93 94 It("displays the org guid and outputs all warnings", func() { 95 Expect(executeErr).ToNot(HaveOccurred()) 96 97 Expect(testUI.Out).To(Say("some-org-guid")) 98 Expect(testUI.Err).To(Say("warning-1")) 99 Expect(testUI.Err).To(Say("warning-2")) 100 101 Expect(fakeActor.GetOrganizationByNameCallCount()).To(Equal(1)) 102 orgName := fakeActor.GetOrganizationByNameArgsForCall(0) 103 Expect(orgName).To(Equal("some-org")) 104 }) 105 }) 106 107 Context("when getting the org returns an error", func() { 108 Context("when the error is translatable", func() { 109 BeforeEach(func() { 110 fakeActor.GetOrganizationByNameReturns( 111 v2action.Organization{}, 112 v2action.Warnings{"warning-1", "warning-2"}, 113 v2action.OrganizationNotFoundError{Name: "some-org"}) 114 }) 115 116 It("returns a translatable error and outputs all warnings", func() { 117 Expect(executeErr).To(MatchError(translatableerror.OrganizationNotFoundError{Name: "some-org"})) 118 119 Expect(testUI.Err).To(Say("warning-1")) 120 Expect(testUI.Err).To(Say("warning-2")) 121 }) 122 }) 123 124 Context("when the error is not translatable", func() { 125 var expectedErr error 126 127 BeforeEach(func() { 128 expectedErr = errors.New("get org error") 129 fakeActor.GetOrganizationByNameReturns( 130 v2action.Organization{}, 131 v2action.Warnings{"warning-1", "warning-2"}, 132 expectedErr) 133 }) 134 135 It("returns the error and all warnings", func() { 136 Expect(executeErr).To(MatchError(expectedErr)) 137 138 Expect(testUI.Err).To(Say("warning-1")) 139 Expect(testUI.Err).To(Say("warning-2")) 140 }) 141 }) 142 }) 143 }) 144 145 Context("when the --guid flag is not provided", func() { 146 Context("when no errors occur", func() { 147 BeforeEach(func() { 148 fakeConfig.CurrentUserReturns( 149 configv3.User{ 150 Name: "some-user", 151 }, 152 nil) 153 154 fakeActor.GetOrganizationSummaryByNameReturns( 155 v2action.OrganizationSummary{ 156 Organization: v2action.Organization{ 157 Name: "some-org", 158 GUID: "some-org-guid", 159 DefaultIsolationSegmentGUID: "default-isolation-segment-guid", 160 }, 161 DomainNames: []string{ 162 "a-shared.com", 163 "b-private.com", 164 "c-shared.com", 165 "d-private.com", 166 }, 167 QuotaName: "some-quota", 168 SpaceNames: []string{ 169 "space1", 170 "space2", 171 }, 172 }, 173 v2action.Warnings{"warning-1", "warning-2"}, 174 nil) 175 }) 176 177 Context("when the v3 actor is nil", func() { 178 BeforeEach(func() { 179 cmd.ActorV3 = nil 180 }) 181 It("displays the org summary with no isolation segment row", func() { 182 Expect(executeErr).To(BeNil()) 183 Expect(testUI.Out).ToNot(Say("isolation segments:")) 184 }) 185 }) 186 187 Context("when api version is above 3.11.0", func() { 188 BeforeEach(func() { 189 fakeActorV3.GetIsolationSegmentsByOrganizationReturns( 190 []v3action.IsolationSegment{ 191 { 192 Name: "isolation-segment-1", 193 GUID: "default-isolation-segment-guid", 194 }, { 195 Name: "isolation-segment-2", 196 GUID: "some-other-isolation-segment-guid", 197 }, 198 }, 199 v3action.Warnings{"warning-3", "warning-4"}, 200 nil) 201 fakeActorV3.CloudControllerAPIVersionReturns("3.12.0") 202 }) 203 204 It("displays warnings and a table with org domains, org quota, spaces and isolation segments", func() { 205 Expect(executeErr).To(BeNil()) 206 207 Expect(testUI.Out).To(Say("Getting info for org %s as some-user\\.\\.\\.", cmd.RequiredArgs.Organization)) 208 Expect(testUI.Err).To(Say("warning-1")) 209 Expect(testUI.Err).To(Say("warning-2")) 210 Expect(testUI.Err).To(Say("warning-3")) 211 Expect(testUI.Err).To(Say("warning-4")) 212 213 Expect(testUI.Out).To(Say("name:\\s+%s", cmd.RequiredArgs.Organization)) 214 Expect(testUI.Out).To(Say("domains:\\s+a-shared.com, b-private.com, c-shared.com, d-private.com")) 215 Expect(testUI.Out).To(Say("quota:\\s+some-quota")) 216 Expect(testUI.Out).To(Say("spaces:\\s+space1, space2")) 217 Expect(testUI.Out).To(Say("isolation segments:\\s+isolation-segment-1 \\(default\\), isolation-segment-2")) 218 219 Expect(fakeConfig.CurrentUserCallCount()).To(Equal(1)) 220 221 Expect(fakeActor.GetOrganizationSummaryByNameCallCount()).To(Equal(1)) 222 orgName := fakeActor.GetOrganizationSummaryByNameArgsForCall(0) 223 Expect(orgName).To(Equal("some-org")) 224 225 Expect(fakeActorV3.GetIsolationSegmentsByOrganizationCallCount()).To(Equal(1)) 226 orgGuid := fakeActorV3.GetIsolationSegmentsByOrganizationArgsForCall(0) 227 Expect(orgGuid).To(Equal("some-org-guid")) 228 }) 229 }) 230 231 Context("when api version is below 3.11.0", func() { 232 BeforeEach(func() { 233 fakeActorV3.CloudControllerAPIVersionReturns("3.10.0") 234 }) 235 236 It("displays warnings and a table with org domains, org quota, spaces and isolation segments", func() { 237 Expect(executeErr).To(BeNil()) 238 239 Expect(testUI.Out).To(Say("Getting info for org %s as some-user\\.\\.\\.", cmd.RequiredArgs.Organization)) 240 Expect(testUI.Err).To(Say("warning-1")) 241 Expect(testUI.Err).To(Say("warning-2")) 242 243 Expect(testUI.Out).To(Say("name:\\s+%s", cmd.RequiredArgs.Organization)) 244 Expect(testUI.Out).To(Say("domains:\\s+a-shared.com, b-private.com, c-shared.com, d-private.com")) 245 Expect(testUI.Out).To(Say("quota:\\s+some-quota")) 246 Expect(testUI.Out).To(Say("spaces:\\s+space1, space2")) 247 Expect(testUI.Out).ToNot(Say("isolation segments:")) 248 249 Expect(fakeConfig.CurrentUserCallCount()).To(Equal(1)) 250 251 Expect(fakeActor.GetOrganizationSummaryByNameCallCount()).To(Equal(1)) 252 orgName := fakeActor.GetOrganizationSummaryByNameArgsForCall(0) 253 Expect(orgName).To(Equal("some-org")) 254 }) 255 }) 256 }) 257 258 Context("when getting the current user returns an error", func() { 259 var expectedErr error 260 261 BeforeEach(func() { 262 expectedErr = errors.New("getting current user error") 263 fakeConfig.CurrentUserReturns( 264 configv3.User{}, 265 expectedErr) 266 }) 267 268 It("returns the error", func() { 269 Expect(executeErr).To(MatchError(expectedErr)) 270 }) 271 }) 272 273 Context("when getting the org summary returns an error", func() { 274 Context("when the error is translatable", func() { 275 BeforeEach(func() { 276 fakeActor.GetOrganizationSummaryByNameReturns( 277 v2action.OrganizationSummary{}, 278 v2action.Warnings{"warning-1", "warning-2"}, 279 v2action.OrganizationNotFoundError{Name: "some-org"}) 280 }) 281 282 It("returns a translatable error and outputs all warnings", func() { 283 Expect(executeErr).To(MatchError(translatableerror.OrganizationNotFoundError{Name: "some-org"})) 284 285 Expect(testUI.Err).To(Say("warning-1")) 286 Expect(testUI.Err).To(Say("warning-2")) 287 }) 288 }) 289 290 Context("when the error is not translatable", func() { 291 var expectedErr error 292 293 BeforeEach(func() { 294 expectedErr = errors.New("get org error") 295 fakeActor.GetOrganizationSummaryByNameReturns( 296 v2action.OrganizationSummary{}, 297 v2action.Warnings{"warning-1", "warning-2"}, 298 expectedErr) 299 }) 300 301 It("returns the error and all warnings", func() { 302 Expect(executeErr).To(MatchError(expectedErr)) 303 304 Expect(testUI.Err).To(Say("warning-1")) 305 Expect(testUI.Err).To(Say("warning-2")) 306 }) 307 }) 308 }) 309 310 Context("when getting the org isolation segments returns an error", func() { 311 var expectedErr error 312 313 BeforeEach(func() { 314 expectedErr = errors.New("get org iso segs error") 315 fakeActorV3.GetIsolationSegmentsByOrganizationReturns( 316 nil, 317 v3action.Warnings{"get iso seg warning"}, 318 expectedErr) 319 }) 320 321 It("returns the error and all warnings", func() { 322 Expect(executeErr).To(MatchError(expectedErr)) 323 Expect(testUI.Err).To(Say("get iso seg warning")) 324 }) 325 }) 326 }) 327 })