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