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