github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/command/v6/create_shared_domain_command_test.go (about)

     1  package v6_test
     2  
     3  import (
     4  	"errors"
     5  
     6  	"code.cloudfoundry.org/cli/actor/actionerror"
     7  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccversion"
     8  
     9  	"code.cloudfoundry.org/cli/actor/v2action"
    10  
    11  	"code.cloudfoundry.org/cli/command/commandfakes"
    12  	"code.cloudfoundry.org/cli/command/flag"
    13  	"code.cloudfoundry.org/cli/command/translatableerror"
    14  	. "code.cloudfoundry.org/cli/command/v6"
    15  	"code.cloudfoundry.org/cli/command/v6/v6fakes"
    16  	"code.cloudfoundry.org/cli/util/ui"
    17  	. "github.com/onsi/ginkgo"
    18  	. "github.com/onsi/gomega"
    19  	. "github.com/onsi/gomega/gbytes"
    20  )
    21  
    22  var _ = Describe("CreateSharedDomainCommand", func() {
    23  	var (
    24  		testUI           *ui.UI
    25  		fakeConfig       *commandfakes.FakeConfig
    26  		fakeActor        *v6fakes.FakeCreateSharedDomainActor
    27  		fakeSharedActor  *commandfakes.FakeSharedActor
    28  		sharedDomainName string
    29  		username         string
    30  		extraArgs        []string
    31  		cmd              CreateSharedDomainCommand
    32  
    33  		executeErr error
    34  	)
    35  
    36  	BeforeEach(func() {
    37  		testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer())
    38  		fakeConfig = new(commandfakes.FakeConfig)
    39  		fakeActor = new(v6fakes.FakeCreateSharedDomainActor)
    40  		fakeSharedActor = new(commandfakes.FakeSharedActor)
    41  		sharedDomainName = "some-shared-domain-name"
    42  		username = ""
    43  		extraArgs = nil
    44  
    45  		cmd = CreateSharedDomainCommand{
    46  			UI:           testUI,
    47  			Config:       fakeConfig,
    48  			Actor:        fakeActor,
    49  			SharedActor:  fakeSharedActor,
    50  			RequiredArgs: flag.Domain{Domain: sharedDomainName},
    51  		}
    52  	})
    53  
    54  	JustBeforeEach(func() {
    55  		executeErr = cmd.Execute(extraArgs)
    56  	})
    57  
    58  	It("checks for user being logged in", func() {
    59  		Expect(fakeSharedActor.RequireCurrentUserCallCount()).To(Equal(1))
    60  	})
    61  
    62  	When("too many arguments are provided", func() {
    63  		BeforeEach(func() {
    64  			extraArgs = []string{"extra"}
    65  		})
    66  
    67  		It("returns a TooManyArgumentsError", func() {
    68  			Expect(executeErr).To(MatchError(translatableerror.TooManyArgumentsError{
    69  				ExtraArgument: "extra",
    70  			}))
    71  		})
    72  	})
    73  
    74  	When("user is logged in", func() {
    75  		BeforeEach(func() {
    76  			username = "some-user-name"
    77  			fakeSharedActor.RequireCurrentUserReturns(username, nil)
    78  		})
    79  
    80  		When("the user is logged in as an admin", func() {
    81  			When("--router-group is passed", func() {
    82  				When("the router group does not exists", func() {
    83  					var actorError error
    84  					BeforeEach(func() {
    85  						cmd.RouterGroup = "some-router-group"
    86  						actorError = actionerror.RouterGroupNotFoundError{Name: cmd.RouterGroup}
    87  						fakeActor.GetRouterGroupByNameReturns(v2action.RouterGroup{}, actorError)
    88  					})
    89  
    90  					It("should fail and return a translateable error", func() {
    91  						Expect(testUI.Out).To(Say("Creating shared domain %s as %s...", sharedDomainName, username))
    92  						namePassed, _ := fakeActor.GetRouterGroupByNameArgsForCall(0)
    93  						Expect(namePassed).To(Equal(cmd.RouterGroup))
    94  						Expect(executeErr).To(MatchError(actorError))
    95  					})
    96  				})
    97  
    98  				When("the router group is found", func() {
    99  					var routerGroupGUID string
   100  
   101  					BeforeEach(func() {
   102  						cmd.RouterGroup = "some-router-group"
   103  						routerGroupGUID = "some-guid"
   104  						fakeActor.GetRouterGroupByNameReturns(v2action.RouterGroup{
   105  							Name: cmd.RouterGroup,
   106  							GUID: routerGroupGUID,
   107  						}, nil)
   108  					})
   109  
   110  					It("should create the domain with the router group", func() {
   111  						domainName, routerGroup, _ := fakeActor.CreateSharedDomainArgsForCall(0)
   112  						Expect(domainName).To(Equal(sharedDomainName))
   113  						Expect(routerGroup).To(Equal(v2action.RouterGroup{
   114  							Name: cmd.RouterGroup,
   115  							GUID: routerGroupGUID,
   116  						}))
   117  					})
   118  				})
   119  			})
   120  
   121  			When("--router-group is not passed", func() {
   122  				BeforeEach(func() {
   123  					cmd.RouterGroup = ""
   124  				})
   125  
   126  				It("does not call fetch the router group", func() {
   127  					Expect(fakeActor.GetRouterGroupByNameCallCount()).To(Equal(0))
   128  				})
   129  
   130  				It("attempts to create the shared domain", func() {
   131  					domainNamePassed, routerGroup, _ := fakeActor.CreateSharedDomainArgsForCall(0)
   132  					Expect(domainNamePassed).To(Equal(cmd.RequiredArgs.Domain))
   133  					Expect(routerGroup).To(Equal(v2action.RouterGroup{}))
   134  				})
   135  			})
   136  		})
   137  
   138  		When("--internal and --router-group are passed", func() {
   139  			BeforeEach(func() {
   140  				fakeActor.CloudControllerAPIVersionReturns(ccversion.MinVersionInternalDomainV2)
   141  				cmd.RouterGroup = "my-router-group"
   142  				cmd.Internal = true
   143  			})
   144  
   145  			It("returns an error", func() {
   146  				Expect(executeErr).To(MatchError(translatableerror.ArgumentCombinationError{
   147  					Args: []string{"--router-group", "--internal"},
   148  				}))
   149  			})
   150  		})
   151  
   152  		When("--internal is passed", func() {
   153  			BeforeEach(func() {
   154  				cmd.Internal = true
   155  			})
   156  
   157  			When("the version is less than the minimum version", func() {
   158  				When("using the V2 API", func() {
   159  					BeforeEach(func() {
   160  						fakeActor.CloudControllerAPIVersionReturns(ccversion.MinSupportedV2ClientVersion)
   161  					})
   162  
   163  					It("returns an error", func() {
   164  						Expect(executeErr).To(MatchError(translatableerror.MinimumCFAPIVersionNotMetError{
   165  							Command:        "Option '--internal'",
   166  							CurrentVersion: ccversion.MinSupportedV2ClientVersion,
   167  							MinimumVersion: ccversion.MinVersionInternalDomainV2,
   168  						}))
   169  					})
   170  				})
   171  			})
   172  
   173  			When("the version is above the minimum version", func() {
   174  				BeforeEach(func() {
   175  					fakeActor.CloudControllerAPIVersionReturns(ccversion.MinVersionInternalDomainV2)
   176  				})
   177  
   178  				It("should create a shared internal domain", func() {
   179  					Expect(executeErr).ToNot(HaveOccurred())
   180  					Expect(testUI.Out).To(Say("Creating shared domain %s as %s...", sharedDomainName, username))
   181  					domainNamePassed, routerGroup, isInternal := fakeActor.CreateSharedDomainArgsForCall(0)
   182  					Expect(domainNamePassed).To(Equal(cmd.RequiredArgs.Domain))
   183  					Expect(routerGroup).To(Equal(v2action.RouterGroup{}))
   184  					Expect(isInternal).To(BeTrue())
   185  				})
   186  			})
   187  		})
   188  
   189  		When("the user is not logged in as an admin", func() {
   190  			var expectedError error
   191  
   192  			BeforeEach(func() {
   193  				expectedError = errors.New("must be admin")
   194  				fakeActor.CreateSharedDomainReturns(v2action.Warnings{"warning-1", "warning-2"}, expectedError)
   195  			})
   196  
   197  			It("returns the unauthorized error from CC API", func() {
   198  				Expect(fakeActor.CreateSharedDomainCallCount()).To(Equal(1))
   199  				Expect(executeErr).To(MatchError(expectedError))
   200  			})
   201  		})
   202  	})
   203  
   204  	When("the user is not logger in", func() {
   205  		expectedErr := errors.New("not logged in and/or can't verify login because of error")
   206  
   207  		BeforeEach(func() {
   208  			fakeSharedActor.RequireCurrentUserReturns("", expectedErr)
   209  		})
   210  
   211  		It("returns the error", func() {
   212  			Expect(executeErr).To(MatchError(expectedErr))
   213  		})
   214  	})
   215  })