github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+incompatible/command/v6/create_route_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/actor/v2action" 8 "code.cloudfoundry.org/cli/command/commandfakes" 9 "code.cloudfoundry.org/cli/command/flag" 10 "code.cloudfoundry.org/cli/command/translatableerror" 11 . "code.cloudfoundry.org/cli/command/v6" 12 "code.cloudfoundry.org/cli/command/v6/v6fakes" 13 "code.cloudfoundry.org/cli/types" 14 "code.cloudfoundry.org/cli/util/configv3" 15 "code.cloudfoundry.org/cli/util/ui" 16 . "github.com/onsi/ginkgo" 17 . "github.com/onsi/ginkgo/extensions/table" 18 . "github.com/onsi/gomega" 19 . "github.com/onsi/gomega/gbytes" 20 ) 21 22 var _ = Describe("Create Route Command", func() { 23 var ( 24 cmd CreateRouteCommand 25 testUI *ui.UI 26 fakeConfig *commandfakes.FakeConfig 27 fakeSharedActor *commandfakes.FakeSharedActor 28 fakeActor *v6fakes.FakeCreateRouteActor 29 binaryName string 30 ) 31 32 BeforeEach(func() { 33 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 34 fakeConfig = new(commandfakes.FakeConfig) 35 fakeSharedActor = new(commandfakes.FakeSharedActor) 36 fakeActor = new(v6fakes.FakeCreateRouteActor) 37 38 cmd = CreateRouteCommand{ 39 UI: testUI, 40 Config: fakeConfig, 41 SharedActor: fakeSharedActor, 42 Actor: fakeActor, 43 } 44 45 cmd.RequiredArgs.Space = "some-space" 46 cmd.RequiredArgs.Domain = "some-domain" 47 48 binaryName = "faceman" 49 fakeConfig.BinaryNameReturns(binaryName) 50 }) 51 52 DescribeTable("argument combinations", 53 func(expectedErr error, hostname string, path string, port flag.Port, randomPort bool) { 54 cmd.Port = port 55 cmd.Hostname = hostname 56 cmd.Path = path 57 cmd.RandomPort = randomPort 58 59 executeErr := cmd.Execute(nil) 60 if expectedErr == nil { 61 Expect(executeErr).To(BeNil()) 62 } else { 63 Expect(executeErr).To(Equal(expectedErr)) 64 } 65 }, 66 Entry("hostname", nil, "some-hostname", "", flag.Port{NullInt: types.NullInt{IsSet: false}}, false), 67 Entry("path", nil, "", "some-path", flag.Port{NullInt: types.NullInt{IsSet: false}}, false), 68 Entry("hostname and path", nil, "some-hostname", "some-path", flag.Port{NullInt: types.NullInt{IsSet: false}}, false), 69 Entry("hostname and port", translatableerror.ArgumentCombinationError{Args: []string{"--hostname", "--port"}}, "some-hostname", "", flag.Port{NullInt: types.NullInt{IsSet: true}}, false), 70 Entry("path and port", translatableerror.ArgumentCombinationError{Args: []string{"--path", "--port"}}, "", "some-path", flag.Port{NullInt: types.NullInt{IsSet: true}}, false), 71 Entry("hostname, path, and port", translatableerror.ArgumentCombinationError{Args: []string{"--hostname", "--path", "--port"}}, "some-hostname", "some-path", flag.Port{NullInt: types.NullInt{IsSet: true}}, false), 72 Entry("hostname and random port", translatableerror.ArgumentCombinationError{Args: []string{"--hostname", "--random-port"}}, "some-hostname", "", flag.Port{NullInt: types.NullInt{IsSet: false}}, true), 73 Entry("path and random port", translatableerror.ArgumentCombinationError{Args: []string{"--path", "--random-port"}}, "", "some-path", flag.Port{NullInt: types.NullInt{IsSet: false}}, true), 74 Entry("hostname, path, and random port", translatableerror.ArgumentCombinationError{Args: []string{"--hostname", "--path", "--random-port"}}, "some-hostname", "some-path", flag.Port{NullInt: types.NullInt{IsSet: false}}, true), 75 Entry("port", nil, "", "", flag.Port{NullInt: types.NullInt{IsSet: true}}, false), 76 Entry("random port", nil, "", "", flag.Port{NullInt: types.NullInt{IsSet: false}}, true), 77 Entry("port and random port", translatableerror.ArgumentCombinationError{Args: []string{"--port", "--random-port"}}, "", "", flag.Port{NullInt: types.NullInt{IsSet: true}}, true), 78 ) 79 80 When("all the arguments check out", func() { 81 var executeErr error 82 83 JustBeforeEach(func() { 84 executeErr = cmd.Execute(nil) 85 }) 86 87 When("checking target fails", func() { 88 BeforeEach(func() { 89 fakeSharedActor.CheckTargetReturns(translatableerror.NotLoggedInError{BinaryName: binaryName}) 90 }) 91 92 It("returns an error if the check fails", func() { 93 Expect(executeErr).To(MatchError(translatableerror.NotLoggedInError{BinaryName: "faceman"})) 94 95 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 96 checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0) 97 Expect(checkTargetedOrg).To(BeTrue()) 98 Expect(checkTargetedSpace).To(BeFalse()) 99 }) 100 }) 101 102 When("getting the current user returns an error", func() { 103 var expectedErr error 104 105 BeforeEach(func() { 106 expectedErr = errors.New("getting current user error") 107 fakeConfig.CurrentUserReturns( 108 configv3.User{}, 109 expectedErr) 110 }) 111 112 It("returns the error", func() { 113 Expect(executeErr).To(MatchError(expectedErr)) 114 }) 115 }) 116 117 When("the user is logged in, and the org is targeted", func() { 118 BeforeEach(func() { 119 fakeConfig.HasTargetedOrganizationReturns(true) 120 fakeConfig.TargetedOrganizationReturns(configv3.Organization{GUID: "some-org-guid", Name: "some-org"}) 121 fakeConfig.CurrentUserReturns( 122 configv3.User{Name: "some-user"}, 123 nil) 124 }) 125 126 When("no flags are provided", func() { 127 BeforeEach(func() { 128 fakeActor.CreateRouteWithExistenceCheckReturns(v2action.Route{ 129 Domain: v2action.Domain{ 130 Name: "some-domain", 131 }}, v2action.Warnings{"create-route-warning-1", "create-route-warning-2"}, nil) 132 }) 133 134 It("creates a route with existence check", func() { 135 Expect(executeErr).ToNot(HaveOccurred()) 136 Expect(testUI.Out).To(Say(`Creating route some-domain for org some-org / space some-space as some-user\.\.\.`)) 137 Expect(testUI.Err).To(Say("create-route-warning-1")) 138 Expect(testUI.Err).To(Say("create-route-warning-2")) 139 Expect(testUI.Out).To(Say(`Route some-domain has been created\.`)) 140 Expect(testUI.Out).To(Say("OK")) 141 142 Expect(fakeActor.CreateRouteWithExistenceCheckCallCount()).To(Equal(1)) 143 orgGUID, spaceName, route, generatePort := fakeActor.CreateRouteWithExistenceCheckArgsForCall(0) 144 Expect(orgGUID).To(Equal("some-org-guid")) 145 Expect(spaceName).To(Equal("some-space")) 146 Expect(route.Host).To(BeEmpty()) 147 Expect(route.Path).To(BeEmpty()) 148 Expect(route.Port).To(Equal(types.NullInt{IsSet: false})) 149 Expect(generatePort).To(BeFalse()) 150 }) 151 }) 152 153 When("host and path flags are provided", func() { 154 BeforeEach(func() { 155 cmd.Hostname = "some-host" 156 cmd.Path = "some-path" 157 158 fakeActor.CreateRouteWithExistenceCheckReturns(v2action.Route{ 159 Domain: v2action.Domain{ 160 Name: "some-domain", 161 }, 162 Host: "some-host", 163 Path: "some-path", 164 }, v2action.Warnings{"create-route-warning-1", "create-route-warning-2"}, nil) 165 }) 166 167 It("creates a route with existence check", func() { 168 Expect(executeErr).ToNot(HaveOccurred()) 169 Expect(testUI.Out).To(Say(`Creating route some-host.some-domain/some-path for org some-org / space some-space as some-user\.\.\.`)) 170 Expect(testUI.Err).To(Say("create-route-warning-1")) 171 Expect(testUI.Err).To(Say("create-route-warning-2")) 172 Expect(testUI.Out).To(Say(`Route some-host.some-domain/some-path has been created\.`)) 173 Expect(testUI.Out).To(Say("OK")) 174 175 Expect(fakeActor.CreateRouteWithExistenceCheckCallCount()).To(Equal(1)) 176 orgGUID, spaceName, route, generatePort := fakeActor.CreateRouteWithExistenceCheckArgsForCall(0) 177 Expect(orgGUID).To(Equal("some-org-guid")) 178 Expect(spaceName).To(Equal("some-space")) 179 Expect(route.Host).To(Equal("some-host")) 180 Expect(route.Path).To(Equal("some-path")) 181 Expect(route.Port).To(Equal(types.NullInt{IsSet: false})) 182 Expect(generatePort).To(BeFalse()) 183 }) 184 }) 185 186 When("port flag is provided", func() { 187 BeforeEach(func() { 188 cmd.Port = flag.Port{NullInt: types.NullInt{Value: 42, IsSet: true}} 189 190 fakeActor.CreateRouteWithExistenceCheckReturns(v2action.Route{ 191 Domain: v2action.Domain{ 192 Name: "some-domain", 193 }, 194 Port: types.NullInt{IsSet: true, Value: 42}, 195 }, v2action.Warnings{"create-route-warning-1", "create-route-warning-2"}, nil) 196 }) 197 198 It("creates a route with existence check", func() { 199 Expect(executeErr).ToNot(HaveOccurred()) 200 Expect(testUI.Out).To(Say(`Creating route some-domain:42 for org some-org / space some-space as some-user\.\.\.`)) 201 Expect(testUI.Err).To(Say("create-route-warning-1")) 202 Expect(testUI.Err).To(Say("create-route-warning-2")) 203 Expect(testUI.Out).To(Say(`Route some-domain:42 has been created\.`)) 204 Expect(testUI.Out).To(Say("OK")) 205 206 Expect(fakeActor.CreateRouteWithExistenceCheckCallCount()).To(Equal(1)) 207 orgGUID, spaceName, route, generatePort := fakeActor.CreateRouteWithExistenceCheckArgsForCall(0) 208 Expect(orgGUID).To(Equal("some-org-guid")) 209 Expect(spaceName).To(Equal("some-space")) 210 Expect(route.Host).To(BeEmpty()) 211 Expect(route.Path).To(BeEmpty()) 212 Expect(route.Port).To(Equal(types.NullInt{IsSet: true, Value: 42})) 213 Expect(generatePort).To(BeFalse()) 214 }) 215 }) 216 217 When("random-port flag is provided", func() { 218 BeforeEach(func() { 219 cmd.RandomPort = true 220 fakeActor.CreateRouteWithExistenceCheckReturns(v2action.Route{ 221 Domain: v2action.Domain{ 222 Name: "some-domain", 223 }, 224 Port: types.NullInt{IsSet: true, Value: 1115}, 225 }, v2action.Warnings{"create-route-warning-1", "create-route-warning-2"}, nil) 226 }) 227 228 It("creates a route with existence check", func() { 229 Expect(executeErr).ToNot(HaveOccurred()) 230 Expect(testUI.Out).To(Say(`Creating route some-domain for org some-org / space some-space as some-user\.\.\.`)) 231 Expect(testUI.Err).To(Say("create-route-warning-1")) 232 Expect(testUI.Err).To(Say("create-route-warning-2")) 233 Expect(testUI.Out).To(Say(`Route some-domain:1115 has been created\.`)) 234 Expect(testUI.Out).To(Say("OK")) 235 236 Expect(fakeActor.CreateRouteWithExistenceCheckCallCount()).To(Equal(1)) 237 orgGUID, spaceName, route, generatePort := fakeActor.CreateRouteWithExistenceCheckArgsForCall(0) 238 Expect(orgGUID).To(Equal("some-org-guid")) 239 Expect(spaceName).To(Equal("some-space")) 240 Expect(route.Host).To(BeEmpty()) 241 Expect(route.Path).To(BeEmpty()) 242 Expect(route.Port).To(Equal(types.NullInt{IsSet: false})) 243 Expect(generatePort).To(BeTrue()) 244 }) 245 }) 246 247 When("creating route returns a DomainNotFoundError error", func() { 248 BeforeEach(func() { 249 fakeActor.CreateRouteWithExistenceCheckReturns( 250 v2action.Route{}, 251 v2action.Warnings{"create-route-warning-1", "create-route-warning-2"}, 252 actionerror.DomainNotFoundError{Name: "some-domain"}, 253 ) 254 }) 255 256 It("prints warnings and returns an error", func() { 257 Expect(executeErr).To(HaveOccurred()) 258 Expect(executeErr).To(MatchError(actionerror.DomainNotFoundError{Name: "some-domain"})) 259 260 Expect(testUI.Out).To(Say(`Creating route some-domain for org some-org / space some-space as some-user\.\.\.`)) 261 Expect(testUI.Err).To(Say("create-route-warning-1")) 262 Expect(testUI.Err).To(Say("create-route-warning-2")) 263 Expect(testUI.Out).NotTo(Say("OK")) 264 265 Expect(fakeActor.CreateRouteWithExistenceCheckCallCount()).To(Equal(1)) 266 }) 267 }) 268 269 When("creating route returns a RouteAlreadyExistsError error", func() { 270 BeforeEach(func() { 271 cmd.Hostname = "some-host" 272 273 fakeActor.CreateRouteWithExistenceCheckReturns( 274 v2action.Route{}, 275 v2action.Warnings{"create-route-warning-1", "create-route-warning-2"}, 276 actionerror.RouteAlreadyExistsError{ 277 Route: v2action.Route{Host: "some-host"}.String(), 278 }, 279 ) 280 }) 281 282 It("prints warnings and returns an error", func() { 283 Expect(executeErr).NotTo(HaveOccurred()) 284 285 Expect(testUI.Out).To(Say(`Creating route some-host\.some-domain for org some-org / space some-space as some-user\.\.\.`)) 286 Expect(testUI.Err).To(Say("create-route-warning-1")) 287 Expect(testUI.Err).To(Say("create-route-warning-2")) 288 Expect(testUI.Err).To(Say(`Route some-host\.some-domain already exists\.`)) 289 Expect(testUI.Out).To(Say("OK")) 290 291 Expect(fakeActor.CreateRouteWithExistenceCheckCallCount()).To(Equal(1)) 292 }) 293 }) 294 295 When("creating route returns a generic error", func() { 296 var createRouteErr error 297 BeforeEach(func() { 298 createRouteErr = errors.New("Oh nooes") 299 fakeActor.CreateRouteWithExistenceCheckReturns(v2action.Route{}, v2action.Warnings{"create-route-warning-1", "create-route-warning-2"}, createRouteErr) 300 }) 301 302 It("prints warnings and returns an error", func() { 303 Expect(executeErr).To(HaveOccurred()) 304 Expect(executeErr).To(MatchError(createRouteErr)) 305 306 Expect(testUI.Out).To(Say(`Creating route some-domain for org some-org / space some-space as some-user\.\.\.`)) 307 Expect(testUI.Err).To(Say("create-route-warning-1")) 308 Expect(testUI.Err).To(Say("create-route-warning-2")) 309 Expect(testUI.Out).NotTo(Say("OK")) 310 311 Expect(fakeActor.CreateRouteWithExistenceCheckCallCount()).To(Equal(1)) 312 }) 313 }) 314 }) 315 }) 316 })