github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/integration/v7/isolated/delete_route_command_test.go (about)

     1  package isolated
     2  
     3  import (
     4  	"regexp"
     5  
     6  	. "code.cloudfoundry.org/cli/cf/util/testhelpers/matchers"
     7  
     8  	"code.cloudfoundry.org/cli/integration/helpers"
     9  	. "github.com/onsi/ginkgo"
    10  	. "github.com/onsi/gomega"
    11  	. "github.com/onsi/gomega/gbytes"
    12  	. "github.com/onsi/gomega/gexec"
    13  )
    14  
    15  var _ = Describe("delete-route command", func() {
    16  	Context("Help", func() {
    17  		It("appears in cf help -a", func() {
    18  			session := helpers.CF("help", "-a")
    19  			Eventually(session).Should(Exit(0))
    20  			Expect(session).To(HaveCommandInCategoryWithDescription("delete-route", "ROUTES", "Delete a route"))
    21  		})
    22  
    23  		It("displays the help information", func() {
    24  			session := helpers.CF("delete-route", "--help")
    25  			Eventually(session).Should(Say(`NAME:`))
    26  			Eventually(session).Should(Say(`delete-route - Delete a route\n`))
    27  			Eventually(session).Should(Say(`\n`))
    28  
    29  			Eventually(session).Should(Say(`USAGE:`))
    30  			Eventually(session).Should(Say(`cf delete-route DOMAIN \[--hostname HOSTNAME\] \[--path PATH\] \[-f\]\n`))
    31  			Eventually(session).Should(Say(`\n`))
    32  
    33  			Eventually(session).Should(Say(`EXAMPLES:`))
    34  			Eventually(session).Should(Say(`cf delete-route example.com\s+# example.com`))
    35  			Eventually(session).Should(Say(`cf delete-route example.com --hostname myhost\s+# myhost.example.com`))
    36  			Eventually(session).Should(Say(`cf delete-route example.com --hostname myhost --path foo\s+# myhost.example.com/foo`))
    37  			Eventually(session).Should(Say(`\n`))
    38  
    39  			Eventually(session).Should(Say(`OPTIONS:`))
    40  			Eventually(session).Should(Say(`-f\s+Force deletion without confirmation`))
    41  			Eventually(session).Should(Say(`--hostname, -n\s+Hostname used to identify the HTTP route \(required for shared domains\)`))
    42  			Eventually(session).Should(Say(`--path\s+Path used to identify the HTTP route`))
    43  			Eventually(session).Should(Say(`\n`))
    44  
    45  			Eventually(session).Should(Say(`SEE ALSO:`))
    46  			Eventually(session).Should(Say(`delete-orphaned-routes, routes, unmap-route`))
    47  
    48  			Eventually(session).Should(Exit(0))
    49  		})
    50  	})
    51  
    52  	When("the environment is not setup correctly", func() {
    53  		It("fails with the appropriate errors", func() {
    54  			helpers.CheckEnvironmentTargetedCorrectly(true, false, ReadOnlyOrg, "delete-route", "some-domain")
    55  		})
    56  	})
    57  
    58  	When("the environment is set up correctly", func() {
    59  		var (
    60  			buffer     *Buffer
    61  			orgName    string
    62  			spaceName  string
    63  			domainName string
    64  		)
    65  
    66  		BeforeEach(func() {
    67  			buffer = NewBuffer()
    68  			orgName = helpers.NewOrgName()
    69  			spaceName = helpers.NewSpaceName()
    70  			domainName = helpers.NewDomainName()
    71  
    72  			helpers.SetupCF(orgName, spaceName)
    73  		})
    74  
    75  		AfterEach(func() {
    76  			helpers.QuickDeleteOrg(orgName)
    77  		})
    78  		When("the -f flag is not given", func() {
    79  			var (
    80  				domain helpers.Domain
    81  			)
    82  
    83  			BeforeEach(func() {
    84  				domain = helpers.NewDomain(orgName, domainName)
    85  				domain.CreatePrivate()
    86  			})
    87  
    88  			AfterEach(func() {
    89  				domain.Delete()
    90  			})
    91  
    92  			When("the user enters 'y'", func() {
    93  				BeforeEach(func() {
    94  					_, err := buffer.Write([]byte("y\n"))
    95  					Expect(err).ToNot(HaveOccurred())
    96  
    97  					Eventually(helpers.CF("create-route", domainName)).Should(Exit(0))
    98  				})
    99  
   100  				When("the user attempts to delete a route with a private domain", func() {
   101  					It("it asks for confirmation and deletes the domain", func() {
   102  						session := helpers.CFWithStdin(buffer, "delete-route", domainName)
   103  						Eventually(session).Should(Say("This action impacts all apps using this route."))
   104  						Eventually(session).Should(Say("Deleting the route will remove associated apps which will make apps with this route unreachable."))
   105  						Eventually(session).Should(Say(`Really delete the route %s\?`, domainName))
   106  						Eventually(session).Should(Say(regexp.QuoteMeta(`Deleting route %s...`), domainName))
   107  						Eventually(session).Should(Say("OK"))
   108  						Eventually(session).Should(Exit(0))
   109  
   110  						Expect(string(session.Out.Contents())).NotTo(ContainSubstring("Unable to delete"))
   111  					})
   112  				})
   113  			})
   114  
   115  			When("the user enters 'n'", func() {
   116  				BeforeEach(func() {
   117  					_, err := buffer.Write([]byte("n\n"))
   118  					Expect(err).ToNot(HaveOccurred())
   119  				})
   120  
   121  				It("it asks for confirmation and does not delete the domain", func() {
   122  					session := helpers.CFWithStdin(buffer, "delete-route", domainName)
   123  					Eventually(session).Should(Say("This action impacts all apps using this route."))
   124  					Eventually(session).Should(Say("Deleting the route will remove associated apps which will make apps with this route unreachable."))
   125  					Eventually(session).Should(Say(`Really delete the route %s\?`, domainName))
   126  					Eventually(session).Should(Say(`'%s' has not been deleted`, domainName))
   127  					Consistently(session).ShouldNot(Say("OK"))
   128  					Eventually(session).Should(Exit(0))
   129  				})
   130  			})
   131  		})
   132  
   133  		When("the -f flag is given", func() {
   134  			BeforeEach(func() {
   135  				domainName = helpers.NewDomainName()
   136  			})
   137  
   138  			When("the route does not exist", func() {
   139  				var (
   140  					domain helpers.Domain
   141  				)
   142  
   143  				BeforeEach(func() {
   144  					domain = helpers.NewDomain(orgName, domainName)
   145  					domain.CreatePrivate()
   146  				})
   147  
   148  				AfterEach(func() {
   149  					domain.Delete()
   150  				})
   151  
   152  				It("warns the user that it has already been deleted and runs to completion without failing", func() {
   153  					session := helpers.CF("delete-route", domainName, "-f")
   154  					Eventually(session).Should(Say(`Deleting route %s\.\.\.`, domainName))
   155  					Eventually(session).Should(Say(`Unable to delete\. Route with domain '%s' not found\.`, domainName))
   156  					Eventually(session).Should(Exit(0))
   157  				})
   158  			})
   159  
   160  			When("the route exist", func() {
   161  				When("the domain is private", func() {
   162  					var domain helpers.Domain
   163  
   164  					BeforeEach(func() {
   165  						domain = helpers.NewDomain(orgName, domainName)
   166  						domain.Create()
   167  					})
   168  
   169  					AfterEach(func() {
   170  						domain.Delete()
   171  					})
   172  
   173  					When("no flags are used", func() {
   174  						It("deletes the route", func() {
   175  							Eventually(helpers.CF("create-route", domainName)).Should(Exit(0))
   176  
   177  							session := helpers.CF("delete-route", domainName, "-f")
   178  							Eventually(session).Should(Say(`Deleting route %s\.\.\.`, domainName))
   179  							Eventually(session).Should(Say(`OK`))
   180  							Eventually(session).Should(Exit(0))
   181  
   182  							Expect(string(session.Out.Contents())).NotTo(ContainSubstring("Unable to delete"))
   183  
   184  							session = helpers.CF("routes")
   185  							Consistently(session).ShouldNot(Say(`%s`, domainName))
   186  							Eventually(session).Should(Exit(0))
   187  						})
   188  					})
   189  
   190  					When("passing in a hostname", func() {
   191  						It("deletes the route with the hostname", func() {
   192  							hostname := "tiramisu"
   193  							Eventually(helpers.CF("create-route", domainName, "-n", hostname)).Should(Exit(0))
   194  
   195  							session := helpers.CF("delete-route", domainName, "-n", hostname, "-f")
   196  							Eventually(session).Should(Say(`Deleting route %s\.%s\.\.\.`, hostname, domainName))
   197  							Eventually(session).Should(Say(`OK`))
   198  							Eventually(session).Should(Exit(0))
   199  
   200  							Expect(string(session.Out.Contents())).NotTo(ContainSubstring("Unable to delete"))
   201  
   202  							session = helpers.CF("routes")
   203  							Consistently(session).ShouldNot(Say(`%s\s+%s`, hostname, domainName))
   204  							Eventually(session).Should(Exit(0))
   205  						})
   206  					})
   207  
   208  					When("passing in a path", func() {
   209  						It("deletes the route with the path", func() {
   210  							path := "/flan"
   211  							Eventually(helpers.CF("create-route", domainName, "--path", path)).Should(Exit(0))
   212  
   213  							session := helpers.CF("delete-route", domainName, "--path", path, "-f")
   214  							Eventually(session).Should(Say(`Deleting route %s%s\.\.\.`, domainName, path))
   215  							Eventually(session).Should(Say(`OK`))
   216  							Eventually(session).Should(Exit(0))
   217  
   218  							Expect(string(session.Out.Contents())).NotTo(ContainSubstring("Unable to delete"))
   219  
   220  							session = helpers.CF("routes")
   221  							Consistently(session).ShouldNot(Say(`%s\s+%s`, domainName, path))
   222  							Eventually(session).Should(Exit(0))
   223  						})
   224  					})
   225  
   226  					When("passing in hostname and path with a leading '/'", func() {
   227  						It("deletes the route with hostname and path", func() {
   228  							hostname := "tiramisu"
   229  							pathString := "/recipes"
   230  							Eventually(helpers.CF("create-route", domainName, "-n", hostname, "--path", pathString)).Should(Exit(0))
   231  
   232  							session := helpers.CF("delete-route", domainName, "-n", hostname, "--path", pathString, "-f")
   233  							Eventually(session).Should(Say(`Deleting route %s\.%s%s\.\.\.`, hostname, domainName, pathString))
   234  							Eventually(session).Should(Say(`OK`))
   235  							Eventually(session).Should(Exit(0))
   236  
   237  							Expect(string(session.Out.Contents())).NotTo(ContainSubstring("Unable to delete"))
   238  
   239  							session = helpers.CF("routes")
   240  							Consistently(session).ShouldNot(Say(`%s\s+%s\s+%s`, hostname, domainName, pathString))
   241  							Eventually(session).Should(Exit(0))
   242  						})
   243  					})
   244  
   245  					When("passing in hostname and path without a leading '/'", func() {
   246  						It("deletes the route with hostname and path", func() {
   247  							hostname := "tiramisu"
   248  							pathString := "more-recipes"
   249  							Eventually(helpers.CF("create-route", domainName, "-n", hostname, "--path", pathString)).Should(Exit(0))
   250  
   251  							session := helpers.CF("delete-route", domainName, "-n", hostname, "--path", pathString, "-f")
   252  							Eventually(session).Should(Say(`Deleting route %s\.%s\/%s\.\.\.`, hostname, domainName, pathString))
   253  							Eventually(session).Should(Say(`OK`))
   254  							Eventually(session).Should(Exit(0))
   255  
   256  							Expect(string(session.Out.Contents())).NotTo(ContainSubstring("Unable to delete"))
   257  
   258  							session = helpers.CF("routes")
   259  							Consistently(session).ShouldNot(Say(`%s\s+%s\s+\/%s`, hostname, domainName, pathString))
   260  							Eventually(session).Should(Exit(0))
   261  						})
   262  					})
   263  
   264  					When("passing in empty hostname and path", func() {
   265  						It("deletes the route with hostname and path", func() {
   266  							hostname := ""
   267  							pathString := "/recipes"
   268  							Eventually(helpers.CF("create-route", domainName, "-n", hostname, "--path", pathString)).Should(Exit(0))
   269  
   270  							session := helpers.CF("delete-route", domainName, "-n", hostname, "--path", pathString, "-f")
   271  							Eventually(session).Should(Say(`Deleting route %s%s\.\.\.`, domainName, pathString))
   272  							Eventually(session).Should(Say(`OK`))
   273  							Eventually(session).Should(Exit(0))
   274  
   275  							Expect(string(session.Out.Contents())).NotTo(ContainSubstring("Unable to delete"))
   276  
   277  							session = helpers.CF("routes")
   278  							Consistently(session).ShouldNot(Say(`%s\s+%s`, domainName, pathString))
   279  							Eventually(session).Should(Exit(0))
   280  						})
   281  					})
   282  
   283  					When("passing in path without specifying a hostname", func() {
   284  						It("deletes the route with hostname and path", func() {
   285  							pathString := "/recipes"
   286  							Eventually(helpers.CF("create-route", domainName, "--path", pathString)).Should(Exit(0))
   287  
   288  							session := helpers.CF("delete-route", domainName, "--path", pathString, "-f")
   289  							Eventually(session).Should(Say(`Deleting route %s%s\.\.\.`, domainName, pathString))
   290  							Eventually(session).Should(Say(`OK`))
   291  							Eventually(session).Should(Exit(0))
   292  
   293  							Expect(string(session.Out.Contents())).NotTo(ContainSubstring("Unable to delete"))
   294  
   295  							session = helpers.CF("routes")
   296  							Consistently(session).ShouldNot(Say(`%s\s+%s`, domainName, pathString))
   297  							Eventually(session).Should(Exit(0))
   298  						})
   299  					})
   300  
   301  				})
   302  
   303  				When("the domain is shared", func() {
   304  					var domain helpers.Domain
   305  
   306  					BeforeEach(func() {
   307  						domain = helpers.NewDomain("", domainName)
   308  						domain.CreateShared()
   309  					})
   310  
   311  					AfterEach(func() {
   312  						domain.DeleteShared()
   313  					})
   314  
   315  					When("no flags are used", func() {
   316  						It("fails with a helpful message", func() {
   317  							session := helpers.CF("delete-route", domainName, "-f")
   318  							Eventually(session).Should(Say(`Deleting route %s\.\.\.`, domainName))
   319  							Eventually(session).Should(Say(`Unable to delete\. Route with domain '%s' not found\.`, domainName))
   320  							Eventually(session).Should(Say(`OK`))
   321  							Eventually(session).Should(Exit(0))
   322  						})
   323  					})
   324  
   325  					When("passing in a hostname", func() {
   326  						It("deletes the route with the hostname", func() {
   327  							hostname := "tiramisu"
   328  							Eventually(helpers.CF("create-route", domainName, "-n", hostname)).Should(Exit(0))
   329  
   330  							session := helpers.CF("delete-route", domainName, "-n", hostname, "-f")
   331  							Eventually(session).Should(Say(`Deleting route %s\.%s\.\.\.`, hostname, domainName))
   332  							Eventually(session).Should(Say(`OK`))
   333  							Eventually(session).Should(Exit(0))
   334  
   335  							Expect(string(session.Out.Contents())).NotTo(ContainSubstring("Unable to delete"))
   336  						})
   337  					})
   338  
   339  					When("passing in hostname and path with a leading '/'", func() {
   340  						It("deletes the route with hostname and path", func() {
   341  							hostname := "tiramisu"
   342  							pathString := "/recipes"
   343  							Eventually(helpers.CF("create-route", domainName, "-n", hostname, "--path", pathString)).Should(Exit(0))
   344  
   345  							session := helpers.CF("delete-route", domainName, "-n", hostname, "--path", pathString, "-f")
   346  							Eventually(session).Should(Say(`Deleting route %s\.%s%s\.\.\.`, hostname, domainName, pathString))
   347  							Eventually(session).Should(Say(`OK`))
   348  							Eventually(session).Should(Exit(0))
   349  
   350  							Expect(string(session.Out.Contents())).NotTo(ContainSubstring("Unable to delete"))
   351  						})
   352  					})
   353  
   354  					When("passing in hostname and path without a leading '/'", func() {
   355  						It("deletes the route with hostname and path", func() {
   356  							hostname := "tiramisu"
   357  							pathString := "more-recipes"
   358  							Eventually(helpers.CF("create-route", domainName, "-n", hostname, "--path", pathString)).Should(Exit(0))
   359  
   360  							session := helpers.CF("delete-route", domainName, "-n", hostname, "--path", pathString, "-f")
   361  							Eventually(session).Should(Say(`Deleting route %s\.%s\/%s\.\.\.`, hostname, domainName, pathString))
   362  							Eventually(session).Should(Say(`OK`))
   363  							Eventually(session).Should(Exit(0))
   364  
   365  							Expect(string(session.Out.Contents())).NotTo(ContainSubstring("Unable to delete"))
   366  						})
   367  					})
   368  				})
   369  			})
   370  		})
   371  
   372  		When("the domain does not exist", func() {
   373  			It("displays error and exits 0", func() {
   374  				session := helpers.CF("delete-route", "some-domain", "-f")
   375  				Eventually(session).Should(Say("OK"))
   376  				Eventually(session).Should(Exit(0))
   377  				Expect(string(session.Err.Contents())).To(Equal("Domain 'some-domain' not found.\n"))
   378  			})
   379  		})
   380  
   381  		When("the domain is not specified", func() {
   382  			It("displays error and exits 1", func() {
   383  				session := helpers.CF("delete-route")
   384  				Eventually(session.Err).Should(Say("Incorrect Usage: the required argument `DOMAIN` was not provided\n"))
   385  				Eventually(session.Err).Should(Say("\n"))
   386  				Eventually(session).Should(Say("NAME:\n"))
   387  				Eventually(session).Should(Exit(1))
   388  			})
   389  		})
   390  	})
   391  })