github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/cf/commands/quota/delete_quota_test.go (about)

     1  package quota_test
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/cf/api/quotas/quotasfakes"
     5  	"code.cloudfoundry.org/cli/cf/errors"
     6  	"code.cloudfoundry.org/cli/cf/models"
     7  	"code.cloudfoundry.org/cli/cf/requirements"
     8  	"code.cloudfoundry.org/cli/cf/requirements/requirementsfakes"
     9  	testcmd "code.cloudfoundry.org/cli/cf/util/testhelpers/commands"
    10  	testconfig "code.cloudfoundry.org/cli/cf/util/testhelpers/configuration"
    11  	testterm "code.cloudfoundry.org/cli/cf/util/testhelpers/terminal"
    12  
    13  	"code.cloudfoundry.org/cli/cf/commandregistry"
    14  	"code.cloudfoundry.org/cli/cf/configuration/coreconfig"
    15  	. "code.cloudfoundry.org/cli/cf/util/testhelpers/matchers"
    16  	. "github.com/onsi/ginkgo"
    17  	. "github.com/onsi/gomega"
    18  )
    19  
    20  var _ = Describe("delete-quota command", func() {
    21  	var (
    22  		ui                  *testterm.FakeUI
    23  		quotaRepo           *quotasfakes.FakeQuotaRepository
    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.Config = configRepo
    32  		deps.RepoLocator = deps.RepoLocator.SetQuotaRepository(quotaRepo)
    33  		commandregistry.Commands.SetCommand(commandregistry.Commands.FindCommand("delete-quota").SetDependency(deps, pluginCall))
    34  	}
    35  
    36  	BeforeEach(func() {
    37  		ui = &testterm.FakeUI{}
    38  		configRepo = testconfig.NewRepositoryWithDefaults()
    39  		quotaRepo = new(quotasfakes.FakeQuotaRepository)
    40  		requirementsFactory = new(requirementsfakes.FakeFactory)
    41  	})
    42  
    43  	runCommand := func(args ...string) bool {
    44  		return testcmd.RunCLICommand("delete-quota", args, requirementsFactory, updateCommandDependency, false, ui)
    45  	}
    46  
    47  	Context("when the user is not logged in", func() {
    48  		BeforeEach(func() {
    49  			requirementsFactory.NewLoginRequirementReturns(requirements.Failing{Message: "not logged in"})
    50  		})
    51  
    52  		It("fails requirements", func() {
    53  			Expect(runCommand("my-quota")).To(BeFalse())
    54  		})
    55  	})
    56  
    57  	Context("when the user is logged in", func() {
    58  		BeforeEach(func() {
    59  			requirementsFactory.NewLoginRequirementReturns(requirements.Passing{})
    60  		})
    61  
    62  		It("fails requirements when called without a quota name", func() {
    63  			runCommand()
    64  			Expect(ui.Outputs()).To(ContainSubstrings(
    65  				[]string{"Incorrect Usage", "Requires an argument"},
    66  			))
    67  		})
    68  
    69  		Context("When the quota provided exists", func() {
    70  			BeforeEach(func() {
    71  				quota := models.QuotaFields{}
    72  				quota.Name = "my-quota"
    73  				quota.GUID = "my-quota-guid"
    74  
    75  				quotaRepo.FindByNameReturns(quota, nil)
    76  			})
    77  
    78  			It("deletes a quota with a given name when the user confirms", func() {
    79  				ui.Inputs = []string{"y"}
    80  
    81  				runCommand("my-quota")
    82  				Expect(quotaRepo.DeleteArgsForCall(0)).To(Equal("my-quota-guid"))
    83  
    84  				Expect(ui.Prompts).To(ContainSubstrings(
    85  					[]string{"Really delete the quota", "my-quota"},
    86  				))
    87  
    88  				Expect(ui.Outputs()).To(ContainSubstrings(
    89  					[]string{"Deleting quota", "my-quota", "my-user"},
    90  					[]string{"OK"},
    91  				))
    92  			})
    93  
    94  			It("does not prompt when the -f flag is provided", func() {
    95  				runCommand("-f", "my-quota")
    96  
    97  				Expect(quotaRepo.DeleteArgsForCall(0)).To(Equal("my-quota-guid"))
    98  
    99  				Expect(ui.Prompts).To(BeEmpty())
   100  			})
   101  
   102  			It("shows an error when deletion fails", func() {
   103  				quotaRepo.DeleteReturns(errors.New("some error"))
   104  
   105  				runCommand("-f", "my-quota")
   106  
   107  				Expect(ui.Outputs()).To(ContainSubstrings(
   108  					[]string{"Deleting", "my-quota"},
   109  					[]string{"FAILED"},
   110  				))
   111  			})
   112  		})
   113  
   114  		Context("when finding the quota fails", func() {
   115  			Context("when the quota provided does not exist", func() {
   116  				BeforeEach(func() {
   117  					quotaRepo.FindByNameReturns(models.QuotaFields{}, errors.NewModelNotFoundError("Quota", "non-existent-quota"))
   118  				})
   119  
   120  				It("warns the user when that the quota does not exist", func() {
   121  					runCommand("-f", "non-existent-quota")
   122  
   123  					Expect(ui.Outputs()).To(ContainSubstrings(
   124  						[]string{"Deleting", "non-existent-quota"},
   125  						[]string{"OK"},
   126  					))
   127  
   128  					Expect(ui.WarnOutputs).To(ContainSubstrings(
   129  						[]string{"non-existent-quota", "does not exist"},
   130  					))
   131  				})
   132  			})
   133  
   134  			Context("when other types of error occur", func() {
   135  				BeforeEach(func() {
   136  					quotaRepo.FindByNameReturns(models.QuotaFields{}, errors.New("some error"))
   137  				})
   138  
   139  				It("shows an error", func() {
   140  					runCommand("-f", "my-quota")
   141  
   142  					Expect(ui.WarnOutputs).ToNot(ContainSubstrings(
   143  						[]string{"my-quota", "does not exist"},
   144  					))
   145  
   146  					Expect(ui.Outputs()).To(ContainSubstrings(
   147  						[]string{"FAILED"},
   148  					))
   149  
   150  				})
   151  			})
   152  		})
   153  	})
   154  })