github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/command/v6/delete_orphaned_routes_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/command/commandfakes"
     8  	v6 "code.cloudfoundry.org/cli/command/v6"
     9  	"code.cloudfoundry.org/cli/command/v6/v6fakes"
    10  	"code.cloudfoundry.org/cli/util/configv3"
    11  	"code.cloudfoundry.org/cli/util/ui"
    12  	. "github.com/onsi/ginkgo"
    13  	. "github.com/onsi/gomega"
    14  	. "github.com/onsi/gomega/gbytes"
    15  )
    16  
    17  var _ = Describe("deleted-orphaned-routes Command", func() {
    18  	var (
    19  		cmd             v6.DeleteOrphanedRoutesCommand
    20  		testUI          *ui.UI
    21  		fakeConfig      *commandfakes.FakeConfig
    22  		fakeSharedActor *commandfakes.FakeSharedActor
    23  		fakeActor       *v6fakes.FakeDeleteOrphanedRoutesActor
    24  		input           *Buffer
    25  		binaryName      string
    26  		executeErr      error
    27  	)
    28  
    29  	BeforeEach(func() {
    30  		input = NewBuffer()
    31  		testUI = ui.NewTestUI(input, NewBuffer(), NewBuffer())
    32  		fakeConfig = new(commandfakes.FakeConfig)
    33  		fakeSharedActor = new(commandfakes.FakeSharedActor)
    34  		fakeActor = new(v6fakes.FakeDeleteOrphanedRoutesActor)
    35  
    36  		cmd = v6.DeleteOrphanedRoutesCommand{
    37  			UI:          testUI,
    38  			Config:      fakeConfig,
    39  			SharedActor: fakeSharedActor,
    40  			Actor:       fakeActor,
    41  		}
    42  
    43  		binaryName = "faceman"
    44  		fakeConfig.BinaryNameReturns(binaryName)
    45  	})
    46  
    47  	JustBeforeEach(func() {
    48  		executeErr = cmd.Execute(nil)
    49  	})
    50  
    51  	When("a cloud controller API endpoint is set", func() {
    52  		BeforeEach(func() {
    53  			fakeConfig.TargetReturns("some-url")
    54  		})
    55  
    56  		When("checking target fails", func() {
    57  			BeforeEach(func() {
    58  				fakeSharedActor.CheckTargetReturns(actionerror.NotLoggedInError{BinaryName: binaryName})
    59  			})
    60  
    61  			It("returns an error", func() {
    62  				Expect(executeErr).To(MatchError(actionerror.NotLoggedInError{BinaryName: "faceman"}))
    63  
    64  				Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1))
    65  				checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0)
    66  				Expect(checkTargetedOrg).To(BeTrue())
    67  				Expect(checkTargetedSpace).To(BeTrue())
    68  			})
    69  		})
    70  
    71  		When("the user is logged in, and org and space are targeted", func() {
    72  			BeforeEach(func() {
    73  				fakeConfig.HasTargetedOrganizationReturns(true)
    74  				fakeConfig.HasTargetedSpaceReturns(true)
    75  				fakeConfig.TargetedSpaceReturns(configv3.Space{
    76  					GUID: "some-space-guid",
    77  					Name: "some-space",
    78  				})
    79  			})
    80  
    81  			When("getting the current user returns an error", func() {
    82  				var expectedErr error
    83  
    84  				BeforeEach(func() {
    85  					expectedErr = errors.New("getting current user error")
    86  					fakeConfig.CurrentUserReturns(
    87  						configv3.User{},
    88  						expectedErr)
    89  				})
    90  
    91  				It("returns the error", func() {
    92  					Expect(executeErr).To(MatchError(expectedErr))
    93  				})
    94  			})
    95  
    96  			When("getting the current user does not return an error", func() {
    97  				BeforeEach(func() {
    98  					fakeConfig.CurrentUserReturns(
    99  						configv3.User{Name: "some-user"},
   100  						nil)
   101  				})
   102  
   103  				When("the '-f' flag is provided", func() {
   104  					BeforeEach(func() {
   105  						cmd.Force = true
   106  					})
   107  
   108  					It("does not prompt for user confirmation", func() {
   109  						Expect(executeErr).ToNot(HaveOccurred())
   110  
   111  						Expect(testUI.Out).ToNot(Say(`Really delete orphaned routes\? \[yN\]:`))
   112  					})
   113  				})
   114  
   115  				When("the '-f' flag is not provided", func() {
   116  					When("user is prompted for confirmation", func() {
   117  						BeforeEach(func() {
   118  							_, err := input.Write([]byte("\n"))
   119  							Expect(err).NotTo(HaveOccurred())
   120  						})
   121  
   122  						It("displays the interactive prompt", func() {
   123  							Expect(executeErr).ToNot(HaveOccurred())
   124  
   125  							Expect(testUI.Out).To(Say(`Really delete orphaned routes\? \[yN\]:`))
   126  						})
   127  					})
   128  
   129  					When("the user inputs no", func() {
   130  						BeforeEach(func() {
   131  							_, err := input.Write([]byte("n\n"))
   132  							Expect(err).NotTo(HaveOccurred())
   133  						})
   134  
   135  						It("does not delete orphaned routes", func() {
   136  							Expect(executeErr).ToNot(HaveOccurred())
   137  
   138  							Expect(fakeActor.DeleteUnmappedRoutesCallCount()).To(Equal(0))
   139  						})
   140  					})
   141  
   142  					When("the user input is invalid", func() {
   143  						BeforeEach(func() {
   144  							_, err := input.Write([]byte("e\n"))
   145  							Expect(err).NotTo(HaveOccurred())
   146  						})
   147  
   148  						It("returns an error", func() {
   149  							Expect(executeErr).To(HaveOccurred())
   150  							Expect(fakeActor.DeleteUnmappedRoutesCallCount()).To(Equal(0))
   151  						})
   152  					})
   153  
   154  					When("the user inputs yes", func() {
   155  						BeforeEach(func() {
   156  							_, err := input.Write([]byte("y\n"))
   157  							Expect(err).NotTo(HaveOccurred())
   158  						})
   159  
   160  						It("displays a message showing what user is deleting the routes", func() {
   161  							Expect(executeErr).ToNot(HaveOccurred())
   162  
   163  							Expect(testUI.Out).To(Say("Deleting routes as some-user ...\n"))
   164  						})
   165  
   166  						When("there are warnings", func() {
   167  							BeforeEach(func() {
   168  								fakeActor.DeleteUnmappedRoutesReturns([]string{"foo"}, nil)
   169  							})
   170  
   171  							It("displays the warnings", func() {
   172  								Expect(executeErr).ToNot(HaveOccurred())
   173  
   174  								Expect(testUI.Err).To(Say("foo"))
   175  							})
   176  						})
   177  
   178  						It("deletes the routes", func() {
   179  							Expect(fakeActor.DeleteUnmappedRoutesCallCount()).To(Equal(1))
   180  							Expect(testUI.Out).To(Say("OK"))
   181  						})
   182  
   183  						When("deleting routes returns an error", func() {
   184  							var expectedErr error
   185  
   186  							BeforeEach(func() {
   187  								expectedErr = errors.New("deleting unmapped routes error")
   188  								fakeActor.DeleteUnmappedRoutesReturns(nil, expectedErr)
   189  							})
   190  
   191  							It("returns the error", func() {
   192  								Expect(executeErr).To(MatchError(expectedErr))
   193  							})
   194  						})
   195  					})
   196  				})
   197  			})
   198  		})
   199  	})
   200  })