github.com/loggregator/cli@v6.33.1-0.20180224010324-82334f081791+incompatible/cf/commands/securitygroup/delete_security_group_test.go (about) 1 package securitygroup_test 2 3 import ( 4 "code.cloudfoundry.org/cli/cf/api/securitygroups/securitygroupsfakes" 5 "code.cloudfoundry.org/cli/cf/commandregistry" 6 "code.cloudfoundry.org/cli/cf/configuration/coreconfig" 7 "code.cloudfoundry.org/cli/cf/errors" 8 "code.cloudfoundry.org/cli/cf/models" 9 "code.cloudfoundry.org/cli/cf/requirements" 10 "code.cloudfoundry.org/cli/cf/requirements/requirementsfakes" 11 testcmd "code.cloudfoundry.org/cli/util/testhelpers/commands" 12 testconfig "code.cloudfoundry.org/cli/util/testhelpers/configuration" 13 testterm "code.cloudfoundry.org/cli/util/testhelpers/terminal" 14 15 . "code.cloudfoundry.org/cli/util/testhelpers/matchers" 16 . "github.com/onsi/ginkgo" 17 . "github.com/onsi/gomega" 18 ) 19 20 var _ = Describe("delete-security-group command", func() { 21 var ( 22 ui *testterm.FakeUI 23 securityGroupRepo *securitygroupsfakes.FakeSecurityGroupRepo 24 requirementsFactory *requirementsfakes.FakeFactory 25 configRepo coreconfig.Repository 26 deps commandregistry.Dependency 27 ) 28 29 updateCommandDependency := func(pluginCall bool) { 30 deps.UI = ui 31 deps.RepoLocator = deps.RepoLocator.SetSecurityGroupRepository(securityGroupRepo) 32 deps.Config = configRepo 33 commandregistry.Commands.SetCommand(commandregistry.Commands.FindCommand("delete-security-group").SetDependency(deps, pluginCall)) 34 } 35 36 BeforeEach(func() { 37 ui = &testterm.FakeUI{} 38 requirementsFactory = new(requirementsfakes.FakeFactory) 39 securityGroupRepo = new(securitygroupsfakes.FakeSecurityGroupRepo) 40 configRepo = testconfig.NewRepositoryWithDefaults() 41 }) 42 43 runCommand := func(args ...string) bool { 44 return testcmd.RunCLICommand("delete-security-group", args, requirementsFactory, updateCommandDependency, false, ui) 45 } 46 47 Describe("requirements", func() { 48 It("should fail if not logged in", func() { 49 requirementsFactory.NewLoginRequirementReturns(requirements.Failing{Message: "not logged in"}) 50 Expect(runCommand("my-group")).To(BeFalse()) 51 }) 52 53 It("should fail with usage when not provided a single argument", func() { 54 requirementsFactory.NewLoginRequirementReturns(requirements.Passing{}) 55 runCommand("whoops", "I can't believe", "I accidentally", "the whole thing") 56 Expect(ui.Outputs()).To(ContainSubstrings( 57 []string{"Incorrect Usage", "Requires", "argument"}, 58 )) 59 }) 60 }) 61 62 Context("when logged in", func() { 63 BeforeEach(func() { 64 requirementsFactory.NewLoginRequirementReturns(requirements.Passing{}) 65 }) 66 67 Context("when the group with the given name exists", func() { 68 BeforeEach(func() { 69 securityGroupRepo.ReadReturns(models.SecurityGroup{ 70 SecurityGroupFields: models.SecurityGroupFields{ 71 Name: "my-group", 72 GUID: "group-guid", 73 }, 74 }, nil) 75 }) 76 77 Context("delete a security group", func() { 78 It("when passed the -f flag", func() { 79 runCommand("-f", "my-group") 80 Expect(securityGroupRepo.ReadArgsForCall(0)).To(Equal("my-group")) 81 Expect(securityGroupRepo.DeleteArgsForCall(0)).To(Equal("group-guid")) 82 83 Expect(ui.Prompts).To(BeEmpty()) 84 }) 85 86 It("should prompt user when -f flag is not present", func() { 87 ui.Inputs = []string{"y"} 88 89 runCommand("my-group") 90 Expect(securityGroupRepo.ReadArgsForCall(0)).To(Equal("my-group")) 91 Expect(securityGroupRepo.DeleteArgsForCall(0)).To(Equal("group-guid")) 92 93 Expect(ui.Prompts).To(ContainSubstrings( 94 []string{"Really delete the security group", "my-group"}, 95 )) 96 }) 97 98 It("should not delete when user passes 'n' to prompt", func() { 99 ui.Inputs = []string{"n"} 100 101 runCommand("my-group") 102 Expect(securityGroupRepo.ReadCallCount()).To(Equal(0)) 103 Expect(securityGroupRepo.DeleteCallCount()).To(Equal(0)) 104 105 Expect(ui.Prompts).To(ContainSubstrings( 106 []string{"Really delete the security group", "my-group"}, 107 )) 108 }) 109 }) 110 111 It("tells the user what it's about to do", func() { 112 runCommand("-f", "my-group") 113 Expect(ui.Outputs()).To(ContainSubstrings( 114 []string{"Deleting", "security group", "my-group", "my-user"}, 115 []string{"OK"}, 116 )) 117 }) 118 }) 119 120 Context("when finding the group returns an error", func() { 121 BeforeEach(func() { 122 securityGroupRepo.ReadReturns(models.SecurityGroup{}, errors.New("pbbbbbbbbbbt")) 123 }) 124 125 It("fails and tells the user", func() { 126 runCommand("-f", "whoops") 127 128 Expect(ui.Outputs()).To(ContainSubstrings([]string{"FAILED"})) 129 }) 130 }) 131 132 Context("when a group with that name does not exist", func() { 133 BeforeEach(func() { 134 securityGroupRepo.ReadReturns(models.SecurityGroup{}, errors.NewModelNotFoundError("Security group", "uh uh uh -- you didn't sahy the magick word")) 135 }) 136 137 It("fails and tells the user", func() { 138 runCommand("-f", "whoop") 139 140 Expect(ui.WarnOutputs).To(ContainSubstrings([]string{"whoop", "does not exist"})) 141 }) 142 }) 143 144 It("fails and warns the user if deleting fails", func() { 145 securityGroupRepo.DeleteReturns(errors.New("raspberry")) 146 runCommand("-f", "whoops") 147 148 Expect(ui.Outputs()).To(ContainSubstrings([]string{"FAILED"})) 149 }) 150 }) 151 })