code.cloudfoundry.org/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  })