github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/cf/commands/route/check_route_test.go (about) 1 package route_test 2 3 import ( 4 "errors" 5 6 "code.cloudfoundry.org/cli/cf/commandregistry" 7 "code.cloudfoundry.org/cli/cf/commands/route" 8 "code.cloudfoundry.org/cli/cf/configuration/coreconfig" 9 "code.cloudfoundry.org/cli/cf/flags" 10 "code.cloudfoundry.org/cli/cf/models" 11 "code.cloudfoundry.org/cli/cf/requirements" 12 "code.cloudfoundry.org/cli/cf/requirements/requirementsfakes" 13 14 "code.cloudfoundry.org/cli/cf/api/apifakes" 15 16 testconfig "code.cloudfoundry.org/cli/cf/util/testhelpers/configuration" 17 testterm "code.cloudfoundry.org/cli/cf/util/testhelpers/terminal" 18 19 . "code.cloudfoundry.org/cli/cf/util/testhelpers/matchers" 20 . "github.com/onsi/ginkgo" 21 . "github.com/onsi/gomega" 22 ) 23 24 var _ = Describe("CheckRoute", func() { 25 var ( 26 ui *testterm.FakeUI 27 configRepo coreconfig.Repository 28 routeRepo *apifakes.FakeRouteRepository 29 domainRepo *apifakes.FakeDomainRepository 30 31 cmd commandregistry.Command 32 deps commandregistry.Dependency 33 factory *requirementsfakes.FakeFactory 34 flagContext flags.FlagContext 35 36 loginRequirement requirements.Requirement 37 targetedOrgRequirement *requirementsfakes.FakeTargetedOrgRequirement 38 ) 39 40 BeforeEach(func() { 41 ui = &testterm.FakeUI{} 42 43 configRepo = testconfig.NewRepositoryWithDefaults() 44 routeRepo = new(apifakes.FakeRouteRepository) 45 repoLocator := deps.RepoLocator.SetRouteRepository(routeRepo) 46 47 domainRepo = new(apifakes.FakeDomainRepository) 48 repoLocator = repoLocator.SetDomainRepository(domainRepo) 49 50 deps = commandregistry.Dependency{ 51 UI: ui, 52 Config: configRepo, 53 RepoLocator: repoLocator, 54 } 55 56 cmd = &route.CheckRoute{} 57 cmd.SetDependency(deps, false) 58 59 flagContext = flags.NewFlagContext(cmd.MetaData().Flags) 60 61 factory = new(requirementsfakes.FakeFactory) 62 63 loginRequirement = &passingRequirement{Name: "login-requirement"} 64 factory.NewLoginRequirementReturns(loginRequirement) 65 66 targetedOrgRequirement = new(requirementsfakes.FakeTargetedOrgRequirement) 67 factory.NewTargetedOrgRequirementReturns(targetedOrgRequirement) 68 }) 69 70 Describe("Requirements", func() { 71 Context("when not provided exactly two args", func() { 72 BeforeEach(func() { 73 flagContext.Parse("app-name") 74 }) 75 76 It("fails with usage", func() { 77 _, err := cmd.Requirements(factory, flagContext) 78 Expect(err).To(HaveOccurred()) 79 Expect(ui.Outputs()).To(ContainSubstrings( 80 []string{"FAILED"}, 81 []string{"Incorrect Usage. Requires host and domain as arguments"}, 82 )) 83 }) 84 }) 85 86 Context("when provided exactly two args", func() { 87 BeforeEach(func() { 88 flagContext.Parse("domain-name", "host-name") 89 }) 90 91 It("returns a LoginRequirement", func() { 92 actualRequirements, err := cmd.Requirements(factory, flagContext) 93 Expect(err).NotTo(HaveOccurred()) 94 Expect(factory.NewLoginRequirementCallCount()).To(Equal(1)) 95 Expect(actualRequirements).To(ContainElement(loginRequirement)) 96 }) 97 98 It("returns a TargetedOrgRequirement", func() { 99 actualRequirements, err := cmd.Requirements(factory, flagContext) 100 Expect(err).NotTo(HaveOccurred()) 101 Expect(factory.NewTargetedOrgRequirementCallCount()).To(Equal(1)) 102 Expect(actualRequirements).To(ContainElement(targetedOrgRequirement)) 103 }) 104 }) 105 }) 106 107 Describe("Execute", func() { 108 var err error 109 110 BeforeEach(func() { 111 err := flagContext.Parse("host-name", "domain-name") 112 Expect(err).NotTo(HaveOccurred()) 113 cmd.Requirements(factory, flagContext) 114 configRepo.SetOrganizationFields(models.OrganizationFields{ 115 GUID: "fake-org-guid", 116 Name: "fake-org-name", 117 }) 118 }) 119 120 JustBeforeEach(func() { 121 err = cmd.Execute(flagContext) 122 }) 123 124 It("tells the user that it is checking for the route", func() { 125 Expect(err).NotTo(HaveOccurred()) 126 Expect(ui.Outputs()).To(ContainSubstrings( 127 []string{"Checking for route"}, 128 )) 129 }) 130 131 It("tries to find the domain", func() { 132 Expect(err).NotTo(HaveOccurred()) 133 Expect(domainRepo.FindByNameInOrgCallCount()).To(Equal(1)) 134 135 domainName, orgGUID := domainRepo.FindByNameInOrgArgsForCall(0) 136 Expect(domainName).To(Equal("domain-name")) 137 Expect(orgGUID).To(Equal("fake-org-guid")) 138 }) 139 140 Context("when it finds the domain successfully", func() { 141 var actualDomain models.DomainFields 142 143 BeforeEach(func() { 144 actualDomain = models.DomainFields{ 145 GUID: "domain-guid", 146 Name: "domain-name", 147 } 148 domainRepo.FindByNameInOrgReturns(actualDomain, nil) 149 }) 150 151 It("checks if the route exists", func() { 152 Expect(err).NotTo(HaveOccurred()) 153 Expect(routeRepo.CheckIfExistsCallCount()).To(Equal(1)) 154 hostName, domain, path := routeRepo.CheckIfExistsArgsForCall(0) 155 Expect(hostName).To(Equal("host-name")) 156 Expect(actualDomain).To(Equal(domain)) 157 Expect(path).To(Equal("")) 158 }) 159 160 Context("when a path is passed", func() { 161 BeforeEach(func() { 162 flagContext = flags.NewFlagContext(cmd.MetaData().Flags) 163 err := flagContext.Parse("hostname", "domain-name", "--path", "the-path") 164 Expect(err).NotTo(HaveOccurred()) 165 cmd.Requirements(factory, flagContext) 166 }) 167 168 It("checks if the route exists", func() { 169 Expect(err).NotTo(HaveOccurred()) 170 Expect(routeRepo.CheckIfExistsCallCount()).To(Equal(1)) 171 _, _, path := routeRepo.CheckIfExistsArgsForCall(0) 172 Expect(path).To(Equal("the-path")) 173 }) 174 175 Context("when finding the route succeeds and the route exists", func() { 176 BeforeEach(func() { 177 routeRepo.CheckIfExistsReturns(true, nil) 178 }) 179 180 It("tells the user the route exists", func() { 181 Expect(err).NotTo(HaveOccurred()) 182 Expect(ui.Outputs()).To(ContainSubstrings([]string{"Route hostname.domain-name/the-path does exist"})) 183 }) 184 }) 185 186 Context("when finding the route succeeds and the route does not exist", func() { 187 BeforeEach(func() { 188 routeRepo.CheckIfExistsReturns(false, nil) 189 }) 190 191 It("tells the user the route exists", func() { 192 Expect(err).NotTo(HaveOccurred()) 193 Expect(ui.Outputs()).To(ContainSubstrings([]string{"Route hostname.domain-name/the-path does not exist"})) 194 }) 195 }) 196 }) 197 198 Context("when finding the route succeeds and the route exists", func() { 199 BeforeEach(func() { 200 routeRepo.CheckIfExistsReturns(true, nil) 201 }) 202 203 It("tells the user OK", func() { 204 Expect(err).NotTo(HaveOccurred()) 205 Expect(ui.Outputs()).To(ContainSubstrings([]string{"OK"})) 206 }) 207 208 It("tells the user the route exists", func() { 209 Expect(err).NotTo(HaveOccurred()) 210 Expect(ui.Outputs()).To(ContainSubstrings([]string{"Route", "does exist"})) 211 }) 212 }) 213 214 Context("when finding the route succeeds and the route does not exist", func() { 215 BeforeEach(func() { 216 routeRepo.CheckIfExistsReturns(false, nil) 217 }) 218 219 It("tells the user OK", func() { 220 Expect(err).NotTo(HaveOccurred()) 221 Expect(ui.Outputs()).To(ContainSubstrings([]string{"OK"})) 222 }) 223 224 It("tells the user the route does not exist", func() { 225 Expect(err).NotTo(HaveOccurred()) 226 Expect(ui.Outputs()).To(ContainSubstrings([]string{"Route", "does not exist"})) 227 }) 228 }) 229 230 Context("when finding the route results in an error", func() { 231 BeforeEach(func() { 232 routeRepo.CheckIfExistsReturns(false, errors.New("check-if-exists-err")) 233 }) 234 235 It("fails with error", func() { 236 Expect(err).To(HaveOccurred()) 237 Expect(err.Error()).To(Equal("check-if-exists-err")) 238 }) 239 }) 240 }) 241 242 Context("when finding the domain results in an error", func() { 243 BeforeEach(func() { 244 domainRepo.FindByNameInOrgReturns(models.DomainFields{}, errors.New("find-by-name-in-org-err")) 245 }) 246 247 It("fails with error", func() { 248 Expect(err).To(HaveOccurred()) 249 Expect(err.Error()).To(Equal("find-by-name-in-org-err")) 250 }) 251 }) 252 }) 253 })