github.com/loafoe/cli@v7.1.0+incompatible/command/v7/enable_service_access_command_test.go (about) 1 package v7_test 2 3 import ( 4 "errors" 5 6 "code.cloudfoundry.org/cli/actor/v7action" 7 "code.cloudfoundry.org/cli/command/commandfakes" 8 "code.cloudfoundry.org/cli/command/flag" 9 . "code.cloudfoundry.org/cli/command/v7" 10 "code.cloudfoundry.org/cli/command/v7/v7fakes" 11 "code.cloudfoundry.org/cli/util/configv3" 12 "code.cloudfoundry.org/cli/util/ui" 13 . "github.com/onsi/ginkgo" 14 . "github.com/onsi/ginkgo/extensions/table" 15 . "github.com/onsi/gomega" 16 . "github.com/onsi/gomega/gbytes" 17 ) 18 19 var _ = Describe("enable-service-access command", func() { 20 var ( 21 cmd EnableServiceAccessCommand 22 testUI *ui.UI 23 fakeConfig *commandfakes.FakeConfig 24 fakeSharedActor *commandfakes.FakeSharedActor 25 fakeActor *v7fakes.FakeActor 26 ) 27 28 BeforeEach(func() { 29 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 30 fakeConfig = new(commandfakes.FakeConfig) 31 fakeSharedActor = new(commandfakes.FakeSharedActor) 32 fakeActor = new(v7fakes.FakeActor) 33 34 cmd = EnableServiceAccessCommand{ 35 BaseCommand: BaseCommand{ 36 UI: testUI, 37 Config: fakeConfig, 38 SharedActor: fakeSharedActor, 39 Actor: fakeActor, 40 }, 41 } 42 43 setPositionalFlags(&cmd, "some-service") 44 }) 45 46 It("checks the target", func() { 47 err := cmd.Execute(nil) 48 Expect(err).NotTo(HaveOccurred()) 49 50 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 51 org, space := fakeSharedActor.CheckTargetArgsForCall(0) 52 Expect(org).To(BeFalse()) 53 Expect(space).To(BeFalse()) 54 }) 55 56 DescribeTable( 57 "message text", 58 func(plan, org, broker, expected string) { 59 cmd.RequiredArgs = flag.Service{ServiceOffering: "fake-service"} 60 fakeConfig.CurrentUserReturns(configv3.User{Name: "fake-user"}, nil) 61 62 setFlag(&cmd, "-p", plan) 63 setFlag(&cmd, "-o", org) 64 setFlag(&cmd, "-b", broker) 65 66 err := cmd.Execute(nil) 67 Expect(err).NotTo(HaveOccurred()) 68 69 Expect(testUI.Out).To(Say(expected)) 70 }, 71 Entry("no flags", "", "", "", 72 `Enabling access to all plans of service offering fake-service for all orgs as fake-user\.\.\.`), 73 Entry("plan", "fake-plan", "", "", 74 `Enabling access to plan fake-plan of service offering fake-service for all orgs as fake-user\.\.\.`), 75 Entry("org", "", "fake-org", "", 76 `Enabling access to all plans of service offering fake-service for org fake-org as fake-user\.\.\.`), 77 Entry("broker", "", "", "fake-broker", 78 `Enabling access to all plans of service offering fake-service from broker fake-broker for all orgs as fake-user\.\.\.`), 79 Entry("plan and org", "fake-plan", "fake-org", "", 80 `Enabling access to plan fake-plan of service offering fake-service for org fake-org as fake-user\.\.\.`), 81 Entry("plan and broker", "fake-plan", "", "fake-broker", 82 `Enabling access to plan fake-plan of service offering fake-service from broker fake-broker for all orgs as fake-user\.\.\.`), 83 Entry("plan, org and broker", "fake-plan", "fake-org", "fake-broker", 84 `Enabling access to plan fake-plan of service offering fake-service from broker fake-broker for org fake-org as fake-user\.\.\.`), 85 Entry("broker and org", "", "fake-org", "fake-broker", 86 `Enabling access to all plans of service offering fake-service from broker fake-broker for org fake-org as fake-user\.\.\.`), 87 ) 88 89 It("calls the actor with the right arguments", func() { 90 const ( 91 offeringName = "some-offering" 92 planName = "some-plan" 93 orgName = "some-org" 94 brokerName = "some-broker" 95 ) 96 97 setFlag(&cmd, "-b", brokerName) 98 setFlag(&cmd, "-o", orgName) 99 setFlag(&cmd, "-p", planName) 100 setPositionalFlags(&cmd, offeringName) 101 102 fakeActor.EnableServiceAccessReturns(v7action.SkippedPlans{}, v7action.Warnings{"a warning"}, nil) 103 104 err := cmd.Execute(nil) 105 106 Expect(err).NotTo(HaveOccurred()) 107 Expect(testUI.Out).To(Say("OK")) 108 Expect(testUI.Err).To(Say("a warning")) 109 110 Expect(fakeActor.EnableServiceAccessCallCount()).To(Equal(1)) 111 112 actualOfferingName, actualBrokerName, actualOrgName, actualPlanName := fakeActor.EnableServiceAccessArgsForCall(0) 113 Expect(actualOfferingName).To(Equal(offeringName)) 114 Expect(actualPlanName).To(Equal(planName)) 115 Expect(actualOrgName).To(Equal(orgName)) 116 Expect(actualBrokerName).To(Equal(brokerName)) 117 }) 118 119 It("reports on skipped plans", func() { 120 const offeringName = "some-offering" 121 setPositionalFlags(&cmd, offeringName) 122 123 fakeActor.EnableServiceAccessReturns( 124 v7action.SkippedPlans{"skipped_1", "skipped_2"}, 125 v7action.Warnings{"a warning"}, 126 nil, 127 ) 128 129 err := cmd.Execute(nil) 130 131 Expect(err).NotTo(HaveOccurred()) 132 Expect(testUI.Out).To(Say("Did not update plan skipped_1 as it already has visibility all\\.")) 133 Expect(testUI.Out).To(Say("Did not update plan skipped_2 as it already has visibility all\\.")) 134 Expect(testUI.Out).To(Say("OK")) 135 }) 136 137 When("the actor fails", func() { 138 It("prints the error", func() { 139 fakeActor.EnableServiceAccessReturns(v7action.SkippedPlans{}, v7action.Warnings{"a warning"}, errors.New("access error")) 140 141 err := cmd.Execute(nil) 142 Expect(err).To(MatchError("access error")) 143 Expect(testUI.Err).To(Say("a warning")) 144 }) 145 }) 146 147 When("checking the target fails", func() { 148 BeforeEach(func() { 149 fakeSharedActor.CheckTargetReturns(errors.New("unable to check target")) 150 }) 151 152 It("returns an error", func() { 153 err := cmd.Execute(nil) 154 Expect(err).To(MatchError("unable to check target")) 155 }) 156 }) 157 })