github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+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 })