github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/command/v7/set_label_command_test.go (about) 1 package v7_test 2 3 import ( 4 "errors" 5 "regexp" 6 "strings" 7 8 "code.cloudfoundry.org/cli/actor/v7action" 9 "code.cloudfoundry.org/cli/command/commandfakes" 10 "code.cloudfoundry.org/cli/command/flag" 11 "code.cloudfoundry.org/cli/command/translatableerror" 12 . "code.cloudfoundry.org/cli/command/v7" 13 "code.cloudfoundry.org/cli/command/v7/v7fakes" 14 "code.cloudfoundry.org/cli/types" 15 "code.cloudfoundry.org/cli/util/configv3" 16 "code.cloudfoundry.org/cli/util/ui" 17 uuid "github.com/nu7hatch/gouuid" 18 . "github.com/onsi/ginkgo" 19 . "github.com/onsi/ginkgo/extensions/table" 20 . "github.com/onsi/gomega" 21 . "github.com/onsi/gomega/gbytes" 22 ) 23 24 var _ = Describe("set-label command", func() { 25 var ( 26 cmd SetLabelCommand 27 resourceName string 28 fakeActor *v7fakes.FakeSetLabelActor 29 fakeConfig *commandfakes.FakeConfig 30 fakeSharedActor *commandfakes.FakeSharedActor 31 testUI *ui.UI 32 33 executeErr error 34 ) 35 36 Context("shared validations", func() { 37 BeforeEach(func() { 38 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 39 fakeActor = new(v7fakes.FakeSetLabelActor) 40 fakeConfig = new(commandfakes.FakeConfig) 41 fakeSharedActor = new(commandfakes.FakeSharedActor) 42 cmd = SetLabelCommand{ 43 Actor: fakeActor, 44 UI: testUI, 45 Config: fakeConfig, 46 SharedActor: fakeSharedActor, 47 } 48 }) 49 50 DescribeTable( 51 "Combination of --stack with resource type", 52 func(resourceType string) { 53 cmd.BuildpackStack = "cflinuxfs3" 54 cmd.RequiredArgs = flag.SetLabelArgs{ 55 ResourceType: resourceType, 56 } 57 58 err := cmd.Execute(nil) 59 60 argumentCombinationError := translatableerror.ArgumentCombinationError{ 61 Args: []string{strings.ToLower(resourceType), "--stack, -s"}, 62 } 63 Expect(err).To(MatchError(argumentCombinationError)) 64 }, 65 Entry("app", "app"), 66 Entry("domains", "domain"), 67 Entry("orgs", "org"), 68 Entry("routes", "route"), 69 Entry("spaces", "space"), 70 Entry("stacks", "stack"), 71 Entry("service brokers", "service-broker"), 72 ) 73 74 When("some provided labels do not have a value part", func() { 75 BeforeEach(func() { 76 cmd.RequiredArgs = flag.SetLabelArgs{ 77 ResourceType: "anything", 78 ResourceName: resourceName, 79 Labels: []string{"FOO=BAR", "MISSING_EQUALS", "ENV=FAKE"}, 80 } 81 }) 82 83 It("complains about the missing equal sign", func() { 84 err := cmd.Execute(nil) 85 Expect(err).To(MatchError("Metadata error: no value provided for label 'MISSING_EQUALS'")) 86 Expect(err).To(HaveOccurred()) 87 }) 88 }) 89 90 When("fetching the current user's name fails", func() { 91 BeforeEach(func() { 92 cmd.RequiredArgs = flag.SetLabelArgs{ 93 ResourceType: "anything", 94 ResourceName: resourceName, 95 } 96 fakeConfig.CurrentUserNameReturns("some-user", errors.New("boom")) 97 }) 98 99 It("returns an error", func() { 100 err := cmd.Execute(nil) 101 Expect(err).To(MatchError("boom")) 102 }) 103 }) 104 }) 105 106 When("setting labels on apps", func() { 107 108 BeforeEach(func() { 109 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 110 fakeActor = new(v7fakes.FakeSetLabelActor) 111 fakeConfig = new(commandfakes.FakeConfig) 112 fakeSharedActor = new(commandfakes.FakeSharedActor) 113 cmd = SetLabelCommand{ 114 Actor: fakeActor, 115 UI: testUI, 116 Config: fakeConfig, 117 SharedActor: fakeSharedActor, 118 } 119 cmd.RequiredArgs = flag.SetLabelArgs{ 120 ResourceType: "app", 121 } 122 }) 123 124 JustBeforeEach(func() { 125 executeErr = cmd.Execute(nil) 126 }) 127 128 It("doesn't error", func() { 129 Expect(executeErr).ToNot(HaveOccurred()) 130 }) 131 132 It("checks that the user is logged in and targeted to an org and space", func() { 133 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 134 checkOrg, checkSpace := fakeSharedActor.CheckTargetArgsForCall(0) 135 Expect(checkOrg).To(BeTrue()) 136 Expect(checkSpace).To(BeTrue()) 137 }) 138 139 When("checking target succeeds", func() { 140 BeforeEach(func() { 141 fakeSharedActor.CheckTargetReturns(nil) 142 }) 143 144 When("fetching current user's name succeeds", func() { 145 BeforeEach(func() { 146 fakeConfig.CurrentUserNameReturns("some-user", nil) 147 fakeConfig.TargetedOrganizationReturns(configv3.Organization{Name: "fake-org"}) 148 fakeConfig.TargetedSpaceReturns(configv3.Space{Name: "fake-space", GUID: "some-space-guid"}) 149 150 u, err := uuid.NewV4() 151 Expect(err).NotTo(HaveOccurred()) 152 resourceName = u.String() 153 }) 154 155 When("all the provided labels are valid", func() { 156 BeforeEach(func() { 157 cmd.RequiredArgs = flag.SetLabelArgs{ 158 ResourceType: "app", 159 ResourceName: resourceName, 160 Labels: []string{"FOO=BAR", "ENV=FAKE"}, 161 } 162 fakeActor.UpdateApplicationLabelsByApplicationNameReturns( 163 v7action.Warnings([]string{"some-warning-1", "some-warning-2"}), 164 nil, 165 ) 166 }) 167 168 When("updating the application labels succeeds", func() { 169 It("sets the provided labels on the app", func() { 170 name, spaceGUID, labels := fakeActor.UpdateApplicationLabelsByApplicationNameArgsForCall(0) 171 Expect(name).To(Equal(resourceName), "failed to pass app name") 172 Expect(spaceGUID).To(Equal("some-space-guid")) 173 Expect(labels).To(BeEquivalentTo(map[string]types.NullString{ 174 "FOO": types.NewNullString("BAR"), 175 "ENV": types.NewNullString("FAKE"), 176 })) 177 }) 178 179 It("displays a message", func() { 180 Expect(executeErr).ToNot(HaveOccurred()) 181 182 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 183 184 Expect(testUI.Out).To(Say(regexp.QuoteMeta(`Setting label(s) for app %s in org fake-org / space fake-space as some-user...`), resourceName)) 185 Expect(testUI.Out).To(Say("OK")) 186 }) 187 188 It("prints all warnings", func() { 189 Expect(testUI.Err).To(Say("some-warning-1")) 190 Expect(testUI.Err).To(Say("some-warning-2")) 191 }) 192 }) 193 }) 194 195 When("updating the application labels fail", func() { 196 BeforeEach(func() { 197 cmd.RequiredArgs = flag.SetLabelArgs{ 198 ResourceType: "app", 199 ResourceName: resourceName, 200 Labels: []string{"FOO=BAR", "ENV=FAKE"}, 201 } 202 fakeActor.UpdateApplicationLabelsByApplicationNameReturns( 203 v7action.Warnings([]string{"some-warning-1", "some-warning-2"}), 204 errors.New("some-updating-error"), 205 ) 206 }) 207 It("displays warnings and an error message", func() { 208 Expect(testUI.Err).To(Say("some-warning-1")) 209 Expect(testUI.Err).To(Say("some-warning-2")) 210 Expect(executeErr).To(HaveOccurred()) 211 Expect(executeErr).To(MatchError("some-updating-error")) 212 }) 213 }) 214 215 When("some provided labels do not have a value part", func() { 216 BeforeEach(func() { 217 cmd.RequiredArgs = flag.SetLabelArgs{ 218 ResourceType: "app", 219 ResourceName: resourceName, 220 Labels: []string{"FOO=BAR", "MISSING_EQUALS", "ENV=FAKE"}, 221 } 222 }) 223 224 It("complains about the missing equal sign", func() { 225 Expect(executeErr).To(MatchError("Metadata error: no value provided for label 'MISSING_EQUALS'")) 226 }) 227 }) 228 229 When("when the --stack flag is specified", func() { 230 BeforeEach(func() { 231 cmd.RequiredArgs = flag.SetLabelArgs{ 232 ResourceType: "app", 233 ResourceName: resourceName, 234 Labels: []string{"FOO=BAR", "ENV=FAKE"}, 235 } 236 cmd.BuildpackStack = "im-a-stack" 237 }) 238 239 It("complains about the --stack flag being present", func() { 240 Expect(executeErr).To(MatchError(translatableerror.ArgumentCombinationError{Args: []string{"app", "--stack, -s"}})) 241 }) 242 }) 243 244 When("the resource type argument is not lowercase", func() { 245 BeforeEach(func() { 246 cmd.RequiredArgs = flag.SetLabelArgs{ 247 ResourceType: "ApP", 248 ResourceName: resourceName, 249 Labels: []string{"FOO=BAR", "ENV=FAKE"}, 250 } 251 fakeActor.UpdateApplicationLabelsByApplicationNameReturns( 252 v7action.Warnings([]string{"some-warning-1", "some-warning-2"}), 253 nil, 254 ) 255 }) 256 257 It("sets the provided labels on the app", func() { 258 name, spaceGUID, labels := fakeActor.UpdateApplicationLabelsByApplicationNameArgsForCall(0) 259 Expect(name).To(Equal(resourceName), "failed to pass app name") 260 Expect(spaceGUID).To(Equal("some-space-guid")) 261 Expect(labels).To(BeEquivalentTo(map[string]types.NullString{ 262 "FOO": types.NewNullString("BAR"), 263 "ENV": types.NewNullString("FAKE"), 264 })) 265 }) 266 267 It("prints the flavor text in lowercase", func() { 268 Expect(testUI.Out).To(Say(regexp.QuoteMeta(`Setting label(s) for app %s`), resourceName)) 269 }) 270 }) 271 }) 272 }) 273 274 When("checking targeted org and space fails", func() { 275 BeforeEach(func() { 276 fakeSharedActor.CheckTargetReturns(errors.New("nope")) 277 }) 278 279 It("returns an error", func() { 280 Expect(executeErr).To(MatchError("nope")) 281 }) 282 }) 283 }) 284 285 When("setting labels on domains", func() { 286 BeforeEach(func() { 287 resourceName = "example.com" 288 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 289 fakeActor = new(v7fakes.FakeSetLabelActor) 290 fakeConfig = new(commandfakes.FakeConfig) 291 fakeSharedActor = new(commandfakes.FakeSharedActor) 292 cmd = SetLabelCommand{ 293 Actor: fakeActor, 294 UI: testUI, 295 Config: fakeConfig, 296 SharedActor: fakeSharedActor, 297 } 298 cmd.RequiredArgs = flag.SetLabelArgs{ 299 ResourceType: "domain", 300 ResourceName: resourceName, 301 Labels: []string{"FOO=BAR", "ENV=FAKE"}, 302 } 303 304 fakeConfig.CurrentUserNameReturns("some-user", nil) 305 306 fakeActor.UpdateDomainLabelsByDomainNameReturns( 307 v7action.Warnings([]string{"some-warning-1", "some-warning-2"}), 308 nil, 309 ) 310 }) 311 312 JustBeforeEach(func() { 313 executeErr = cmd.Execute(nil) 314 }) 315 316 It("doesn't error", func() { 317 Expect(executeErr).ToNot(HaveOccurred()) 318 }) 319 320 It("outputs that the label is being set", func() { 321 Expect(testUI.Out).To(Say(regexp.QuoteMeta(`Setting label(s) for domain %s as some-user...`), resourceName)) 322 Expect(testUI.Out).To(Say("OK")) 323 }) 324 325 It("sets the provided labels on the domain", func() { 326 Expect(fakeActor.UpdateDomainLabelsByDomainNameCallCount()).To(Equal(1)) 327 name, labels := fakeActor.UpdateDomainLabelsByDomainNameArgsForCall(0) 328 Expect(name).To(Equal(resourceName), "failed to pass domain name") 329 Expect(labels).To(BeEquivalentTo(map[string]types.NullString{ 330 "FOO": types.NewNullString("BAR"), 331 "ENV": types.NewNullString("FAKE"), 332 })) 333 }) 334 335 It("prints all warnings", func() { 336 Expect(testUI.Err).To(Say("some-warning-1")) 337 Expect(testUI.Err).To(Say("some-warning-2")) 338 }) 339 340 When("updating the domain labels fails", func() { 341 BeforeEach(func() { 342 fakeActor.UpdateDomainLabelsByDomainNameReturns( 343 v7action.Warnings([]string{"some-warning-1", "some-warning-2"}), 344 errors.New("some-updating-error"), 345 ) 346 }) 347 It("displays warnings and an error message", func() { 348 Expect(testUI.Err).To(Say("some-warning-1")) 349 Expect(testUI.Err).To(Say("some-warning-2")) 350 Expect(executeErr).To(HaveOccurred()) 351 Expect(executeErr).To(MatchError("some-updating-error")) 352 }) 353 }) 354 355 When("some provided labels do not have a value part", func() { 356 BeforeEach(func() { 357 cmd.RequiredArgs = flag.SetLabelArgs{ 358 ResourceType: "domain", 359 ResourceName: resourceName, 360 Labels: []string{"FOO=BAR", "MISSING_EQUALS", "ENV=FAKE"}, 361 } 362 }) 363 364 It("complains about the missing equal sign", func() { 365 Expect(executeErr).To(MatchError("Metadata error: no value provided for label 'MISSING_EQUALS'")) 366 }) 367 }) 368 369 When("the resource type argument is not lowercase", func() { 370 BeforeEach(func() { 371 cmd.RequiredArgs = flag.SetLabelArgs{ 372 ResourceType: "DoMaiN", 373 ResourceName: resourceName, 374 Labels: []string{"FOO=BAR", "ENV=FAKE"}, 375 } 376 }) 377 378 It("sets the provided labels on the domain", func() { 379 Expect(fakeActor.UpdateDomainLabelsByDomainNameCallCount()).To(Equal(1)) 380 name, labels := fakeActor.UpdateDomainLabelsByDomainNameArgsForCall(0) 381 Expect(name).To(Equal(resourceName), "failed to pass domain name") 382 Expect(labels).To(BeEquivalentTo(map[string]types.NullString{ 383 "FOO": types.NewNullString("BAR"), 384 "ENV": types.NewNullString("FAKE"), 385 })) 386 }) 387 388 It("prints the flavor text in lowercase", func() { 389 Expect(testUI.Out).To(Say(regexp.QuoteMeta(`Setting label(s) for domain %s as some-user...`), resourceName)) 390 }) 391 }) 392 }) 393 394 When("setting labels on orgs", func() { 395 BeforeEach(func() { 396 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 397 fakeActor = new(v7fakes.FakeSetLabelActor) 398 fakeConfig = new(commandfakes.FakeConfig) 399 fakeSharedActor = new(commandfakes.FakeSharedActor) 400 resourceName = "some-org" 401 cmd = SetLabelCommand{ 402 Actor: fakeActor, 403 UI: testUI, 404 Config: fakeConfig, 405 SharedActor: fakeSharedActor, 406 } 407 cmd.RequiredArgs = flag.SetLabelArgs{ 408 ResourceType: "org", 409 ResourceName: resourceName, 410 } 411 }) 412 413 JustBeforeEach(func() { 414 executeErr = cmd.Execute(nil) 415 }) 416 417 It("doesn't error", func() { 418 Expect(executeErr).ToNot(HaveOccurred()) 419 }) 420 421 It("checks that the user is logged in", func() { 422 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 423 checkOrg, checkSpace := fakeSharedActor.CheckTargetArgsForCall(0) 424 Expect(checkOrg).To(BeFalse()) 425 Expect(checkSpace).To(BeFalse()) 426 }) 427 428 When("checking target succeeds", func() { 429 BeforeEach(func() { 430 fakeSharedActor.CheckTargetReturns(nil) 431 }) 432 433 When("fetching current user's name succeeds", func() { 434 BeforeEach(func() { 435 fakeConfig.CurrentUserNameReturns("some-user", nil) 436 }) 437 438 When("all the provided labels are valid", func() { 439 BeforeEach(func() { 440 cmd.RequiredArgs = flag.SetLabelArgs{ 441 ResourceType: "org", 442 ResourceName: resourceName, 443 Labels: []string{"FOO=BAR", "ENV=FAKE"}, 444 } 445 fakeActor.UpdateOrganizationLabelsByOrganizationNameReturns( 446 v7action.Warnings([]string{"some-warning-1", "some-warning-2"}), 447 nil, 448 ) 449 }) 450 451 When("updating the application labels succeeds", func() { 452 It("sets the provided labels on the app", func() { 453 Expect(fakeActor.UpdateOrganizationLabelsByOrganizationNameCallCount()).To(Equal(1)) 454 name, labels := fakeActor.UpdateOrganizationLabelsByOrganizationNameArgsForCall(0) 455 Expect(name).To(Equal(resourceName), "failed to pass app name") 456 Expect(labels).To(BeEquivalentTo(map[string]types.NullString{ 457 "FOO": types.NewNullString("BAR"), 458 "ENV": types.NewNullString("FAKE"), 459 })) 460 }) 461 462 It("displays a message", func() { 463 Expect(executeErr).ToNot(HaveOccurred()) 464 465 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 466 467 Expect(testUI.Out).To(Say(regexp.QuoteMeta(`Setting label(s) for org %s as some-user...`), resourceName)) 468 Expect(testUI.Out).To(Say("OK")) 469 }) 470 471 It("prints all warnings", func() { 472 Expect(testUI.Err).To(Say("some-warning-1")) 473 Expect(testUI.Err).To(Say("some-warning-2")) 474 }) 475 }) 476 }) 477 478 When("updating the application labels fail", func() { 479 BeforeEach(func() { 480 cmd.RequiredArgs = flag.SetLabelArgs{ 481 ResourceType: "org", 482 ResourceName: resourceName, 483 Labels: []string{"FOO=BAR", "ENV=FAKE"}, 484 } 485 fakeActor.UpdateOrganizationLabelsByOrganizationNameReturns( 486 v7action.Warnings([]string{"some-warning-1", "some-warning-2"}), 487 errors.New("some-updating-error"), 488 ) 489 }) 490 491 It("displays warnings and an error message", func() { 492 Expect(testUI.Err).To(Say("some-warning-1")) 493 Expect(testUI.Err).To(Say("some-warning-2")) 494 Expect(executeErr).To(MatchError("some-updating-error")) 495 }) 496 }) 497 498 When("some provided labels do not have a value part", func() { 499 BeforeEach(func() { 500 cmd.RequiredArgs = flag.SetLabelArgs{ 501 ResourceType: "org", 502 ResourceName: resourceName, 503 Labels: []string{"FOO=BAR", "MISSING_EQUALS", "ENV=FAKE"}, 504 } 505 }) 506 507 It("complains about the missing equal sign", func() { 508 Expect(executeErr).To(MatchError("Metadata error: no value provided for label 'MISSING_EQUALS'")) 509 Expect(executeErr).To(HaveOccurred()) 510 }) 511 }) 512 513 When("when the --stack flag is specified", func() { 514 BeforeEach(func() { 515 cmd.RequiredArgs = flag.SetLabelArgs{ 516 ResourceType: "org", 517 ResourceName: resourceName, 518 Labels: []string{"FOO=BAR", "ENV=FAKE"}, 519 } 520 cmd.BuildpackStack = "im-a-stack" 521 }) 522 523 It("complains about the --stack flag being present", func() { 524 Expect(executeErr).To(MatchError(translatableerror.ArgumentCombinationError{Args: []string{"org", "--stack, -s"}})) 525 }) 526 }) 527 528 When("the resource type argument is not lowercase", func() { 529 BeforeEach(func() { 530 cmd.RequiredArgs = flag.SetLabelArgs{ 531 ResourceType: "OrG", 532 ResourceName: resourceName, 533 Labels: []string{"FOO=BAR", "ENV=FAKE"}, 534 } 535 fakeActor.UpdateOrganizationLabelsByOrganizationNameReturns( 536 v7action.Warnings([]string{"some-warning-1", "some-warning-2"}), 537 nil, 538 ) 539 }) 540 541 It("sets the provided labels on the org", func() { 542 name, labels := fakeActor.UpdateOrganizationLabelsByOrganizationNameArgsForCall(0) 543 Expect(name).To(Equal(resourceName), "failed to pass org name") 544 Expect(labels).To(BeEquivalentTo(map[string]types.NullString{ 545 "FOO": types.NewNullString("BAR"), 546 "ENV": types.NewNullString("FAKE"), 547 })) 548 }) 549 550 It("prints the flavor text in lowercase", func() { 551 Expect(testUI.Out).To(Say(regexp.QuoteMeta(`Setting label(s) for org %s`), resourceName)) 552 }) 553 }) 554 }) 555 }) 556 557 When("checking targeted org and space fails", func() { 558 BeforeEach(func() { 559 fakeSharedActor.CheckTargetReturns(errors.New("nope")) 560 }) 561 562 It("returns an error", func() { 563 Expect(executeErr).To(MatchError("nope")) 564 }) 565 }) 566 }) 567 568 When("setting labels on routes", func() { 569 570 BeforeEach(func() { 571 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 572 fakeActor = new(v7fakes.FakeSetLabelActor) 573 fakeConfig = new(commandfakes.FakeConfig) 574 fakeSharedActor = new(commandfakes.FakeSharedActor) 575 cmd = SetLabelCommand{ 576 Actor: fakeActor, 577 UI: testUI, 578 Config: fakeConfig, 579 SharedActor: fakeSharedActor, 580 } 581 cmd.RequiredArgs = flag.SetLabelArgs{ 582 ResourceType: "route", 583 } 584 }) 585 586 JustBeforeEach(func() { 587 executeErr = cmd.Execute(nil) 588 }) 589 590 It("doesn't error", func() { 591 Expect(executeErr).ToNot(HaveOccurred()) 592 }) 593 594 It("checks that the user is logged in and targeted to an org and space", func() { 595 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 596 checkOrg, checkSpace := fakeSharedActor.CheckTargetArgsForCall(0) 597 Expect(checkOrg).To(BeTrue()) 598 Expect(checkSpace).To(BeTrue()) 599 }) 600 601 When("checking target succeeds", func() { 602 BeforeEach(func() { 603 fakeSharedActor.CheckTargetReturns(nil) 604 }) 605 606 When("fetching current user's name succeeds", func() { 607 BeforeEach(func() { 608 fakeConfig.CurrentUserNameReturns("some-user", nil) 609 fakeConfig.TargetedOrganizationReturns(configv3.Organization{Name: "fake-org"}) 610 fakeConfig.TargetedSpaceReturns(configv3.Space{Name: "fake-space", GUID: "some-space-guid"}) 611 612 u, err := uuid.NewV4() 613 Expect(err).NotTo(HaveOccurred()) 614 resourceName = u.String() 615 }) 616 617 When("all the provided labels are valid", func() { 618 BeforeEach(func() { 619 cmd.RequiredArgs = flag.SetLabelArgs{ 620 ResourceType: "route", 621 ResourceName: resourceName, 622 Labels: []string{"FOO=BAR", "ENV=FAKE"}, 623 } 624 fakeActor.UpdateRouteLabelsReturns( 625 v7action.Warnings([]string{"some-warning-1", "some-warning-2"}), 626 nil, 627 ) 628 }) 629 630 When("updating the route labels succeeds", func() { 631 It("sets the provided labels on the route", func() { 632 name, spaceGUID, labels := fakeActor.UpdateRouteLabelsArgsForCall(0) 633 Expect(name).To(Equal(resourceName), "failed to pass route name") 634 Expect(spaceGUID).To(Equal("some-space-guid")) 635 Expect(labels).To(BeEquivalentTo(map[string]types.NullString{ 636 "FOO": types.NewNullString("BAR"), 637 "ENV": types.NewNullString("FAKE"), 638 })) 639 }) 640 641 It("displays a message", func() { 642 Expect(executeErr).ToNot(HaveOccurred()) 643 644 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 645 646 Expect(testUI.Out).To(Say(regexp.QuoteMeta(`Setting label(s) for route %s in org fake-org / space fake-space as some-user...`), resourceName)) 647 Expect(testUI.Out).To(Say("OK")) 648 }) 649 650 It("prints all warnings", func() { 651 Expect(testUI.Err).To(Say("some-warning-1")) 652 Expect(testUI.Err).To(Say("some-warning-2")) 653 }) 654 }) 655 }) 656 657 When("updating the route labels fail", func() { 658 BeforeEach(func() { 659 cmd.RequiredArgs = flag.SetLabelArgs{ 660 ResourceType: "route", 661 ResourceName: resourceName, 662 Labels: []string{"FOO=BAR", "ENV=FAKE"}, 663 } 664 fakeActor.UpdateRouteLabelsReturns( 665 v7action.Warnings([]string{"some-warning-1", "some-warning-2"}), 666 errors.New("some-updating-error"), 667 ) 668 }) 669 It("displays warnings and an error message", func() { 670 Expect(testUI.Err).To(Say("some-warning-1")) 671 Expect(testUI.Err).To(Say("some-warning-2")) 672 Expect(executeErr).To(HaveOccurred()) 673 Expect(executeErr).To(MatchError("some-updating-error")) 674 }) 675 }) 676 677 When("some provided labels do not have a value part", func() { 678 BeforeEach(func() { 679 cmd.RequiredArgs = flag.SetLabelArgs{ 680 ResourceType: "route", 681 ResourceName: resourceName, 682 Labels: []string{"FOO=BAR", "MISSING_EQUALS", "ENV=FAKE"}, 683 } 684 }) 685 686 It("complains about the missing equal sign", func() { 687 Expect(executeErr).To(MatchError("Metadata error: no value provided for label 'MISSING_EQUALS'")) 688 }) 689 }) 690 691 When("when the --stack flag is specified", func() { 692 BeforeEach(func() { 693 cmd.RequiredArgs = flag.SetLabelArgs{ 694 ResourceType: "route", 695 ResourceName: resourceName, 696 Labels: []string{"FOO=BAR", "ENV=FAKE"}, 697 } 698 cmd.BuildpackStack = "im-a-stack" 699 }) 700 701 It("complains about the --stack flag being present", func() { 702 Expect(executeErr).To(MatchError(translatableerror.ArgumentCombinationError{Args: []string{"route", "--stack, -s"}})) 703 }) 704 }) 705 706 When("the resource type argument is not lowercase", func() { 707 BeforeEach(func() { 708 cmd.RequiredArgs = flag.SetLabelArgs{ 709 ResourceType: "RoUTe", 710 ResourceName: resourceName, 711 Labels: []string{"FOO=BAR", "ENV=FAKE"}, 712 } 713 fakeActor.UpdateRouteLabelsReturns( 714 v7action.Warnings([]string{"some-warning-1", "some-warning-2"}), 715 nil, 716 ) 717 }) 718 719 It("sets the provided labels on the route", func() { 720 name, spaceGUID, labels := fakeActor.UpdateRouteLabelsArgsForCall(0) 721 Expect(name).To(Equal(resourceName), "failed to pass route name") 722 Expect(spaceGUID).To(Equal("some-space-guid")) 723 Expect(labels).To(BeEquivalentTo(map[string]types.NullString{ 724 "FOO": types.NewNullString("BAR"), 725 "ENV": types.NewNullString("FAKE"), 726 })) 727 }) 728 729 It("prints the flavor text in lowercase", func() { 730 Expect(testUI.Out).To(Say(regexp.QuoteMeta(`Setting label(s) for route %s`), resourceName)) 731 }) 732 }) 733 }) 734 }) 735 736 When("checking targeted org and space fails", func() { 737 BeforeEach(func() { 738 fakeSharedActor.CheckTargetReturns(errors.New("nope")) 739 }) 740 741 It("returns an error", func() { 742 Expect(executeErr).To(MatchError("nope")) 743 }) 744 }) 745 }) 746 747 When("setting labels on buildpacks", func() { 748 BeforeEach(func() { 749 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 750 fakeActor = new(v7fakes.FakeSetLabelActor) 751 fakeConfig = new(commandfakes.FakeConfig) 752 fakeSharedActor = new(commandfakes.FakeSharedActor) 753 resourceName = "some-buildpack" 754 cmd = SetLabelCommand{ 755 Actor: fakeActor, 756 UI: testUI, 757 Config: fakeConfig, 758 SharedActor: fakeSharedActor, 759 } 760 cmd.RequiredArgs = flag.SetLabelArgs{ 761 ResourceType: "buildpack", 762 ResourceName: resourceName, 763 } 764 }) 765 766 JustBeforeEach(func() { 767 executeErr = cmd.Execute(nil) 768 }) 769 770 It("doesn't error", func() { 771 Expect(executeErr).ToNot(HaveOccurred()) 772 }) 773 774 It("checks that the user is logged in", func() { 775 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 776 checkOrg, checkSpace := fakeSharedActor.CheckTargetArgsForCall(0) 777 Expect(checkOrg).To(BeFalse()) 778 Expect(checkSpace).To(BeFalse()) 779 }) 780 781 When("checking target succeeds", func() { 782 BeforeEach(func() { 783 fakeSharedActor.CheckTargetReturns(nil) 784 }) 785 786 When("fetching current user's name succeeds", func() { 787 BeforeEach(func() { 788 fakeConfig.CurrentUserNameReturns("some-user", nil) 789 }) 790 791 When("all the provided labels are valid", func() { 792 BeforeEach(func() { 793 cmd.RequiredArgs = flag.SetLabelArgs{ 794 ResourceType: "buildpack", 795 ResourceName: resourceName, 796 Labels: []string{"FOO=BAR", "ENV=FAKE"}, 797 } 798 cmd.BuildpackStack = "globinski" 799 800 fakeActor.UpdateBuildpackLabelsByBuildpackNameAndStackReturns( 801 v7action.Warnings([]string{"some-warning-1", "some-warning-2"}), 802 nil, 803 ) 804 }) 805 806 When("updating the buildpack labels succeeds", func() { 807 When("the buildpack stack is specified", func() { 808 It("sets the provided labels on the buildpack", func() { 809 Expect(fakeActor.UpdateBuildpackLabelsByBuildpackNameAndStackCallCount()).To(Equal(1)) 810 name, stack, labels := fakeActor.UpdateBuildpackLabelsByBuildpackNameAndStackArgsForCall(0) 811 Expect(name).To(Equal(resourceName), "failed to pass buildpack name") 812 Expect(stack).To(Equal("globinski"), "failed to pass stack name") 813 Expect(labels).To(BeEquivalentTo(map[string]types.NullString{ 814 "FOO": types.NewNullString("BAR"), 815 "ENV": types.NewNullString("FAKE"), 816 })) 817 }) 818 819 It("displays a message", func() { 820 Expect(executeErr).ToNot(HaveOccurred()) 821 822 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 823 824 Expect(testUI.Out).To(Say(regexp.QuoteMeta(`Setting label(s) for buildpack %s with stack %s as some-user...`), resourceName, cmd.BuildpackStack)) 825 Expect(testUI.Out).To(Say("OK")) 826 }) 827 828 It("prints all warnings", func() { 829 Expect(testUI.Err).To(Say("some-warning-1")) 830 Expect(testUI.Err).To(Say("some-warning-2")) 831 }) 832 }) 833 834 When("the buildpack stack is not specified", func() { 835 BeforeEach(func() { 836 cmd.BuildpackStack = "" 837 }) 838 839 It("sets the provided labels on the buildpack", func() { 840 Expect(fakeActor.UpdateBuildpackLabelsByBuildpackNameAndStackCallCount()).To(Equal(1)) 841 name, stack, labels := fakeActor.UpdateBuildpackLabelsByBuildpackNameAndStackArgsForCall(0) 842 Expect(name).To(Equal(resourceName), "failed to pass buildpack name") 843 Expect(stack).To(Equal(""), "got a non-empty stack name") 844 Expect(labels).To(BeEquivalentTo(map[string]types.NullString{ 845 "FOO": types.NewNullString("BAR"), 846 "ENV": types.NewNullString("FAKE"), 847 })) 848 }) 849 850 It("displays a message", func() { 851 Expect(executeErr).ToNot(HaveOccurred()) 852 853 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 854 855 Expect(testUI.Out).To(Say(regexp.QuoteMeta(`Setting label(s) for buildpack %s as some-user...`), resourceName)) 856 Expect(testUI.Out).To(Say("OK")) 857 }) 858 859 It("prints all warnings", func() { 860 Expect(testUI.Err).To(Say("some-warning-1")) 861 Expect(testUI.Err).To(Say("some-warning-2")) 862 }) 863 }) 864 865 When("no stack is provided", func() { 866 BeforeEach(func() { 867 cmd.BuildpackStack = "" 868 }) 869 870 It("displays a message that includes the stack name", func() { 871 Expect(executeErr).ToNot(HaveOccurred()) 872 873 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 874 Expect(testUI.Out).To(Say(regexp.QuoteMeta(`Setting label(s) for buildpack %s as some-user...`), resourceName)) 875 876 Expect(testUI.Out).To(Say("OK")) 877 }) 878 }) 879 }) 880 }) 881 882 When("updating the buildpack labels fail", func() { 883 BeforeEach(func() { 884 cmd.RequiredArgs = flag.SetLabelArgs{ 885 ResourceType: "buildpack", 886 ResourceName: resourceName, 887 Labels: []string{"FOO=BAR", "ENV=FAKE"}, 888 } 889 fakeActor.UpdateBuildpackLabelsByBuildpackNameAndStackReturns( 890 v7action.Warnings([]string{"some-warning-1", "some-warning-2"}), 891 errors.New("some-updating-error"), 892 ) 893 }) 894 895 It("displays warnings and an error message", func() { 896 Expect(testUI.Err).To(Say("some-warning-1")) 897 Expect(testUI.Err).To(Say("some-warning-2")) 898 Expect(executeErr).To(MatchError("some-updating-error")) 899 }) 900 }) 901 902 When("some provided labels do not have a value part", func() { 903 BeforeEach(func() { 904 cmd.RequiredArgs = flag.SetLabelArgs{ 905 ResourceType: "buildpack", 906 ResourceName: resourceName, 907 Labels: []string{"FOO=BAR", "MISSING_EQUALS", "ENV=FAKE"}, 908 } 909 }) 910 911 It("complains about the missing equal sign", func() { 912 Expect(executeErr).To(MatchError("Metadata error: no value provided for label 'MISSING_EQUALS'")) 913 Expect(executeErr).To(HaveOccurred()) 914 }) 915 }) 916 917 When("the resource type argument is not lowercase", func() { 918 BeforeEach(func() { 919 cmd.RequiredArgs = flag.SetLabelArgs{ 920 ResourceType: "bUiLdPaCk", 921 ResourceName: resourceName, 922 Labels: []string{"FOO=BAR", "ENV=FAKE"}, 923 } 924 fakeActor.UpdateBuildpackLabelsByBuildpackNameAndStackReturns( 925 v7action.Warnings([]string{"some-warning-1", "some-warning-2"}), 926 nil, 927 ) 928 }) 929 930 It("sets the provided labels on the buildpack", func() { 931 name, stack, labels := fakeActor.UpdateBuildpackLabelsByBuildpackNameAndStackArgsForCall(0) 932 Expect(name).To(Equal(resourceName), "failed to pass buildpack name") 933 Expect(stack).To(Equal(""), "failed to pass buildpack stack") 934 Expect(labels).To(BeEquivalentTo(map[string]types.NullString{ 935 "FOO": types.NewNullString("BAR"), 936 "ENV": types.NewNullString("FAKE"), 937 })) 938 }) 939 940 It("prints the flavor text in lowercase", func() { 941 Expect(testUI.Out).To(Say(regexp.QuoteMeta(`Setting label(s) for buildpack %s`), resourceName)) 942 }) 943 944 When("setting the stack argument", func() { 945 BeforeEach(func() { 946 cmd.BuildpackStack = "cflinuxfs3" 947 }) 948 949 It("does not display an argument combination error", func() { 950 Expect(executeErr).ToNot(HaveOccurred()) 951 }) 952 953 }) 954 }) 955 }) 956 }) 957 958 When("checking targeted org and space fails", func() { 959 BeforeEach(func() { 960 fakeSharedActor.CheckTargetReturns(errors.New("nope")) 961 }) 962 963 It("returns an error", func() { 964 Expect(executeErr).To(MatchError("nope")) 965 }) 966 }) 967 968 When("setting the stack argument", func() { 969 970 BeforeEach(func() { 971 cmd.BuildpackStack = "cflinuxfs3" 972 }) 973 974 It("does not display an argument combination error", func() { 975 Expect(executeErr).ToNot(HaveOccurred()) 976 }) 977 978 }) 979 }) 980 981 When("setting labels on spaces", func() { 982 BeforeEach(func() { 983 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 984 fakeActor = new(v7fakes.FakeSetLabelActor) 985 fakeConfig = new(commandfakes.FakeConfig) 986 fakeConfig.TargetedOrganizationReturns(configv3.Organization{Name: "fake-org", GUID: "some-org-guid"}) 987 988 fakeSharedActor = new(commandfakes.FakeSharedActor) 989 resourceName = "some-space" 990 cmd = SetLabelCommand{ 991 Actor: fakeActor, 992 UI: testUI, 993 Config: fakeConfig, 994 SharedActor: fakeSharedActor, 995 } 996 cmd.RequiredArgs = flag.SetLabelArgs{ 997 ResourceType: "space", 998 ResourceName: resourceName, 999 } 1000 }) 1001 1002 JustBeforeEach(func() { 1003 executeErr = cmd.Execute(nil) 1004 }) 1005 1006 It("checks that the user is logged in and targeted to an org", func() { 1007 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 1008 checkOrg, checkSpace := fakeSharedActor.CheckTargetArgsForCall(0) 1009 Expect(checkOrg).To(BeTrue()) 1010 Expect(checkSpace).To(BeFalse()) 1011 }) 1012 1013 When("checking target succeeds", func() { 1014 BeforeEach(func() { 1015 fakeSharedActor.CheckTargetReturns(nil) 1016 }) 1017 1018 When("fetching current user's name succeeds", func() { 1019 BeforeEach(func() { 1020 fakeConfig.CurrentUserNameReturns("some-user", nil) 1021 }) 1022 1023 When("all the provided labels are valid", func() { 1024 BeforeEach(func() { 1025 cmd.RequiredArgs = flag.SetLabelArgs{ 1026 ResourceType: "space", 1027 ResourceName: resourceName, 1028 Labels: []string{"FOO=BAR", "ENV=FAKE"}, 1029 } 1030 fakeActor.UpdateSpaceLabelsBySpaceNameReturns( 1031 v7action.Warnings([]string{"some-warning-1", "some-warning-2"}), 1032 nil, 1033 ) 1034 }) 1035 1036 When("updating the space labels succeeds", func() { 1037 It("sets the provided labels on the space", func() { 1038 Expect(fakeActor.UpdateSpaceLabelsBySpaceNameCallCount()).To(Equal(1)) 1039 spaceName, orgGUID, labels := fakeActor.UpdateSpaceLabelsBySpaceNameArgsForCall(0) 1040 Expect(spaceName).To(Equal(resourceName), "failed to pass space name") 1041 Expect(orgGUID).To(Equal("some-org-guid")) 1042 Expect(labels).To(BeEquivalentTo(map[string]types.NullString{ 1043 "FOO": types.NewNullString("BAR"), 1044 "ENV": types.NewNullString("FAKE"), 1045 })) 1046 }) 1047 1048 It("displays a message", func() { 1049 Expect(executeErr).ToNot(HaveOccurred()) 1050 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 1051 Expect(testUI.Out).To(Say(regexp.QuoteMeta(`Setting label(s) for space %s in org fake-org as some-user...`), resourceName)) 1052 Expect(testUI.Out).To(Say("OK")) 1053 }) 1054 1055 It("prints all warnings", func() { 1056 Expect(testUI.Err).To(Say("some-warning-1")) 1057 Expect(testUI.Err).To(Say("some-warning-2")) 1058 }) 1059 }) 1060 }) 1061 1062 When("updating the application labels fail", func() { 1063 BeforeEach(func() { 1064 cmd.RequiredArgs = flag.SetLabelArgs{ 1065 ResourceType: "org", 1066 ResourceName: resourceName, 1067 Labels: []string{"FOO=BAR", "ENV=FAKE"}, 1068 } 1069 fakeActor.UpdateOrganizationLabelsByOrganizationNameReturns( 1070 v7action.Warnings([]string{"some-warning-1", "some-warning-2"}), 1071 errors.New("some-updating-error"), 1072 ) 1073 }) 1074 1075 It("displays warnings and an error message", func() { 1076 Expect(testUI.Err).To(Say("some-warning-1")) 1077 Expect(testUI.Err).To(Say("some-warning-2")) 1078 Expect(executeErr).To(MatchError("some-updating-error")) 1079 }) 1080 }) 1081 1082 When("some provided labels do not have a value part", func() { 1083 BeforeEach(func() { 1084 cmd.RequiredArgs = flag.SetLabelArgs{ 1085 ResourceType: "org", 1086 ResourceName: resourceName, 1087 Labels: []string{"FOO=BAR", "MISSING_EQUALS", "ENV=FAKE"}, 1088 } 1089 }) 1090 1091 It("complains about the missing equal sign", func() { 1092 Expect(executeErr).To(MatchError("Metadata error: no value provided for label 'MISSING_EQUALS'")) 1093 Expect(executeErr).To(HaveOccurred()) 1094 }) 1095 }) 1096 1097 When("the resource type argument is not lowercase", func() { 1098 BeforeEach(func() { 1099 cmd.RequiredArgs = flag.SetLabelArgs{ 1100 ResourceType: "sPaCe", 1101 ResourceName: resourceName, 1102 Labels: []string{"FOO=BAR", "ENV=FAKE"}, 1103 } 1104 fakeActor.UpdateSpaceLabelsBySpaceNameReturns( 1105 v7action.Warnings([]string{"some-warning-1", "some-warning-2"}), 1106 nil, 1107 ) 1108 }) 1109 1110 It("sets the provided labels on the app", func() { 1111 name, orgGUID, labels := fakeActor.UpdateSpaceLabelsBySpaceNameArgsForCall(0) 1112 Expect(name).To(Equal(resourceName), "failed to pass space name") 1113 Expect(orgGUID).To(Equal("some-org-guid")) 1114 Expect(labels).To(BeEquivalentTo(map[string]types.NullString{ 1115 "FOO": types.NewNullString("BAR"), 1116 "ENV": types.NewNullString("FAKE"), 1117 })) 1118 }) 1119 1120 It("prints the flavor text in lowercase", func() { 1121 Expect(testUI.Out).To(Say(regexp.QuoteMeta(`Setting label(s) for space %s`), resourceName)) 1122 }) 1123 }) 1124 }) 1125 }) 1126 1127 When("checking targeted org and space fails", func() { 1128 BeforeEach(func() { 1129 fakeSharedActor.CheckTargetReturns(errors.New("nope")) 1130 }) 1131 1132 It("returns an error", func() { 1133 Expect(executeErr).To(MatchError("nope")) 1134 }) 1135 }) 1136 }) 1137 1138 When("setting labels on stacks", func() { 1139 BeforeEach(func() { 1140 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 1141 fakeActor = new(v7fakes.FakeSetLabelActor) 1142 fakeConfig = new(commandfakes.FakeConfig) 1143 fakeConfig.TargetedOrganizationReturns(configv3.Organization{Name: "fake-org", GUID: "some-org-guid"}) 1144 1145 fakeSharedActor = new(commandfakes.FakeSharedActor) 1146 resourceName = "some-stack" 1147 cmd = SetLabelCommand{ 1148 Actor: fakeActor, 1149 UI: testUI, 1150 Config: fakeConfig, 1151 SharedActor: fakeSharedActor, 1152 } 1153 cmd.RequiredArgs = flag.SetLabelArgs{ 1154 ResourceType: "stack", 1155 ResourceName: resourceName, 1156 } 1157 }) 1158 1159 JustBeforeEach(func() { 1160 executeErr = cmd.Execute(nil) 1161 }) 1162 1163 It("checks that the user is logged in but not necessarily targeted to an org", func() { 1164 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 1165 checkOrg, checkSpace := fakeSharedActor.CheckTargetArgsForCall(0) 1166 Expect(checkOrg).To(BeFalse()) 1167 Expect(checkSpace).To(BeFalse()) 1168 }) 1169 1170 When("checking target succeeds", func() { 1171 BeforeEach(func() { 1172 fakeSharedActor.CheckTargetReturns(nil) 1173 }) 1174 1175 When("fetching current user's name succeeds", func() { 1176 BeforeEach(func() { 1177 fakeConfig.CurrentUserNameReturns("some-user", nil) 1178 }) 1179 1180 When("all the provided labels are valid", func() { 1181 BeforeEach(func() { 1182 cmd.RequiredArgs = flag.SetLabelArgs{ 1183 ResourceType: "stack", 1184 ResourceName: resourceName, 1185 Labels: []string{"FOO=BAR", "ENV=FAKE"}, 1186 } 1187 fakeActor.UpdateStackLabelsByStackNameReturns( 1188 v7action.Warnings([]string{"some-warning-1", "some-warning-2"}), 1189 nil, 1190 ) 1191 }) 1192 1193 When("updating the stack labels succeeds", func() { 1194 It("sets the provided labels on the stack", func() { 1195 Expect(fakeActor.UpdateStackLabelsByStackNameCallCount()).To(Equal(1)) 1196 stackName, labels := fakeActor.UpdateStackLabelsByStackNameArgsForCall(0) 1197 Expect(stackName).To(Equal(resourceName), "failed to pass stack name") 1198 Expect(labels).To(BeEquivalentTo(map[string]types.NullString{ 1199 "FOO": types.NewNullString("BAR"), 1200 "ENV": types.NewNullString("FAKE"), 1201 })) 1202 }) 1203 1204 It("displays a message", func() { 1205 Expect(executeErr).ToNot(HaveOccurred()) 1206 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 1207 Expect(testUI.Out).To(Say(regexp.QuoteMeta(`Setting label(s) for stack %s as some-user...`), resourceName)) 1208 Expect(testUI.Out).To(Say("OK")) 1209 }) 1210 1211 It("prints all warnings", func() { 1212 Expect(testUI.Err).To(Say("some-warning-1")) 1213 Expect(testUI.Err).To(Say("some-warning-2")) 1214 }) 1215 }) 1216 }) 1217 1218 When("updating the application labels fail", func() { 1219 BeforeEach(func() { 1220 cmd.RequiredArgs = flag.SetLabelArgs{ 1221 ResourceType: "org", 1222 ResourceName: resourceName, 1223 Labels: []string{"FOO=BAR", "ENV=FAKE"}, 1224 } 1225 fakeActor.UpdateOrganizationLabelsByOrganizationNameReturns( 1226 v7action.Warnings([]string{"some-warning-1", "some-warning-2"}), 1227 errors.New("some-updating-error"), 1228 ) 1229 }) 1230 1231 It("displays warnings and an error message", func() { 1232 Expect(testUI.Err).To(Say("some-warning-1")) 1233 Expect(testUI.Err).To(Say("some-warning-2")) 1234 Expect(executeErr).To(MatchError("some-updating-error")) 1235 }) 1236 }) 1237 1238 When("some provided labels do not have a value part", func() { 1239 BeforeEach(func() { 1240 cmd.RequiredArgs = flag.SetLabelArgs{ 1241 ResourceType: "org", 1242 ResourceName: resourceName, 1243 Labels: []string{"FOO=BAR", "MISSING_EQUALS", "ENV=FAKE"}, 1244 } 1245 }) 1246 1247 It("complains about the missing equal sign", func() { 1248 Expect(executeErr).To(MatchError("Metadata error: no value provided for label 'MISSING_EQUALS'")) 1249 Expect(executeErr).To(HaveOccurred()) 1250 }) 1251 }) 1252 1253 When("the resource type argument is not lowercase", func() { 1254 BeforeEach(func() { 1255 cmd.RequiredArgs = flag.SetLabelArgs{ 1256 ResourceType: "sTaCk", 1257 ResourceName: resourceName, 1258 Labels: []string{"FOO=BAR", "ENV=FAKE"}, 1259 } 1260 fakeActor.UpdateStackLabelsByStackNameReturns( 1261 v7action.Warnings([]string{"some-warning-1", "some-warning-2"}), 1262 nil, 1263 ) 1264 }) 1265 1266 It("sets the provided labels on the stack", func() { 1267 name, labels := fakeActor.UpdateStackLabelsByStackNameArgsForCall(0) 1268 Expect(name).To(Equal(resourceName), "failed to pass stack name") 1269 Expect(labels).To(BeEquivalentTo(map[string]types.NullString{ 1270 "FOO": types.NewNullString("BAR"), 1271 "ENV": types.NewNullString("FAKE"), 1272 })) 1273 }) 1274 1275 It("prints the flavor text in lowercase", func() { 1276 Expect(testUI.Out).To(Say(regexp.QuoteMeta(`Setting label(s) for stack %s`), resourceName)) 1277 }) 1278 }) 1279 }) 1280 }) 1281 1282 When("checking targeted org and stack fails", func() { 1283 BeforeEach(func() { 1284 fakeSharedActor.CheckTargetReturns(errors.New("nope")) 1285 }) 1286 1287 It("returns an error", func() { 1288 Expect(executeErr).To(MatchError("nope")) 1289 }) 1290 }) 1291 }) 1292 1293 When("setting labels on service-brokers", func() { 1294 BeforeEach(func() { 1295 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 1296 fakeActor = new(v7fakes.FakeSetLabelActor) 1297 fakeConfig = new(commandfakes.FakeConfig) 1298 //fakeConfig.TargetedOrganizationReturns(configv3.Organization{Name: "fake-org", GUID: "some-org-guid"}) 1299 1300 fakeSharedActor = new(commandfakes.FakeSharedActor) 1301 resourceName = "some-service-broker" 1302 cmd = SetLabelCommand{ 1303 Actor: fakeActor, 1304 UI: testUI, 1305 Config: fakeConfig, 1306 SharedActor: fakeSharedActor, 1307 } 1308 cmd.RequiredArgs = flag.SetLabelArgs{ 1309 ResourceType: "service-broker", 1310 ResourceName: resourceName, 1311 } 1312 }) 1313 1314 JustBeforeEach(func() { 1315 executeErr = cmd.Execute(nil) 1316 }) 1317 1318 It("checks that the user is logged in but not necessarily targeted to an org", func() { 1319 Expect(executeErr).NotTo(HaveOccurred()) 1320 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 1321 checkOrg, checkSpace := fakeSharedActor.CheckTargetArgsForCall(0) 1322 Expect(checkOrg).To(BeFalse()) 1323 Expect(checkSpace).To(BeFalse()) 1324 }) 1325 1326 When("checking target succeeds", func() { 1327 BeforeEach(func() { 1328 fakeSharedActor.CheckTargetReturns(nil) 1329 }) 1330 1331 When("fetching current user's name succeeds", func() { 1332 BeforeEach(func() { 1333 fakeConfig.CurrentUserNameReturns("some-user", nil) 1334 }) 1335 1336 When("all the provided labels are valid", func() { 1337 BeforeEach(func() { 1338 cmd.RequiredArgs = flag.SetLabelArgs{ 1339 ResourceType: "service-broker", 1340 ResourceName: resourceName, 1341 Labels: []string{"FOO=BAR", "ENV=FAKE"}, 1342 } 1343 fakeActor.UpdateServiceBrokerLabelsByServiceBrokerNameReturns( 1344 v7action.Warnings([]string{"some-warning-1", "some-warning-2"}), 1345 nil, 1346 ) 1347 }) 1348 1349 When("updating the service-broker labels succeeds", func() { 1350 It("sets the provided labels on the service-broker", func() { 1351 Expect(executeErr).NotTo(HaveOccurred()) 1352 Expect(fakeActor.UpdateServiceBrokerLabelsByServiceBrokerNameCallCount()).To(Equal(1)) 1353 serviceBroker, labels := fakeActor.UpdateServiceBrokerLabelsByServiceBrokerNameArgsForCall(0) 1354 Expect(serviceBroker).To(Equal(resourceName)) 1355 Expect(labels).To(BeEquivalentTo(map[string]types.NullString{ 1356 "FOO": types.NewNullString("BAR"), 1357 "ENV": types.NewNullString("FAKE"), 1358 })) 1359 }) 1360 1361 It("displays a message", func() { 1362 Expect(executeErr).ToNot(HaveOccurred()) 1363 Expect(testUI.Out).To(Say(regexp.QuoteMeta(`Setting label(s) for service-broker %s as some-user...`), resourceName)) 1364 Expect(testUI.Out).To(Say("OK")) 1365 }) 1366 1367 It("prints all warnings", func() { 1368 Expect(testUI.Err).To(Say("some-warning-1")) 1369 Expect(testUI.Err).To(Say("some-warning-2")) 1370 }) 1371 }) 1372 }) 1373 1374 When("updating the service-broker labels fail", func() { 1375 BeforeEach(func() { 1376 cmd.RequiredArgs = flag.SetLabelArgs{ 1377 ResourceType: "service-broker", 1378 ResourceName: resourceName, 1379 Labels: []string{"FOO=BAR", "ENV=FAKE"}, 1380 } 1381 fakeActor.UpdateServiceBrokerLabelsByServiceBrokerNameReturns( 1382 v7action.Warnings([]string{"some-warning-1", "some-warning-2"}), 1383 errors.New("some-updating-error"), 1384 ) 1385 }) 1386 1387 It("displays warnings and an error message", func() { 1388 Expect(testUI.Err).To(Say("some-warning-1")) 1389 Expect(testUI.Err).To(Say("some-warning-2")) 1390 Expect(executeErr).To(MatchError("some-updating-error")) 1391 }) 1392 }) 1393 1394 When("the resource type argument is not lowercase", func() { 1395 BeforeEach(func() { 1396 cmd.RequiredArgs = flag.SetLabelArgs{ 1397 ResourceType: "sErvicE-BrokEr", 1398 ResourceName: resourceName, 1399 Labels: []string{"FOO=BAR", "ENV=FAKE"}, 1400 } 1401 fakeActor.UpdateServiceBrokerLabelsByServiceBrokerNameReturns( 1402 v7action.Warnings([]string{"some-warning-1", "some-warning-2"}), 1403 nil, 1404 ) 1405 }) 1406 1407 It("sets the provided labels on the service-broker", func() { 1408 name, labels := fakeActor.UpdateServiceBrokerLabelsByServiceBrokerNameArgsForCall(0) 1409 Expect(name).To(Equal(resourceName), "failed to pass stack name") 1410 Expect(labels).To(BeEquivalentTo(map[string]types.NullString{ 1411 "FOO": types.NewNullString("BAR"), 1412 "ENV": types.NewNullString("FAKE"), 1413 })) 1414 }) 1415 1416 It("prints the flavor text in lowercase", func() { 1417 Expect(testUI.Out).To(Say(regexp.QuoteMeta(`Setting label(s) for service-broker %s`), resourceName)) 1418 }) 1419 }) 1420 }) 1421 }) 1422 1423 When("checking targeted org and stack fails", func() { 1424 BeforeEach(func() { 1425 fakeSharedActor.CheckTargetReturns(errors.New("nope")) 1426 }) 1427 1428 It("returns an error", func() { 1429 Expect(executeErr).To(MatchError("nope")) 1430 }) 1431 }) 1432 }) 1433 1434 When("an unrecognized resource is specified", func() { 1435 BeforeEach(func() { 1436 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 1437 fakeActor = new(v7fakes.FakeSetLabelActor) 1438 fakeConfig = new(commandfakes.FakeConfig) 1439 fakeSharedActor = new(commandfakes.FakeSharedActor) 1440 resourceName = "some-unrecognized-resource" 1441 cmd = SetLabelCommand{ 1442 Actor: fakeActor, 1443 UI: testUI, 1444 Config: fakeConfig, 1445 SharedActor: fakeSharedActor, 1446 } 1447 cmd.RequiredArgs = flag.SetLabelArgs{ 1448 ResourceType: "unrecognized-resource", 1449 ResourceName: resourceName, 1450 } 1451 }) 1452 1453 JustBeforeEach(func() { 1454 executeErr = cmd.Execute(nil) 1455 }) 1456 1457 It("errors", func() { 1458 Expect(executeErr).To(MatchError("Unsupported resource type of 'unrecognized-resource'")) 1459 }) 1460 }) 1461 })