github.com/loafoe/cli@v7.1.0+incompatible/integration/v7/global/delete_buildpack_command_test.go (about) 1 package global 2 3 import ( 4 "code.cloudfoundry.org/cli/integration/helpers" 5 . "github.com/onsi/ginkgo" 6 . "github.com/onsi/gomega" 7 . "github.com/onsi/gomega/gbytes" 8 . "github.com/onsi/gomega/gexec" 9 ) 10 11 var _ = Describe("delete-buildpack command", func() { 12 var ( 13 buildpackName string 14 stacks []string 15 ) 16 17 BeforeEach(func() { 18 helpers.LoginCF() 19 buildpackName = helpers.NewBuildpackName() 20 }) 21 22 When("the --help flag is passed", func() { 23 It("Displays the appropriate help text", func() { 24 session := helpers.CF("delete-buildpack", "--help") 25 Eventually(session).Should(Say("NAME:")) 26 Eventually(session).Should(Say("delete-buildpack - Delete a buildpack")) 27 Eventually(session).Should(Say("\n")) 28 Eventually(session).Should(Say("USAGE:")) 29 Eventually(session).Should(Say(`cf delete-buildpack BUILDPACK \[-f] \[-s STACK]`)) 30 Eventually(session).Should(Say("\n")) 31 Eventually(session).Should(Say("OPTIONS:")) 32 Eventually(session).Should(Say(`--force, -f\s+Force deletion without confirmation`)) 33 Eventually(session).Should(Say(`--stack, -s\s+Specify stack to disambiguate buildpacks with the same name. Required when buildpack name is ambiguous`)) 34 Eventually(session).Should(Say("\n")) 35 Eventually(session).Should(Say("SEE ALSO:")) 36 Eventually(session).Should(Say("buildpacks")) 37 Eventually(session).Should(Exit(0)) 38 }) 39 }) 40 41 When("the buildpack name is not provided", func() { 42 It("displays an error and help", func() { 43 session := helpers.CF("delete-buildpack") 44 Eventually(session.Err).Should(Say("Incorrect Usage: the required argument `BUILDPACK` was not provided")) 45 Eventually(session).Should(Say("USAGE")) 46 Eventually(session).Should(Exit(1)) 47 }) 48 }) 49 50 When("the buildpack doesn't exist", func() { 51 When("the user does not specify a stack", func() { 52 It("displays a warning and exits 0", func() { 53 session := helpers.CF("delete-buildpack", "-f", "nonexistent-buildpack") 54 Eventually(session).Should(Say(`Deleting buildpack nonexistent-buildpack\.\.\.`)) 55 Eventually(session).Should(Say("OK")) 56 Eventually(session.Err).Should(Say(`Buildpack 'nonexistent-buildpack' does not exist\.`)) 57 Eventually(session).Should(Exit(0)) 58 }) 59 }) 60 61 When("the user specifies a stack", func() { 62 BeforeEach(func() { 63 stacks = helpers.FetchStacks() 64 }) 65 66 It("displays a warning and exits 0", func() { 67 session := helpers.CF("delete-buildpack", "-f", "nonexistent-buildpack", "-s", stacks[0]) 68 Eventually(session).Should(Say(`Deleting buildpack nonexistent-buildpack with stack %s\.\.\.`, stacks[0])) 69 Eventually(session).Should(Say("OK")) 70 Eventually(session.Err).Should(Say(`Buildpack 'nonexistent-buildpack' with stack '%s' not found\.`, stacks[0])) 71 Eventually(session).Should(Exit(0)) 72 }) 73 }) 74 }) 75 76 Context("there is exactly one buildpack with the specified name", func() { 77 When("the stack is specified", func() { 78 BeforeEach(func() { 79 stacks = helpers.FetchStacks() 80 helpers.BuildpackWithStack(func(buildpackPath string) { 81 session := helpers.CF("create-buildpack", buildpackName, buildpackPath, "1") 82 Eventually(session).Should(Exit(0)) 83 }, stacks[0]) 84 }) 85 86 It("deletes the specified buildpack", func() { 87 session := helpers.CF("delete-buildpack", buildpackName, "-s", stacks[0], "-f") 88 Eventually(session.Out).Should(Say("OK")) 89 Eventually(session).Should(Exit(0)) 90 }) 91 }) 92 93 When("the stack is not specified", func() { 94 It("deletes the specified buildpack", func() { 95 session := helpers.CF("delete-buildpack", buildpackName, "-f") 96 Eventually(session.Out).Should(Say("OK")) 97 Eventually(session).Should(Exit(0)) 98 }) 99 }) 100 }) 101 102 Context("there are two buildpacks with same name", func() { 103 BeforeEach(func() { 104 stacks = helpers.EnsureMinimumNumberOfStacks(2) 105 }) 106 107 Context("neither buildpack has a nil stack", func() { 108 BeforeEach(func() { 109 helpers.BuildpackWithStack(func(buildpackPath string) { 110 session := helpers.CF("create-buildpack", buildpackName, buildpackPath, "1") 111 Eventually(session).Should(Exit(0)) 112 }, stacks[0]) 113 114 helpers.BuildpackWithStack(func(buildpackPath string) { 115 session := helpers.CF("create-buildpack", buildpackName, buildpackPath, "1") 116 Eventually(session).Should(Exit(0)) 117 }, stacks[1]) 118 }) 119 120 It("properly handles ambiguity", func() { 121 By("failing when no stack specified") 122 123 session := helpers.CF("delete-buildpack", buildpackName, "-f") 124 Eventually(session.Err).Should(Say("Multiple buildpacks named %s found. Specify a stack name by using a '-s' flag.", buildpackName)) 125 Eventually(session).Should(Exit(1)) 126 127 By("succeeding with warning when the buildpack name matches but the stack does not") 128 129 session = helpers.CF("delete-buildpack", buildpackName, "-s", "not-a-real-stack", "-f") 130 Eventually(session).Should(Say(`Deleting buildpack %s with stack not-a-real-stack\.\.\.`, buildpackName)) 131 Eventually(session).Should(Say("OK")) 132 Eventually(session.Err).Should(Say(`Buildpack '%s' with stack 'not-a-real-stack' not found\.`, buildpackName)) 133 Eventually(session).Should(Exit(0)) 134 135 By("deleting the buildpack when the associated stack is specified") 136 137 session = helpers.CF("delete-buildpack", buildpackName, "-s", stacks[0], "-f") 138 Eventually(session).Should(Say(`Deleting buildpack %s with stack %s\.\.\.`, buildpackName, stacks[0])) 139 Eventually(session).Should(Say("OK")) 140 Eventually(session).Should(Exit(0)) 141 142 session = helpers.CF("delete-buildpack", buildpackName, "-s", stacks[1], "-f") 143 Eventually(session).Should(Say(`Deleting buildpack %s with stack %s\.\.\.`, buildpackName, stacks[1])) 144 Eventually(session).Should(Say("OK")) 145 Eventually(session).Should(Exit(0)) 146 }) 147 }) 148 149 Context("one buildpack has a nil stack", func() { 150 BeforeEach(func() { 151 helpers.BuildpackWithStack(func(buildpackPath string) { 152 session := helpers.CF("create-buildpack", buildpackName, buildpackPath, "1") 153 Eventually(session).Should(Exit(0)) 154 }, stacks[0]) 155 156 helpers.BuildpackWithoutStack(func(buildpackPath string) { 157 session := helpers.CF("create-buildpack", buildpackName, buildpackPath, "1") 158 Eventually(session).Should(Exit(0)) 159 }) 160 }) 161 162 It("properly handles ambiguity", func() { 163 By("deleting the nil stack buildpack when no stack specified") 164 session := helpers.CF("delete-buildpack", buildpackName, "-f") 165 Eventually(session.Out).Should(Say("OK")) 166 Eventually(session).Should(Exit(0)) 167 168 By("deleting the remaining buildpack when no stack is specified") 169 session = helpers.CF("delete-buildpack", buildpackName, "-f") 170 Eventually(session.Out).Should(Say("OK")) 171 Eventually(session).Should(Exit(0)) 172 }) 173 }) 174 }) 175 176 When("the -f flag not is provided", func() { 177 var buffer *Buffer 178 179 BeforeEach(func() { 180 buffer = NewBuffer() 181 182 helpers.BuildpackWithoutStack(func(buildpackPath string) { 183 session := helpers.CF("create-buildpack", buildpackName, buildpackPath, "1") 184 Eventually(session).Should(Exit(0)) 185 }) 186 }) 187 188 When("the user enters 'y'", func() { 189 BeforeEach(func() { 190 _, err := buffer.Write([]byte("y\n")) 191 Expect(err).ToNot(HaveOccurred()) 192 }) 193 194 It("deletes the buildpack", func() { 195 session := helpers.CFWithStdin(buffer, "delete-buildpack", buildpackName) 196 Eventually(session).Should(Say(`Deleting buildpack %s\.\.\.`, buildpackName)) 197 Eventually(session).Should(Say("OK")) 198 Eventually(session).Should(Exit(0)) 199 }) 200 }) 201 202 When("the user enters 'n'", func() { 203 BeforeEach(func() { 204 _, err := buffer.Write([]byte("n\n")) 205 Expect(err).ToNot(HaveOccurred()) 206 }) 207 208 It("does not delete the buildpack", func() { 209 session := helpers.CFWithStdin(buffer, "delete-buildpack", buildpackName) 210 Eventually(session).Should(Say("Delete cancelled")) 211 Eventually(session).Should(Exit(0)) 212 213 session = helpers.CF("buildpacks") 214 Eventually(session).Should(Say(buildpackName)) 215 Eventually(session).Should(Exit(0)) 216 }) 217 }) 218 219 When("the user enters the default input (hits return)", func() { 220 BeforeEach(func() { 221 _, err := buffer.Write([]byte("\n")) 222 Expect(err).ToNot(HaveOccurred()) 223 }) 224 225 It("does not delete the buildpack", func() { 226 session := helpers.CFWithStdin(buffer, "delete-buildpack", buildpackName) 227 Eventually(session).Should(Say("Delete cancelled")) 228 Eventually(session).Should(Exit(0)) 229 230 session = helpers.CF("buildpacks") 231 Eventually(session).Should(Say(buildpackName)) 232 Eventually(session).Should(Exit(0)) 233 }) 234 }) 235 }) 236 237 When("the --force flag is provided", func() { 238 It("deletes the buildpack without asking for confirmation", func() { 239 session := helpers.CF("delete-buildpack", buildpackName, "--force") 240 Eventually(session).Should(Say(`Deleting buildpack %s\.\.\.`, buildpackName)) 241 Eventually(session).Should(Say("OK")) 242 Eventually(session).Should(Exit(0)) 243 }) 244 }) 245 })