github.com/orange-cloudfoundry/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 })