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

     1  package v7_test
     2  
     3  import (
     4  	"errors"
     5  
     6  	"code.cloudfoundry.org/cli/actor/actionerror"
     7  	"code.cloudfoundry.org/cli/actor/v7action"
     8  	"code.cloudfoundry.org/cli/command/commandfakes"
     9  	. "code.cloudfoundry.org/cli/command/v7"
    10  	"code.cloudfoundry.org/cli/command/v7/v7fakes"
    11  	"code.cloudfoundry.org/cli/util/configv3"
    12  	"code.cloudfoundry.org/cli/util/ui"
    13  	. "github.com/onsi/ginkgo"
    14  	. "github.com/onsi/gomega"
    15  	. "github.com/onsi/gomega/gbytes"
    16  )
    17  
    18  var _ = Describe("delete-space Command", func() {
    19  	var (
    20  		cmd             DeleteSpaceCommand
    21  		testUI          *ui.UI
    22  		fakeConfig      *commandfakes.FakeConfig
    23  		fakeSharedActor *commandfakes.FakeSharedActor
    24  		fakeActor       *v7fakes.FakeDeleteSpaceActor
    25  		input           *Buffer
    26  		binaryName      string
    27  		executeErr      error
    28  	)
    29  
    30  	BeforeEach(func() {
    31  		input = NewBuffer()
    32  		testUI = ui.NewTestUI(input, NewBuffer(), NewBuffer())
    33  		fakeConfig = new(commandfakes.FakeConfig)
    34  		fakeSharedActor = new(commandfakes.FakeSharedActor)
    35  		fakeActor = new(v7fakes.FakeDeleteSpaceActor)
    36  
    37  		cmd = DeleteSpaceCommand{
    38  			UI:          testUI,
    39  			Config:      fakeConfig,
    40  			SharedActor: fakeSharedActor,
    41  			Actor:       fakeActor,
    42  		}
    43  
    44  		cmd.RequiredArgs.Space = "some-space"
    45  
    46  		binaryName = "faceman"
    47  		fakeConfig.BinaryNameReturns(binaryName)
    48  		fakeConfig.CurrentUserReturns(configv3.User{Name: "some-user"}, nil)
    49  	})
    50  
    51  	JustBeforeEach(func() {
    52  		executeErr = cmd.Execute(nil)
    53  	})
    54  
    55  	When("a cloud controller API endpoint is set", func() {
    56  		BeforeEach(func() {
    57  			fakeConfig.TargetReturns("some-url")
    58  		})
    59  
    60  		When("checking target fails", func() {
    61  			When("an org is provided", func() {
    62  				BeforeEach(func() {
    63  					cmd.Org = "some-org"
    64  					fakeSharedActor.CheckTargetReturns(actionerror.NotLoggedInError{BinaryName: binaryName})
    65  				})
    66  
    67  				It("returns the NotLoggedInError", func() {
    68  					Expect(executeErr).To(MatchError(actionerror.NotLoggedInError{BinaryName: binaryName}))
    69  
    70  					checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0)
    71  					Expect(checkTargetedOrg).To(BeFalse())
    72  					Expect(checkTargetedSpace).To(BeFalse())
    73  				})
    74  			})
    75  
    76  			When("an org is NOT provided", func() {
    77  				BeforeEach(func() {
    78  					fakeSharedActor.CheckTargetReturns(actionerror.NoOrganizationTargetedError{})
    79  				})
    80  
    81  				It("returns the NoOrganizationTargetedError", func() {
    82  					Expect(executeErr).To(MatchError(actionerror.NoOrganizationTargetedError{}))
    83  
    84  					checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0)
    85  					Expect(checkTargetedOrg).To(BeTrue())
    86  					Expect(checkTargetedSpace).To(BeFalse())
    87  				})
    88  			})
    89  		})
    90  
    91  		When("the user is logged in", func() {
    92  			When("getting the current user returns an error", func() {
    93  				var returnedErr error
    94  
    95  				BeforeEach(func() {
    96  					returnedErr = errors.New("some error")
    97  					fakeConfig.CurrentUserReturns(configv3.User{}, returnedErr)
    98  				})
    99  
   100  				It("returns the error", func() {
   101  					Expect(executeErr).To(MatchError(returnedErr))
   102  				})
   103  			})
   104  
   105  			When("the -o flag is provided", func() {
   106  				BeforeEach(func() {
   107  					cmd.Org = "some-org"
   108  				})
   109  
   110  				When("the -f flag is provided", func() {
   111  					BeforeEach(func() {
   112  						cmd.Force = true
   113  					})
   114  
   115  					When("the deleting the space errors", func() {
   116  						BeforeEach(func() {
   117  							fakeActor.DeleteSpaceByNameAndOrganizationNameReturns(v7action.Warnings{"warning-1", "warning-2"}, actionerror.SpaceNotFoundError{Name: "some-space"})
   118  						})
   119  
   120  						It("displays all warnings and does not error", func() {
   121  							Expect(executeErr).ToNot(HaveOccurred())
   122  							Expect(testUI.Out).To(Say(`Deleting space some-space in org some-org as some-user\.\.\.`))
   123  
   124  							Expect(testUI.Err).To(Say("warning-1"))
   125  							Expect(testUI.Err).To(Say("warning-2"))
   126  							Expect(testUI.Err).To(Say("Space '%s' does not exist.", cmd.RequiredArgs.Space))
   127  						})
   128  					})
   129  
   130  					When("the deleting the space succeeds", func() {
   131  						BeforeEach(func() {
   132  							fakeActor.DeleteSpaceByNameAndOrganizationNameReturns(v7action.Warnings{"warning-1", "warning-2"}, nil)
   133  						})
   134  
   135  						When("the user was targeted to the space", func() {
   136  							BeforeEach(func() {
   137  								fakeConfig.TargetedSpaceReturns(configv3.Space{Name: "some-space"})
   138  								fakeConfig.TargetedOrganizationReturns(configv3.Organization{Name: "some-org"})
   139  							})
   140  
   141  							It("untargets the space, displays all warnings and does not error", func() {
   142  								Expect(executeErr).ToNot(HaveOccurred())
   143  
   144  								Expect(testUI.Out).To(Say(`Deleting space some-space in org some-org as some-user\.\.\.`))
   145  								Expect(testUI.Out).To(Say("OK"))
   146  								Expect(testUI.Out).To(Say("TIP: No space targeted, use 'faceman target -s' to target a space."))
   147  
   148  								Expect(testUI.Err).To(Say("warning-1"))
   149  								Expect(testUI.Err).To(Say("warning-2"))
   150  
   151  								Expect(fakeConfig.UnsetSpaceInformationCallCount()).To(Equal(1))
   152  
   153  								spaceArg, orgArg := fakeActor.DeleteSpaceByNameAndOrganizationNameArgsForCall(0)
   154  								Expect(spaceArg).To(Equal("some-space"))
   155  								Expect(orgArg).To(Equal("some-org"))
   156  							})
   157  						})
   158  
   159  						When("the user was NOT targeted to the space", func() {
   160  							BeforeEach(func() {
   161  								fakeConfig.TargetedSpaceReturns(configv3.Space{Name: "some-space"})
   162  								fakeConfig.TargetedOrganizationReturns(configv3.Organization{Name: "some-other-org"})
   163  							})
   164  
   165  							It("displays all warnings and does not error", func() {
   166  								Expect(executeErr).ToNot(HaveOccurred())
   167  
   168  								Expect(testUI.Out).To(Say(`Deleting space some-space in org some-org as some-user\.\.\.`))
   169  								Expect(testUI.Out).To(Say("OK"))
   170  								Expect(testUI.Out).ToNot(Say("TIP: No space targeted, use 'faceman target -s' to target a space."))
   171  
   172  								Expect(testUI.Err).To(Say("warning-1"))
   173  								Expect(testUI.Err).To(Say("warning-2"))
   174  
   175  								Expect(fakeConfig.UnsetSpaceInformationCallCount()).To(Equal(0))
   176  							})
   177  						})
   178  					})
   179  				})
   180  
   181  				When("the -f flag is NOT provided", func() {
   182  					BeforeEach(func() {
   183  						cmd.Force = false
   184  					})
   185  
   186  					When("the user inputs yes", func() {
   187  						BeforeEach(func() {
   188  							_, err := input.Write([]byte("y\n"))
   189  							Expect(err).ToNot(HaveOccurred())
   190  
   191  							fakeActor.DeleteSpaceByNameAndOrganizationNameReturns(v7action.Warnings{"warning-1", "warning-2"}, nil)
   192  						})
   193  
   194  						It("deletes the space", func() {
   195  							Expect(executeErr).ToNot(HaveOccurred())
   196  
   197  							Expect(testUI.Out).To(Say(`Really delete the space some-space\? \[yN\]`))
   198  							Expect(testUI.Out).To(Say(`Deleting space some-space in org some-org as some-user\.\.\.`))
   199  							Expect(testUI.Out).To(Say("OK"))
   200  							Expect(testUI.Out).ToNot(Say("TIP: No space targeted, use 'faceman target -s' to target a space."))
   201  
   202  							Expect(testUI.Err).To(Say("warning-1"))
   203  							Expect(testUI.Err).To(Say("warning-2"))
   204  						})
   205  					})
   206  
   207  					When("the user inputs no", func() {
   208  						BeforeEach(func() {
   209  							_, err := input.Write([]byte("n\n"))
   210  							Expect(err).ToNot(HaveOccurred())
   211  						})
   212  
   213  						It("cancels the delete", func() {
   214  							Expect(executeErr).ToNot(HaveOccurred())
   215  
   216  							Expect(testUI.Out).To(Say("'%s' has not been deleted.", "some-space"))
   217  							Expect(fakeActor.DeleteSpaceByNameAndOrganizationNameCallCount()).To(Equal(0))
   218  						})
   219  					})
   220  
   221  					When("the user chooses the default", func() {
   222  						BeforeEach(func() {
   223  							_, err := input.Write([]byte("\n"))
   224  							Expect(err).ToNot(HaveOccurred())
   225  						})
   226  
   227  						It("cancels the delete", func() {
   228  							Expect(executeErr).ToNot(HaveOccurred())
   229  
   230  							Expect(testUI.Out).To(Say("'%s' has not been deleted.", "some-space"))
   231  							Expect(fakeActor.DeleteSpaceByNameAndOrganizationNameCallCount()).To(Equal(0))
   232  						})
   233  					})
   234  
   235  					When("the user input is invalid", func() {
   236  						BeforeEach(func() {
   237  							_, err := input.Write([]byte("e\n\n"))
   238  							Expect(err).ToNot(HaveOccurred())
   239  						})
   240  
   241  						It("asks the user again", func() {
   242  							Expect(executeErr).NotTo(HaveOccurred())
   243  
   244  							Expect(testUI.Out).To(Say(`Really delete the space some-space\? \[yN\]`))
   245  							Expect(testUI.Out).To(Say(`invalid input \(not y, n, yes, or no\)`))
   246  							Expect(testUI.Out).To(Say(`Really delete the space some-space\? \[yN\]`))
   247  
   248  							Expect(fakeActor.DeleteSpaceByNameAndOrganizationNameCallCount()).To(Equal(0))
   249  						})
   250  					})
   251  				})
   252  			})
   253  
   254  			When("the -o flag is NOT provided", func() {
   255  				BeforeEach(func() {
   256  					cmd.Org = ""
   257  					cmd.Force = true
   258  					fakeConfig.TargetedOrganizationReturns(configv3.Organization{Name: "some-targeted-org"})
   259  					fakeActor.DeleteSpaceByNameAndOrganizationNameReturns(v7action.Warnings{"warning-1", "warning-2"}, nil)
   260  				})
   261  
   262  				It("deletes the space in the targeted org", func() {
   263  					Expect(executeErr).NotTo(HaveOccurred())
   264  
   265  					Expect(testUI.Out).To(Say(`Deleting space some-space in org some-targeted-org as some-user\.\.\.`))
   266  					Expect(testUI.Out).To(Say("OK"))
   267  					Expect(testUI.Out).ToNot(Say(`TIP: No space targeted, use 'faceman target -s' to target a space\.`))
   268  
   269  					Expect(testUI.Err).To(Say("warning-1"))
   270  					Expect(testUI.Err).To(Say("warning-2"))
   271  
   272  					spaceArg, orgArg := fakeActor.DeleteSpaceByNameAndOrganizationNameArgsForCall(0)
   273  					Expect(spaceArg).To(Equal("some-space"))
   274  					Expect(orgArg).To(Equal("some-targeted-org"))
   275  				})
   276  
   277  				When("deleting a targeted space", func() {
   278  					BeforeEach(func() {
   279  						fakeConfig.TargetedSpaceReturns(configv3.Space{Name: "some-space"})
   280  					})
   281  
   282  					It("deletes the space and untargets the org", func() {
   283  						Expect(executeErr).ToNot(HaveOccurred())
   284  
   285  						Expect(testUI.Out).To(Say(`Deleting space some-space in org some-targeted-org as some-user\.\.\.`))
   286  						Expect(testUI.Out).To(Say("OK"))
   287  						Expect(testUI.Out).To(Say("TIP: No space targeted, use 'faceman target -s' to target a space."))
   288  
   289  						Expect(testUI.Err).To(Say("warning-1"))
   290  						Expect(testUI.Err).To(Say("warning-2"))
   291  
   292  						Expect(fakeConfig.UnsetSpaceInformationCallCount()).To(Equal(1))
   293  					})
   294  				})
   295  			})
   296  		})
   297  	})
   298  })