github.com/sleungcy/cli@v7.1.0+incompatible/command/v7/domains_command_test.go (about)

     1  package v7_test
     2  
     3  import (
     4  	"errors"
     5  
     6  	"code.cloudfoundry.org/cli/resources"
     7  	"code.cloudfoundry.org/cli/types"
     8  
     9  	"code.cloudfoundry.org/cli/actor/actionerror"
    10  	"code.cloudfoundry.org/cli/actor/v7action"
    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  
    17  	. "github.com/onsi/ginkgo"
    18  	. "github.com/onsi/gomega"
    19  	. "github.com/onsi/gomega/gbytes"
    20  )
    21  
    22  var _ = Describe("domains Command", func() {
    23  	var (
    24  		cmd             DomainsCommand
    25  		testUI          *ui.UI
    26  		fakeConfig      *commandfakes.FakeConfig
    27  		fakeSharedActor *commandfakes.FakeSharedActor
    28  		fakeActor       *v7fakes.FakeActor
    29  		executeErr      error
    30  		args            []string
    31  		binaryName      string
    32  	)
    33  
    34  	const tableHeaders = `name\s+availability\s+internal`
    35  
    36  	JustBeforeEach(func() {
    37  		executeErr = cmd.Execute(args)
    38  	})
    39  
    40  	BeforeEach(func() {
    41  		testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer())
    42  		fakeConfig = new(commandfakes.FakeConfig)
    43  		fakeSharedActor = new(commandfakes.FakeSharedActor)
    44  		fakeActor = new(v7fakes.FakeActor)
    45  		args = nil
    46  
    47  		cmd = DomainsCommand{
    48  			BaseCommand: BaseCommand{
    49  				UI:          testUI,
    50  				Config:      fakeConfig,
    51  				SharedActor: fakeSharedActor,
    52  				Actor:       fakeActor,
    53  			},
    54  		}
    55  
    56  		binaryName = "faceman"
    57  		fakeConfig.BinaryNameReturns(binaryName)
    58  	})
    59  
    60  	When("the environment is not setup correctly", func() {
    61  		When("checking target fails", func() {
    62  			BeforeEach(func() {
    63  				fakeSharedActor.CheckTargetReturns(actionerror.NotLoggedInError{BinaryName: binaryName})
    64  			})
    65  
    66  			It("returns an error", func() {
    67  				Expect(executeErr).To(MatchError(actionerror.NotLoggedInError{BinaryName: binaryName}))
    68  
    69  				Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1))
    70  				checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0)
    71  				Expect(checkTargetedOrg).To(BeTrue())
    72  				Expect(checkTargetedSpace).To(BeFalse())
    73  			})
    74  		})
    75  
    76  		When("when there is no org targeted", func() {
    77  			BeforeEach(func() {
    78  				fakeSharedActor.CheckTargetReturns(actionerror.NoOrganizationTargetedError{BinaryName: binaryName})
    79  			})
    80  
    81  			It("returns an error", func() {
    82  				Expect(executeErr).To(MatchError(actionerror.NoOrganizationTargetedError{BinaryName: binaryName}))
    83  				checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0)
    84  				Expect(checkTargetedOrg).To(BeTrue())
    85  				Expect(checkTargetedSpace).To(BeFalse())
    86  			})
    87  		})
    88  	})
    89  
    90  	Context("When the environment is setup correctly", func() {
    91  		BeforeEach(func() {
    92  			fakeConfig.CurrentUserReturns(configv3.User{Name: "banana"}, nil)
    93  		})
    94  
    95  		When("DomainsActor returns an error", func() {
    96  			var expectedErr error
    97  
    98  			BeforeEach(func() {
    99  				warnings := v7action.Warnings{"warning-1", "warning-2"}
   100  				expectedErr = errors.New("some-error")
   101  				fakeActor.GetOrganizationDomainsReturns(nil, warnings, expectedErr)
   102  			})
   103  
   104  			It("prints that error with warnings", func() {
   105  				Expect(executeErr).To(Equal(expectedErr))
   106  
   107  				Expect(testUI.Err).To(Say("warning-1"))
   108  				Expect(testUI.Err).To(Say("warning-2"))
   109  				Expect(testUI.Out).ToNot(Say(tableHeaders))
   110  			})
   111  		})
   112  
   113  		When("GetDomains returns some domains", func() {
   114  			var domains []resources.Domain
   115  
   116  			BeforeEach(func() {
   117  				domains = []resources.Domain{
   118  					{Name: "domain1", GUID: "domain-guid-1", Internal: types.NullBool{IsSet: true, Value: true}, Protocols: []string{"http"}},
   119  					{Name: "domain3", GUID: "domain-guid-3", Internal: types.NullBool{IsSet: false, Value: false}, Protocols: []string{"tcp"}, OrganizationGUID: "owning-org-guid"},
   120  					{Name: "domain2", GUID: "domain-guid-2", Internal: types.NullBool{IsSet: true, Value: false}, Protocols: []string{"http", "tcp"}},
   121  				}
   122  
   123  				fakeActor.GetOrganizationDomainsReturns(
   124  					domains,
   125  					v7action.Warnings{"actor-warning-1", "actor-warning-2", "actor-warning-3"},
   126  					nil,
   127  				)
   128  
   129  				fakeConfig.TargetedOrganizationReturns(configv3.Organization{
   130  					GUID: "some-org-guid",
   131  					Name: "some-org",
   132  				})
   133  			})
   134  
   135  			It("asks the DomainsActor for a list of domains", func() {
   136  				Expect(fakeActor.GetOrganizationDomainsCallCount()).To(Equal(1))
   137  			})
   138  
   139  			It("prints warnings", func() {
   140  				Expect(testUI.Err).To(Say("actor-warning-1"))
   141  				Expect(testUI.Err).To(Say("actor-warning-2"))
   142  				Expect(testUI.Err).To(Say("actor-warning-3"))
   143  			})
   144  
   145  			It("prints the list of domains in alphabetical order", func() {
   146  				Expect(executeErr).NotTo(HaveOccurred())
   147  				Expect(testUI.Out).To(Say(tableHeaders))
   148  				Expect(testUI.Out).To(Say(`domain1\s+shared\s+true\s+http`))
   149  				Expect(testUI.Out).To(Say(`domain2\s+shared\s+http,tcp`))
   150  				Expect(testUI.Out).To(Say(`domain3\s+private\s+tcp`))
   151  			})
   152  
   153  			It("prints the flavor text", func() {
   154  				Expect(testUI.Out).To(Say("Getting domains in org some-org as banana...\n\n"))
   155  			})
   156  		})
   157  
   158  		When("GetDomains returns no domains", func() {
   159  			var domains []resources.Domain
   160  
   161  			BeforeEach(func() {
   162  				domains = []resources.Domain{}
   163  
   164  				fakeActor.GetOrganizationDomainsReturns(
   165  					domains,
   166  					v7action.Warnings{"actor-warning-1", "actor-warning-2", "actor-warning-3"},
   167  					nil,
   168  				)
   169  
   170  				fakeConfig.TargetedOrganizationReturns(configv3.Organization{
   171  					GUID: "some-org-guid",
   172  					Name: "some-org",
   173  				})
   174  			})
   175  
   176  			It("asks the DomainsActor for a list of domains", func() {
   177  				Expect(fakeActor.GetOrganizationDomainsCallCount()).To(Equal(1))
   178  			})
   179  
   180  			It("prints warnings", func() {
   181  				Expect(testUI.Err).To(Say("actor-warning-1"))
   182  				Expect(testUI.Err).To(Say("actor-warning-2"))
   183  				Expect(testUI.Err).To(Say("actor-warning-3"))
   184  			})
   185  
   186  			It("does not print table headers", func() {
   187  				Expect(testUI.Out).NotTo(Say(tableHeaders))
   188  			})
   189  
   190  			It("prints a message indicating that no domains were found", func() {
   191  				Expect(executeErr).NotTo(HaveOccurred())
   192  				Expect(testUI.Out).To(Say("No domains found."))
   193  			})
   194  
   195  			It("prints the flavor text", func() {
   196  				Expect(testUI.Out).To(Say("Getting domains in org some-org as banana...\n\n"))
   197  			})
   198  		})
   199  		Context("when a labels flag is set", func() {
   200  			BeforeEach(func() {
   201  				cmd.Labels = "fish=moose"
   202  			})
   203  
   204  			It("passes the flag to the API", func() {
   205  				Expect(fakeActor.GetOrganizationDomainsCallCount()).To(Equal(1))
   206  				_, labelSelector := fakeActor.GetOrganizationDomainsArgsForCall(0)
   207  				Expect(labelSelector).To(Equal("fish=moose"))
   208  			})
   209  		})
   210  	})
   211  })