github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/command/v6/domains_command_test.go (about) 1 package v6_test 2 3 import ( 4 "errors" 5 6 "code.cloudfoundry.org/cli/actor/actionerror" 7 "code.cloudfoundry.org/cli/actor/v2action" 8 "code.cloudfoundry.org/cli/command/commandfakes" 9 "code.cloudfoundry.org/cli/command/translatableerror" 10 . "code.cloudfoundry.org/cli/command/v6" 11 "code.cloudfoundry.org/cli/command/v6/v6fakes" 12 "code.cloudfoundry.org/cli/util/configv3" 13 "code.cloudfoundry.org/cli/util/ui" 14 . "github.com/onsi/ginkgo" 15 . "github.com/onsi/gomega" 16 . "github.com/onsi/gomega/gbytes" 17 ) 18 19 var _ = Describe("Domains Command", func() { 20 var ( 21 testUI *ui.UI 22 fakeConfig *commandfakes.FakeConfig 23 fakeSharedActor *commandfakes.FakeSharedActor 24 fakeActor *v6fakes.FakeDomainsActor 25 binaryName string 26 extraArgs []string 27 cmd DomainsCommand 28 executeErr error 29 ) 30 31 BeforeEach(func() { 32 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 33 fakeConfig = new(commandfakes.FakeConfig) 34 fakeSharedActor = new(commandfakes.FakeSharedActor) 35 fakeActor = new(v6fakes.FakeDomainsActor) 36 binaryName = "some-binary-name" 37 extraArgs = nil 38 39 cmd = DomainsCommand{ 40 UI: testUI, 41 Config: fakeConfig, 42 SharedActor: fakeSharedActor, 43 Actor: fakeActor, 44 } 45 }) 46 47 JustBeforeEach(func() { 48 executeErr = cmd.Execute(extraArgs) 49 }) 50 51 When("the user provides arguments", func() { 52 BeforeEach(func() { 53 extraArgs = []string{"some-extra-arg"} 54 }) 55 56 It("fails with a TooManyArgumentsError", func() { 57 Expect(executeErr).To(MatchError(translatableerror.TooManyArgumentsError{ 58 ExtraArgument: "some-extra-arg", 59 })) 60 }) 61 }) 62 63 When("the user is not logged in", func() { 64 BeforeEach(func() { 65 fakeSharedActor.CheckTargetReturns(actionerror.NotLoggedInError{BinaryName: binaryName}) 66 }) 67 68 It("fails with a NotLoggedInError", func() { 69 Expect(executeErr).To(MatchError(actionerror.NotLoggedInError{BinaryName: binaryName})) 70 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 71 72 checkTargetedOrgArg, checkTargetedSpaceArg := fakeSharedActor.CheckTargetArgsForCall(0) 73 74 Expect(checkTargetedOrgArg).To(BeTrue()) 75 Expect(checkTargetedSpaceArg).To(BeFalse()) 76 }) 77 }) 78 79 When("the user is logged in and targeting an org", func() { 80 When("getting the current user fails", func() { 81 BeforeEach(func() { 82 fakeConfig.CurrentUserReturns(configv3.User{}, errors.New("get-user-error")) 83 }) 84 85 It("returns the error", func() { 86 Expect(executeErr).To(MatchError("get-user-error")) 87 }) 88 }) 89 90 When("getting the current user succeeds", func() { 91 var targetedOrg configv3.Organization 92 93 BeforeEach(func() { 94 fakeConfig.CurrentUserReturns( 95 configv3.User{Name: "some-user"}, 96 nil) 97 targetedOrg = configv3.Organization{Name: "some-org", GUID: "some-org-guid"} 98 fakeConfig.TargetedOrganizationReturns(targetedOrg) 99 }) 100 101 It("displays a message indicating that it is getting the domains", func() { 102 Expect(executeErr).ToNot(HaveOccurred()) 103 Expect(testUI.Out).To(Say(`Getting domains in org some-org as some-user\.\.\.`)) 104 }) 105 106 When("GetDomains returns a domain", func() { 107 BeforeEach(func() { 108 domain := v2action.Domain{ 109 Name: "domain.name", 110 Type: "some-domain-type-1", 111 } 112 fakeActor.GetDomainsReturns([]v2action.Domain{domain}, v2action.Warnings{"warning-1", "warning-2"}, nil) 113 }) 114 115 It("displays the domain", func() { 116 Expect(testUI.Out).To(Say(`name\s+status\s+type\s+details`)) 117 Expect(testUI.Out).To(Say(`domain.name\s+some-domain-type-1\s+$`)) 118 }) 119 120 It("displays all warnings", func() { 121 Expect(testUI.Err).To(Say(`warning-1`)) 122 Expect(testUI.Err).To(Say(`warning-2`)) 123 }) 124 }) 125 126 When("GetDomains returns an internal domain", func() { 127 BeforeEach(func() { 128 sharedDomain := v2action.Domain{ 129 Name: "shared.domain", 130 Type: "some-domain-type-2", 131 RouterGroupType: "tcp", 132 Internal: true, 133 } 134 fakeActor.GetDomainsReturns([]v2action.Domain{sharedDomain}, v2action.Warnings{}, nil) 135 }) 136 137 It("displays internal in the details", func() { 138 Expect(testUI.Out).To(Say(`name\s+status\s+type\s+details`)) 139 Expect(testUI.Out).To(Say(`shared.domain\s+some-domain-type-2\s+tcp\s+internal`)) 140 }) 141 }) 142 143 When("GetDomains returns more than one domain", func() { 144 BeforeEach(func() { 145 privateDomain := v2action.Domain{ 146 Name: "private.domain", 147 Type: "some-domain-type-1", 148 RouterGroupType: "zombo", 149 } 150 151 sharedDomain := v2action.Domain{ 152 Name: "shared.domain", 153 Type: "some-domain-type-2", 154 RouterGroupType: "tcp", 155 Internal: true, 156 } 157 fakeActor.GetDomainsReturns([]v2action.Domain{privateDomain, sharedDomain}, v2action.Warnings{}, nil) 158 }) 159 160 It("displays all domains", func() { 161 Expect(testUI.Out).To(Say(`name\s+status\s+type\s+details`)) 162 Expect(testUI.Out).To(Say(`private.domain\s+some-domain-type-1\s+zombo`)) 163 Expect(testUI.Out).To(Say(`shared.domain\s+some-domain-type-2\s+tcp`)) 164 }) 165 }) 166 167 When("GetDomains returns an error", func() { 168 BeforeEach(func() { 169 fakeActor.GetDomainsReturns([]v2action.Domain{}, v2action.Warnings{"warning-1", "warning-2"}, actionerror.OrganizationNotFoundError{Name: targetedOrg.Name}) 170 }) 171 172 It("fails and returns an error", func() { 173 Expect(testUI.Out).To(Say(`Getting domains in org some-org as some-user\.\.\.`)) 174 Expect(executeErr).To(MatchError(actionerror.OrganizationNotFoundError{Name: targetedOrg.Name})) 175 Expect(fakeActor.GetDomainsCallCount()).To(Equal(1)) 176 actualOrgGUID := fakeActor.GetDomainsArgsForCall(0) 177 Expect(actualOrgGUID).To(Equal(targetedOrg.GUID)) 178 }) 179 180 It("displays all warnings", func() { 181 Expect(testUI.Err).To(Say(`warning-1`)) 182 Expect(testUI.Err).To(Say(`warning-2`)) 183 }) 184 }) 185 }) 186 }) 187 })