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