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

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