github.com/LukasHeimann/cloudfoundrycli/v8@v8.4.4/command/v7/share_service_command_test.go (about)

     1  package v7_test
     2  
     3  import (
     4  	"errors"
     5  
     6  	"github.com/LukasHeimann/cloudfoundrycli/v8/util/configv3"
     7  
     8  	"github.com/LukasHeimann/cloudfoundrycli/v8/command/flag"
     9  
    10  	"github.com/LukasHeimann/cloudfoundrycli/v8/types"
    11  
    12  	"github.com/LukasHeimann/cloudfoundrycli/v8/actor/v7action"
    13  
    14  	"github.com/LukasHeimann/cloudfoundrycli/v8/command/commandfakes"
    15  	. "github.com/LukasHeimann/cloudfoundrycli/v8/command/v7"
    16  	"github.com/LukasHeimann/cloudfoundrycli/v8/command/v7/v7fakes"
    17  	"github.com/LukasHeimann/cloudfoundrycli/v8/util/ui"
    18  	. "github.com/onsi/ginkgo"
    19  	. "github.com/onsi/gomega"
    20  	. "github.com/onsi/gomega/gbytes"
    21  )
    22  
    23  var _ = Describe("share-service command", func() {
    24  	var (
    25  		cmd             ShareServiceCommand
    26  		testUI          *ui.UI
    27  		fakeConfig      *commandfakes.FakeConfig
    28  		fakeSharedActor *commandfakes.FakeSharedActor
    29  		fakeActor       *v7fakes.FakeActor
    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(v7fakes.FakeActor)
    38  
    39  		cmd = ShareServiceCommand{
    40  			BaseCommand: BaseCommand{
    41  				UI:          testUI,
    42  				Config:      fakeConfig,
    43  				SharedActor: fakeSharedActor,
    44  				Actor:       fakeActor,
    45  			},
    46  		}
    47  	})
    48  
    49  	JustBeforeEach(func() {
    50  		executeErr = cmd.Execute(nil)
    51  	})
    52  
    53  	It("checks the user is logged in, and targeting an org and space", func() {
    54  		Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1))
    55  		orgChecked, spaceChecked := fakeSharedActor.CheckTargetArgsForCall(0)
    56  		Expect(orgChecked).To(BeTrue())
    57  		Expect(spaceChecked).To(BeTrue())
    58  	})
    59  
    60  	Context("user not targeting space", func() {
    61  		BeforeEach(func() {
    62  			fakeSharedActor.CheckTargetReturns(errors.New("space not targeted"))
    63  		})
    64  
    65  		It("fails the command", func() {
    66  			Expect(executeErr).To(Not(BeNil()))
    67  			Expect(executeErr.Error()).To(ContainSubstring("space not targeted"))
    68  		})
    69  	})
    70  
    71  	Context("user is targeting a space and org", func() {
    72  		var (
    73  			expectedServiceInstanceName = "fake-service-instance-name"
    74  			expectedSpaceName           = "fake-space-name"
    75  			expectedTargetedSpaceGuid   = "fake-space-guid"
    76  			expectedTargetedOrgName     = "fake-org-name"
    77  			expectedTargetedOrgGuid     = "fake-org-guid"
    78  			expectedUser                = "fake-username"
    79  		)
    80  
    81  		BeforeEach(func() {
    82  			cmd.RequiredArgs.ServiceInstance = flag.TrimmedString(expectedServiceInstanceName)
    83  			cmd.SpaceName = expectedSpaceName
    84  
    85  			fakeSharedActor.CheckTargetReturns(nil)
    86  			fakeConfig.TargetedSpaceReturns(configv3.Space{GUID: expectedTargetedSpaceGuid})
    87  			fakeConfig.TargetedOrganizationReturns(configv3.Organization{GUID: expectedTargetedOrgGuid, Name: expectedTargetedOrgName})
    88  			fakeActor.GetCurrentUserReturns(configv3.User{Name: expectedUser}, nil)
    89  		})
    90  
    91  		When("the share completes successfully", func() {
    92  			BeforeEach(func() {
    93  				fakeActor.ShareServiceInstanceToSpaceAndOrgReturns(v7action.Warnings{"warning one", "warning two"}, nil)
    94  			})
    95  
    96  			It("returns an OK message", func() {
    97  				Expect(executeErr).To(BeNil())
    98  
    99  				Expect(testUI.Out).To(
   100  					Say(`Sharing service instance %s into org %s / space %s as %s`,
   101  						expectedServiceInstanceName,
   102  						expectedTargetedOrgName,
   103  						expectedSpaceName,
   104  						expectedUser))
   105  				Expect(testUI.Out).To(Say(`OK`))
   106  				Expect(testUI.Err).To(SatisfyAll(
   107  					Say("warning one"),
   108  					Say("warning two"),
   109  				))
   110  			})
   111  		})
   112  
   113  		It("calls the actor to share in specified space and targeted org", func() {
   114  			Expect(fakeActor.ShareServiceInstanceToSpaceAndOrgCallCount()).To(Equal(1))
   115  
   116  			actualServiceInstance, actualTargetedSpace, actualTargetedOrg, actualSharingParams := fakeActor.ShareServiceInstanceToSpaceAndOrgArgsForCall(0)
   117  			Expect(actualServiceInstance).To(Equal(expectedServiceInstanceName))
   118  			Expect(actualTargetedSpace).To(Equal(expectedTargetedSpaceGuid))
   119  			Expect(actualTargetedOrg).To(Equal(expectedTargetedOrgGuid))
   120  			Expect(actualSharingParams).To(Equal(v7action.ServiceInstanceSharingParams{
   121  				SpaceName: expectedSpaceName,
   122  				OrgName:   types.OptionalString{},
   123  			}))
   124  		})
   125  
   126  		When("organization flag is specified", func() {
   127  			var expectedSpecifiedOrgName = "fake-org-name"
   128  
   129  			BeforeEach(func() {
   130  				setFlag(&cmd, "-o", flag.OptionalString{IsSet: true, Value: expectedSpecifiedOrgName})
   131  			})
   132  
   133  			It("calls the actor to share in specified space and org", func() {
   134  				Expect(fakeActor.ShareServiceInstanceToSpaceAndOrgCallCount()).To(Equal(1))
   135  
   136  				_, _, _, actualSharingParams := fakeActor.ShareServiceInstanceToSpaceAndOrgArgsForCall(0)
   137  				Expect(actualSharingParams).To(Equal(v7action.ServiceInstanceSharingParams{
   138  					SpaceName: expectedSpaceName,
   139  					OrgName:   types.NewOptionalString(expectedSpecifiedOrgName),
   140  				}))
   141  			})
   142  		})
   143  
   144  		When("the actor errors", func() {
   145  			BeforeEach(func() {
   146  				fakeSharedActor.CheckTargetReturns(nil)
   147  				fakeActor.ShareServiceInstanceToSpaceAndOrgReturns(v7action.Warnings{}, errors.New("test error"))
   148  			})
   149  
   150  			It("fails with an error", func() {
   151  				Expect(executeErr).To(Not(BeNil()))
   152  				Expect(executeErr.Error()).To(ContainSubstring("test error"))
   153  			})
   154  		})
   155  	})
   156  
   157  	Context("pre-share errors", func() {
   158  		When("checking the target returns an error", func() {
   159  			BeforeEach(func() {
   160  				fakeSharedActor.CheckTargetReturns(errors.New("explode"))
   161  			})
   162  
   163  			It("returns the error", func() {
   164  				Expect(executeErr).To(MatchError("explode"))
   165  			})
   166  		})
   167  
   168  		When("getting the username fails", func() {
   169  			BeforeEach(func() {
   170  				fakeActor.GetCurrentUserReturns(configv3.User{}, errors.New("boom"))
   171  			})
   172  
   173  			It("returns the error", func() {
   174  				Expect(executeErr).To(MatchError("boom"))
   175  			})
   176  		})
   177  	})
   178  })