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

     1  package v7_test
     2  
     3  import (
     4  	"errors"
     5  
     6  	"code.cloudfoundry.org/cli/command/flag"
     7  
     8  	"code.cloudfoundry.org/cli/actor/v7action"
     9  
    10  	"code.cloudfoundry.org/cli/actor/actionerror"
    11  	"code.cloudfoundry.org/cli/command/commandfakes"
    12  	. "code.cloudfoundry.org/cli/command/v7"
    13  	"code.cloudfoundry.org/cli/command/v7/v7fakes"
    14  	"code.cloudfoundry.org/cli/util/configv3"
    15  	"code.cloudfoundry.org/cli/util/ui"
    16  	. "github.com/onsi/ginkgo"
    17  	. "github.com/onsi/gomega"
    18  	. "github.com/onsi/gomega/gbytes"
    19  )
    20  
    21  var _ = Describe("space Command", func() {
    22  	var (
    23  		cmd             SpaceCommand
    24  		testUI          *ui.UI
    25  		fakeConfig      *commandfakes.FakeConfig
    26  		fakeSharedActor *commandfakes.FakeSharedActor
    27  		fakeActor       *v7fakes.FakeSpaceActor
    28  		binaryName      string
    29  		executeErr      error
    30  	)
    31  
    32  	BeforeEach(func() {
    33  		testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer())
    34  		fakeConfig = new(commandfakes.FakeConfig)
    35  		fakeSharedActor = new(commandfakes.FakeSharedActor)
    36  		fakeActor = new(v7fakes.FakeSpaceActor)
    37  
    38  		cmd = SpaceCommand{
    39  			UI:          testUI,
    40  			Config:      fakeConfig,
    41  			SharedActor: fakeSharedActor,
    42  			Actor:       fakeActor,
    43  			RequiredArgs: flag.Space{
    44  				Space: "some-space",
    45  			},
    46  		}
    47  
    48  		binaryName = "faceman"
    49  		fakeConfig.BinaryNameReturns(binaryName)
    50  
    51  		fakeConfig.TargetedOrganizationReturns(configv3.Organization{
    52  			Name: "some-org",
    53  			GUID: "some-org-guid",
    54  		})
    55  
    56  		fakeConfig.CurrentUserReturns(configv3.User{Name: "steve"}, nil)
    57  	})
    58  
    59  	JustBeforeEach(func() {
    60  		executeErr = cmd.Execute(nil)
    61  	})
    62  
    63  	When("checking target fails", func() {
    64  		BeforeEach(func() {
    65  			fakeSharedActor.CheckTargetReturns(actionerror.NoOrganizationTargetedError{BinaryName: binaryName})
    66  		})
    67  
    68  		It("returns an error", func() {
    69  			Expect(executeErr).To(MatchError(actionerror.NoOrganizationTargetedError{BinaryName: binaryName}))
    70  
    71  			Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1))
    72  			checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0)
    73  			Expect(checkTargetedOrg).To(BeTrue())
    74  			Expect(checkTargetedSpace).To(BeFalse())
    75  		})
    76  	})
    77  
    78  	When("the user is not logged in", func() {
    79  		var expectedErr error
    80  
    81  		BeforeEach(func() {
    82  			expectedErr = errors.New("some current user error")
    83  			fakeConfig.CurrentUserReturns(configv3.User{}, expectedErr)
    84  		})
    85  
    86  		It("return an error", func() {
    87  			Expect(executeErr).To(Equal(expectedErr))
    88  		})
    89  	})
    90  
    91  	When("the --guid flag is passed", func() {
    92  		BeforeEach(func() {
    93  			cmd.GUID = true
    94  		})
    95  
    96  		When("getting the space succeeds", func() {
    97  			BeforeEach(func() {
    98  				fakeActor.GetSpaceByNameAndOrganizationReturns(
    99  					v7action.Space{GUID: "some-space-guid"},
   100  					v7action.Warnings{"some-warning"},
   101  					nil,
   102  				)
   103  			})
   104  
   105  			It("displays warnings and the space guid", func() {
   106  				Expect(executeErr).NotTo(HaveOccurred())
   107  				Expect(testUI.Err).To(Say("some-warning"))
   108  				Expect(testUI.Out).To(Say("some-space-guid"))
   109  			})
   110  		})
   111  
   112  		When("getting the space fails", func() {
   113  			BeforeEach(func() {
   114  				fakeActor.GetSpaceByNameAndOrganizationReturns(
   115  					v7action.Space{},
   116  					v7action.Warnings{"some-warning"},
   117  					errors.New("space-error"),
   118  				)
   119  			})
   120  
   121  			It("displays warnings and returns the error", func() {
   122  				Expect(testUI.Err).To(Say("some-warning"))
   123  				Expect(executeErr).To(MatchError("space-error"))
   124  			})
   125  		})
   126  	})
   127  
   128  	When("the --guid flag is not passed", func() {
   129  		When("fetching the space summary succeeds with an isolation segment", func() {
   130  			BeforeEach(func() {
   131  				fakeActor.GetSpaceSummaryByNameAndOrganizationReturns(
   132  					v7action.SpaceSummary{
   133  						Name:                 "some-space",
   134  						OrgName:              "some-org",
   135  						AppNames:             []string{"app1", "app2", "app3"},
   136  						ServiceInstanceNames: []string{"instance1", "instance2"},
   137  						IsolationSegmentName: "iso-seg-name",
   138  					},
   139  					v7action.Warnings{"some-warning"},
   140  					nil,
   141  				)
   142  			})
   143  
   144  			It("displays flavor text", func() {
   145  				Expect(testUI.Out).To(Say("Getting info for space some-space in org some-org as steve..."))
   146  			})
   147  
   148  			It("displays warnings", func() {
   149  				Expect(testUI.Err).To(Say("some-warning"))
   150  			})
   151  
   152  			It("displays a table of values", func() {
   153  				Expect(testUI.Out).To(Say(`name:\s+some-space`))
   154  				Expect(testUI.Out).To(Say(`org:\s+some-org`))
   155  				Expect(testUI.Out).To(Say(`apps:\s+app1, app2, app3`))
   156  				Expect(testUI.Out).To(Say(`services:\s+instance1, instance2`))
   157  				Expect(testUI.Out).To(Say(`isolation segment:\s+iso-seg-name`))
   158  			})
   159  		})
   160  
   161  		When("fetching the space summary succeeds without an isolation segment", func() {
   162  			BeforeEach(func() {
   163  				fakeActor.GetSpaceSummaryByNameAndOrganizationReturns(
   164  					v7action.SpaceSummary{
   165  						Name:                 "some-space",
   166  						OrgName:              "some-org",
   167  						AppNames:             []string{"app1", "app2", "app3"},
   168  						ServiceInstanceNames: []string{"instance1", "instance2"},
   169  					},
   170  					v7action.Warnings{"some-warning"},
   171  					nil,
   172  				)
   173  			})
   174  
   175  			It("displays flavor text", func() {
   176  				Expect(testUI.Out).To(Say("Getting info for space some-space in org some-org as steve..."))
   177  			})
   178  
   179  			It("displays warnings", func() {
   180  				Expect(testUI.Err).To(Say("some-warning"))
   181  			})
   182  
   183  			It("displays a table of values", func() {
   184  				Expect(testUI.Out).To(Say(`name:\s+some-space`))
   185  				Expect(testUI.Out).To(Say(`org:\s+some-org`))
   186  				Expect(testUI.Out).To(Say(`apps:\s+app1, app2, app3`))
   187  				Expect(testUI.Out).To(Say(`services:\s+instance1, instance2`))
   188  				Expect(testUI.Out).To(Say(`isolation segment:`))
   189  			})
   190  		})
   191  
   192  		When("fetching the space summary fails", func() {
   193  			BeforeEach(func() {
   194  				fakeActor.GetSpaceSummaryByNameAndOrganizationReturns(
   195  					v7action.SpaceSummary{},
   196  					v7action.Warnings{"some-warning"},
   197  					errors.New("get-summary-error"),
   198  				)
   199  			})
   200  
   201  			It("displays warnings and returns the error", func() {
   202  				Expect(testUI.Err).To(Say("some-warning"))
   203  				Expect(executeErr).To(MatchError("get-summary-error"))
   204  			})
   205  		})
   206  	})
   207  })