github.com/loafoe/cli@v7.1.0+incompatible/command/v7/routes_command_test.go (about) 1 package v7_test 2 3 import ( 4 "errors" 5 6 "code.cloudfoundry.org/cli/actor/actionerror" 7 "code.cloudfoundry.org/cli/actor/v7action" 8 "code.cloudfoundry.org/cli/command/commandfakes" 9 . "code.cloudfoundry.org/cli/command/v7" 10 "code.cloudfoundry.org/cli/command/v7/v7fakes" 11 "code.cloudfoundry.org/cli/resources" 12 "code.cloudfoundry.org/cli/util/configv3" 13 "code.cloudfoundry.org/cli/util/ui" 14 15 . "github.com/onsi/ginkgo" 16 . "github.com/onsi/gomega" 17 . "github.com/onsi/gomega/gbytes" 18 ) 19 20 var _ = Describe("routes Command", func() { 21 var ( 22 cmd RoutesCommand 23 testUI *ui.UI 24 fakeConfig *commandfakes.FakeConfig 25 fakeSharedActor *commandfakes.FakeSharedActor 26 fakeActor *v7fakes.FakeActor 27 executeErr error 28 args []string 29 binaryName string 30 ) 31 32 const tableHeaders = `space\s+host\s+domain\s+port\s+path\s+protocol\s+apps` 33 34 BeforeEach(func() { 35 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 36 fakeConfig = new(commandfakes.FakeConfig) 37 fakeSharedActor = new(commandfakes.FakeSharedActor) 38 fakeActor = new(v7fakes.FakeActor) 39 args = nil 40 41 binaryName = "faceman" 42 fakeConfig.BinaryNameReturns(binaryName) 43 44 cmd = RoutesCommand{ 45 BaseCommand: BaseCommand{ 46 UI: testUI, 47 Config: fakeConfig, 48 SharedActor: fakeSharedActor, 49 Actor: fakeActor, 50 }, 51 Orglevel: false, 52 } 53 }) 54 55 JustBeforeEach(func() { 56 executeErr = cmd.Execute(args) 57 }) 58 59 When("the environment is not setup correctly", func() { 60 When("checking target fails", func() { 61 BeforeEach(func() { 62 fakeSharedActor.CheckTargetReturns(actionerror.NotLoggedInError{BinaryName: binaryName}) 63 }) 64 65 It("returns an error", func() { 66 Expect(executeErr).To(MatchError(actionerror.NotLoggedInError{BinaryName: binaryName})) 67 68 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 69 checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0) 70 Expect(checkTargetedOrg).To(BeTrue()) 71 Expect(checkTargetedSpace).To(BeTrue()) 72 }) 73 }) 74 75 When("when there is no org targeted", func() { 76 BeforeEach(func() { 77 fakeSharedActor.CheckTargetReturns(actionerror.NoOrganizationTargetedError{BinaryName: binaryName}) 78 }) 79 80 It("returns an error", func() { 81 Expect(executeErr).To(MatchError(actionerror.NoOrganizationTargetedError{BinaryName: binaryName})) 82 checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0) 83 Expect(checkTargetedOrg).To(BeTrue()) 84 Expect(checkTargetedSpace).To(BeTrue()) 85 }) 86 }) 87 }) 88 89 Context("When the environment is setup correctly", func() { 90 BeforeEach(func() { 91 fakeConfig.CurrentUserReturns(configv3.User{Name: "banana"}, nil) 92 fakeConfig.TargetedOrganizationReturns(configv3.Organization{ 93 GUID: "some-org-guid", 94 Name: "some-org", 95 }) 96 97 fakeConfig.TargetedSpaceReturns(configv3.Space{ 98 GUID: "some-space-guid", 99 Name: "some-space", 100 }) 101 }) 102 103 When("getting routes succeeds", func() { 104 var ( 105 routes []resources.Route 106 ) 107 108 BeforeEach(func() { 109 routes = []resources.Route{ 110 {GUID: "route-guid-3", Host: "host-1"}, 111 {GUID: "route-guid-1"}, 112 {GUID: "route-guid-2", Host: "host-3", Path: "/path/2"}, 113 } 114 115 fakeActor.GetRoutesBySpaceReturns( 116 routes, 117 v7action.Warnings{"actor-warning-1"}, 118 nil, 119 ) 120 }) 121 122 It("delegates to the actor for summaries", func() { 123 Expect(fakeActor.GetRouteSummariesCallCount()).To(Equal(1)) 124 125 Expect(fakeActor.GetRouteSummariesArgsForCall(0)).To(Equal(routes)) 126 }) 127 128 When("getting route summaries succeeds", func() { 129 var ( 130 routeSummaries []v7action.RouteSummary 131 ) 132 133 BeforeEach(func() { 134 routeSummaries = []v7action.RouteSummary{ 135 { 136 DomainName: "domain1", 137 SpaceName: "space-1", 138 Route: resources.Route{GUID: "route-guid-1"}, 139 }, 140 { 141 DomainName: "domain2", 142 SpaceName: "space-2", 143 Route: resources.Route{GUID: "route-guid-2", Host: "host-3", Path: "/path/2"}, 144 }, 145 { 146 DomainName: "domain3", 147 SpaceName: "space-3", 148 Route: resources.Route{GUID: "route-guid-3", Host: "host-1"}, 149 AppNames: []string{"app1", "app2"}, 150 }, 151 { 152 DomainName: "tcp.domain", 153 SpaceName: "space-3", 154 Route: resources.Route{GUID: "route-guid-3", Port: 1024}, 155 AppNames: []string{"app1", "app2"}, 156 }, 157 } 158 159 fakeActor.GetRouteSummariesReturns( 160 routeSummaries, 161 v7action.Warnings{"actor-warning-2"}, 162 nil, 163 ) 164 }) 165 166 It("prints routes in a table", func() { 167 Expect(executeErr).NotTo(HaveOccurred()) 168 169 Expect(testUI.Err).To(Say("actor-warning-1")) 170 Expect(testUI.Err).To(Say("actor-warning-2")) 171 172 Expect(testUI.Out).To(Say(tableHeaders)) 173 Expect(testUI.Out).To(Say(`space-1\s+domain1\s+`)) 174 Expect(testUI.Out).To(Say(`space-2\s+host-3\s+domain2\s+\/path\/2`)) 175 Expect(testUI.Out).To(Say(`space-3\s+host-1\s+domain3\s+app1, app2`)) 176 Expect(testUI.Out).To(Say(`space-3\s+tcp\.domain\s+1024\s+app1, app2`)) 177 }) 178 }) 179 180 When("getting route summaries fails", func() { 181 BeforeEach(func() { 182 fakeActor.GetRouteSummariesReturns( 183 nil, 184 v7action.Warnings{"actor-warning-2", "actor-warning-3"}, 185 errors.New("summaries-error"), 186 ) 187 }) 188 189 It("prints warnings and returns error", func() { 190 Expect(executeErr).To(MatchError("summaries-error")) 191 192 Expect(testUI.Err).To(Say("actor-warning-1")) 193 Expect(testUI.Err).To(Say("actor-warning-2")) 194 Expect(testUI.Err).To(Say("actor-warning-3")) 195 }) 196 }) 197 }) 198 199 When("getting space routes fails", func() { 200 var expectedErr error 201 202 BeforeEach(func() { 203 warnings := v7action.Warnings{"warning-1", "warning-2"} 204 expectedErr = errors.New("some-error") 205 fakeActor.GetRoutesBySpaceReturns(nil, warnings, expectedErr) 206 }) 207 208 It("prints warnings and returns error", func() { 209 Expect(executeErr).To(Equal(expectedErr)) 210 211 Expect(testUI.Err).To(Say("warning-1")) 212 Expect(testUI.Err).To(Say("warning-2")) 213 Expect(testUI.Out).ToNot(Say(tableHeaders)) 214 }) 215 }) 216 217 When("--org-level is passed and getting org routes fails", func() { 218 var expectedErr error 219 220 BeforeEach(func() { 221 cmd.Orglevel = true 222 warnings := v7action.Warnings{"warning-1", "warning-2"} 223 expectedErr = errors.New("some-error") 224 fakeActor.GetRoutesByOrgReturns(nil, warnings, expectedErr) 225 }) 226 227 It("prints warnings and returns error", func() { 228 Expect(executeErr).To(MatchError(expectedErr)) 229 230 Expect(testUI.Err).To(Say("warning-1")) 231 Expect(testUI.Err).To(Say("warning-2")) 232 Expect(testUI.Out).ToNot(Say(tableHeaders)) 233 }) 234 }) 235 236 When("--labels is passed in", func() { 237 BeforeEach(func() { 238 cmd.Labels = "some_label=fun" 239 }) 240 It("passes the labels to the actor", func() { 241 _, labels := fakeActor.GetRoutesBySpaceArgsForCall(0) 242 Expect(labels).To(Equal("some_label=fun")) 243 }) 244 When("--org-level is passed in", func() { 245 BeforeEach(func() { 246 cmd.Orglevel = true 247 }) 248 It("passes the labels to the actor", func() { 249 _, labels := fakeActor.GetRoutesByOrgArgsForCall(0) 250 Expect(labels).To(Equal("some_label=fun")) 251 }) 252 }) 253 }) 254 }) 255 })