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

     1  package v6_test
     2  
     3  import (
     4  	"errors"
     5  
     6  	"code.cloudfoundry.org/cli/actor/actionerror"
     7  	"code.cloudfoundry.org/cli/actor/v2action"
     8  	"code.cloudfoundry.org/cli/command/commandfakes"
     9  	. "code.cloudfoundry.org/cli/command/v6"
    10  	"code.cloudfoundry.org/cli/command/v6/v6fakes"
    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       *v6fakes.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(v6fakes.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(v2action.Warnings{"warning-1", "warning-2"}, actionerror.SpaceNotFoundError{Name: "some-space"})
   118  						})
   119  
   120  						It("returns the translatable error", func() {
   121  							Expect(executeErr).To(MatchError(actionerror.SpaceNotFoundError{Name: "some-space"}))
   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  						})
   127  					})
   128  
   129  					When("the deleting the space succeeds", func() {
   130  						BeforeEach(func() {
   131  							fakeActor.DeleteSpaceByNameAndOrganizationNameReturns(v2action.Warnings{"warning-1", "warning-2"}, nil)
   132  						})
   133  
   134  						When("the user was targeted to the space", func() {
   135  							BeforeEach(func() {
   136  								fakeConfig.TargetedSpaceReturns(configv3.Space{Name: "some-space"})
   137  								fakeConfig.TargetedOrganizationReturns(configv3.Organization{Name: "some-org"})
   138  							})
   139  
   140  							It("untargets the space, displays all warnings and does not error", func() {
   141  								Expect(executeErr).ToNot(HaveOccurred())
   142  
   143  								Expect(testUI.Out).To(Say(`Deleting space some-space in org some-org as some-user\.\.\.`))
   144  								Expect(testUI.Out).To(Say("OK"))
   145  								Expect(testUI.Out).To(Say("TIP: No space targeted, use 'faceman target -s' to target a space."))
   146  
   147  								Expect(testUI.Err).To(Say("warning-1"))
   148  								Expect(testUI.Err).To(Say("warning-2"))
   149  
   150  								Expect(fakeConfig.UnsetSpaceInformationCallCount()).To(Equal(1))
   151  
   152  								spaceArg, orgArg := fakeActor.DeleteSpaceByNameAndOrganizationNameArgsForCall(0)
   153  								Expect(spaceArg).To(Equal("some-space"))
   154  								Expect(orgArg).To(Equal("some-org"))
   155  							})
   156  						})
   157  
   158  						When("the user was NOT targeted to the space", func() {
   159  							BeforeEach(func() {
   160  								fakeConfig.TargetedSpaceReturns(configv3.Space{Name: "some-space"})
   161  								fakeConfig.TargetedOrganizationReturns(configv3.Organization{Name: "some-other-org"})
   162  							})
   163  
   164  							It("displays all warnings and does not error", func() {
   165  								Expect(executeErr).ToNot(HaveOccurred())
   166  
   167  								Expect(testUI.Out).To(Say(`Deleting space some-space in org some-org as some-user\.\.\.`))
   168  								Expect(testUI.Out).To(Say("OK"))
   169  								Expect(testUI.Out).ToNot(Say("TIP: No space targeted, use 'faceman target -s' to target a space."))
   170  
   171  								Expect(testUI.Err).To(Say("warning-1"))
   172  								Expect(testUI.Err).To(Say("warning-2"))
   173  
   174  								Expect(fakeConfig.UnsetSpaceInformationCallCount()).To(Equal(0))
   175  							})
   176  						})
   177  					})
   178  				})
   179  
   180  				When("the -f flag is NOT provided", func() {
   181  					BeforeEach(func() {
   182  						cmd.Force = false
   183  					})
   184  
   185  					When("the user inputs yes", func() {
   186  						BeforeEach(func() {
   187  							_, err := input.Write([]byte("y\n"))
   188  							Expect(err).ToNot(HaveOccurred())
   189  
   190  							fakeActor.DeleteSpaceByNameAndOrganizationNameReturns(v2action.Warnings{"warning-1", "warning-2"}, nil)
   191  						})
   192  
   193  						It("deletes the space", func() {
   194  							Expect(executeErr).ToNot(HaveOccurred())
   195  
   196  							Expect(testUI.Out).To(Say(`Really delete the space some-space\? \[yN\]`))
   197  							Expect(testUI.Out).To(Say(`Deleting space some-space in org some-org as some-user\.\.\.`))
   198  							Expect(testUI.Out).To(Say("OK"))
   199  							Expect(testUI.Out).ToNot(Say("TIP: No space targeted, use 'faceman target -s' to target a space."))
   200  
   201  							Expect(testUI.Err).To(Say("warning-1"))
   202  							Expect(testUI.Err).To(Say("warning-2"))
   203  						})
   204  					})
   205  
   206  					When("the user inputs no", func() {
   207  						BeforeEach(func() {
   208  							_, err := input.Write([]byte("n\n"))
   209  							Expect(err).ToNot(HaveOccurred())
   210  						})
   211  
   212  						It("cancels the delete", func() {
   213  							Expect(executeErr).ToNot(HaveOccurred())
   214  
   215  							Expect(testUI.Out).To(Say("Delete cancelled"))
   216  							Expect(fakeActor.DeleteSpaceByNameAndOrganizationNameCallCount()).To(Equal(0))
   217  						})
   218  					})
   219  
   220  					When("the user chooses the default", func() {
   221  						BeforeEach(func() {
   222  							_, err := input.Write([]byte("\n"))
   223  							Expect(err).ToNot(HaveOccurred())
   224  						})
   225  
   226  						It("cancels the delete", func() {
   227  							Expect(executeErr).ToNot(HaveOccurred())
   228  
   229  							Expect(testUI.Out).To(Say("Delete cancelled"))
   230  							Expect(fakeActor.DeleteSpaceByNameAndOrganizationNameCallCount()).To(Equal(0))
   231  						})
   232  					})
   233  
   234  					When("the user input is invalid", func() {
   235  						BeforeEach(func() {
   236  							_, err := input.Write([]byte("e\n\n"))
   237  							Expect(err).ToNot(HaveOccurred())
   238  						})
   239  
   240  						It("asks the user again", func() {
   241  							Expect(executeErr).NotTo(HaveOccurred())
   242  
   243  							Expect(testUI.Out).To(Say(`Really delete the space some-space\? \[yN\]`))
   244  							Expect(testUI.Out).To(Say(`invalid input \(not y, n, yes, or no\)`))
   245  							Expect(testUI.Out).To(Say(`Really delete the space some-space\? \[yN\]`))
   246  
   247  							Expect(fakeActor.DeleteSpaceByNameAndOrganizationNameCallCount()).To(Equal(0))
   248  						})
   249  					})
   250  				})
   251  			})
   252  
   253  			When("the -o flag is NOT provided", func() {
   254  				BeforeEach(func() {
   255  					cmd.Org = ""
   256  					cmd.Force = true
   257  					fakeConfig.TargetedOrganizationReturns(configv3.Organization{Name: "some-targeted-org"})
   258  					fakeActor.DeleteSpaceByNameAndOrganizationNameReturns(v2action.Warnings{"warning-1", "warning-2"}, nil)
   259  				})
   260  
   261  				It("deletes the space in the targeted org", func() {
   262  					Expect(executeErr).NotTo(HaveOccurred())
   263  
   264  					Expect(testUI.Out).To(Say(`Deleting space some-space in org some-targeted-org as some-user\.\.\.`))
   265  					Expect(testUI.Out).To(Say("OK"))
   266  					Expect(testUI.Out).ToNot(Say(`TIP: No space targeted, use 'faceman target -s' to target a space\.`))
   267  
   268  					Expect(testUI.Err).To(Say("warning-1"))
   269  					Expect(testUI.Err).To(Say("warning-2"))
   270  
   271  					spaceArg, orgArg := fakeActor.DeleteSpaceByNameAndOrganizationNameArgsForCall(0)
   272  					Expect(spaceArg).To(Equal("some-space"))
   273  					Expect(orgArg).To(Equal("some-targeted-org"))
   274  				})
   275  
   276  				When("deleting a targeted space", func() {
   277  					BeforeEach(func() {
   278  						fakeConfig.TargetedSpaceReturns(configv3.Space{Name: "some-space"})
   279  					})
   280  
   281  					It("deletes the space and untargets the org", func() {
   282  						Expect(executeErr).ToNot(HaveOccurred())
   283  
   284  						Expect(testUI.Out).To(Say(`Deleting space some-space in org some-targeted-org as some-user\.\.\.`))
   285  						Expect(testUI.Out).To(Say("OK"))
   286  						Expect(testUI.Out).To(Say("TIP: No space targeted, use 'faceman target -s' to target a space."))
   287  
   288  						Expect(testUI.Err).To(Say("warning-1"))
   289  						Expect(testUI.Err).To(Say("warning-2"))
   290  
   291  						Expect(fakeConfig.UnsetSpaceInformationCallCount()).To(Equal(1))
   292  					})
   293  				})
   294  			})
   295  		})
   296  	})
   297  })