github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/command/v6/v3_app_command_test.go (about) 1 package v6_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/v2v3action" 10 "code.cloudfoundry.org/cli/actor/v3action" 11 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/constant" 12 "code.cloudfoundry.org/cli/command/commandfakes" 13 "code.cloudfoundry.org/cli/command/flag" 14 . "code.cloudfoundry.org/cli/command/v6" 15 "code.cloudfoundry.org/cli/command/v6/v6fakes" 16 "code.cloudfoundry.org/cli/util/configv3" 17 "code.cloudfoundry.org/cli/util/ui" 18 . "github.com/onsi/ginkgo" 19 . "github.com/onsi/gomega" 20 . "github.com/onsi/gomega/gbytes" 21 ) 22 23 var _ = Describe("app Command", func() { 24 var ( 25 cmd V3AppCommand 26 testUI *ui.UI 27 fakeConfig *commandfakes.FakeConfig 28 fakeSharedActor *commandfakes.FakeSharedActor 29 fakeActor *v6fakes.FakeV3AppActor 30 fakeAppSummaryActor *v6fakes.FakeV2V3AppSummaryActor 31 binaryName string 32 executeErr error 33 app string 34 ) 35 36 BeforeEach(func() { 37 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 38 fakeConfig = new(commandfakes.FakeConfig) 39 fakeSharedActor = new(commandfakes.FakeSharedActor) 40 fakeActor = new(v6fakes.FakeV3AppActor) 41 fakeAppSummaryActor = new(v6fakes.FakeV2V3AppSummaryActor) 42 43 binaryName = "faceman" 44 fakeConfig.BinaryNameReturns(binaryName) 45 app = "some-app" 46 47 cmd = V3AppCommand{ 48 RequiredArgs: flag.AppName{AppName: app}, 49 50 UI: testUI, 51 Config: fakeConfig, 52 SharedActor: fakeSharedActor, 53 Actor: fakeActor, 54 AppSummaryActor: fakeAppSummaryActor, 55 } 56 57 fakeConfig.TargetedOrganizationReturns(configv3.Organization{ 58 Name: "some-org", 59 GUID: "some-org-guid", 60 }) 61 fakeConfig.TargetedSpaceReturns(configv3.Space{ 62 Name: "some-space", 63 GUID: "some-space-guid", 64 }) 65 66 fakeConfig.CurrentUserReturns(configv3.User{Name: "steve"}, nil) 67 }) 68 69 JustBeforeEach(func() { 70 executeErr = cmd.Execute(nil) 71 }) 72 73 When("checking target fails", 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 81 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 82 checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0) 83 Expect(checkTargetedOrg).To(BeTrue()) 84 Expect(checkTargetedSpace).To(BeTrue()) 85 }) 86 }) 87 88 When("the user is not logged in", func() { 89 var expectedErr error 90 91 BeforeEach(func() { 92 expectedErr = errors.New("some current user error") 93 fakeConfig.CurrentUserReturns(configv3.User{}, expectedErr) 94 }) 95 96 It("return an error", func() { 97 Expect(executeErr).To(Equal(expectedErr)) 98 }) 99 }) 100 101 When("the --guid flag is provided", func() { 102 BeforeEach(func() { 103 cmd.GUID = true 104 }) 105 106 When("no errors occur", func() { 107 BeforeEach(func() { 108 fakeActor.GetApplicationByNameAndSpaceReturns( 109 v3action.Application{GUID: "some-guid"}, 110 v3action.Warnings{"warning-1", "warning-2"}, 111 nil) 112 }) 113 114 It("displays the application guid and all warnings", func() { 115 Expect(executeErr).ToNot(HaveOccurred()) 116 117 Expect(testUI.Out).To(Say("some-guid")) 118 Expect(testUI.Err).To(Say("warning-1")) 119 Expect(testUI.Err).To(Say("warning-2")) 120 121 Expect(fakeActor.GetApplicationByNameAndSpaceCallCount()).To(Equal(1)) 122 appName, spaceGUID := fakeActor.GetApplicationByNameAndSpaceArgsForCall(0) 123 Expect(appName).To(Equal("some-app")) 124 Expect(spaceGUID).To(Equal("some-space-guid")) 125 }) 126 }) 127 128 When("an error is encountered getting the app", func() { 129 When("the error is translatable", func() { 130 BeforeEach(func() { 131 fakeActor.GetApplicationByNameAndSpaceReturns( 132 v3action.Application{}, 133 v3action.Warnings{"warning-1", "warning-2"}, 134 actionerror.ApplicationNotFoundError{Name: "some-app"}) 135 }) 136 137 It("returns a translatable error and all warnings", func() { 138 Expect(executeErr).To(MatchError(actionerror.ApplicationNotFoundError{Name: "some-app"})) 139 140 Expect(testUI.Err).To(Say("warning-1")) 141 Expect(testUI.Err).To(Say("warning-2")) 142 }) 143 }) 144 145 When("the error is not translatable", func() { 146 var expectedErr error 147 148 BeforeEach(func() { 149 expectedErr = errors.New("get app summary error") 150 fakeActor.GetApplicationByNameAndSpaceReturns( 151 v3action.Application{}, 152 v3action.Warnings{"warning-1", "warning-2"}, 153 expectedErr) 154 }) 155 156 It("returns the error and all warnings", func() { 157 Expect(executeErr).To(MatchError(expectedErr)) 158 159 Expect(testUI.Err).To(Say("warning-1")) 160 Expect(testUI.Err).To(Say("warning-2")) 161 }) 162 }) 163 }) 164 }) 165 166 When("the --guid is not passed", func() { 167 When("getting the application summary returns an error", func() { 168 var expectedErr error 169 170 BeforeEach(func() { 171 expectedErr = actionerror.ApplicationNotFoundError{Name: app} 172 fakeAppSummaryActor.GetApplicationSummaryByNameAndSpaceReturns(v2v3action.ApplicationSummary{}, v2v3action.Warnings{"warning-1", "warning-2"}, expectedErr) 173 }) 174 175 It("returns the error and prints warnings", func() { 176 Expect(executeErr).To(Equal(actionerror.ApplicationNotFoundError{Name: app})) 177 178 Expect(testUI.Out).To(Say(`Showing health and status for app some-app in org some-org / space some-space as steve\.\.\.`)) 179 180 Expect(testUI.Err).To(Say("warning-1")) 181 Expect(testUI.Err).To(Say("warning-2")) 182 }) 183 }) 184 185 When("getting the application summary is successful", func() { 186 BeforeEach(func() { 187 summary := v2v3action.ApplicationSummary{ 188 ApplicationSummary: v3action.ApplicationSummary{ 189 Application: v3action.Application{ 190 Name: "some-app", 191 State: constant.ApplicationStarted, 192 }, 193 CurrentDroplet: v3action.Droplet{ 194 Stack: "cflinuxfs2", 195 Buildpacks: []v3action.Buildpack{ 196 { 197 Name: "ruby_buildpack", 198 DetectOutput: "some-detect-output", 199 }, 200 { 201 Name: "some-buildpack", 202 DetectOutput: "", 203 }, 204 }, 205 }, 206 ProcessSummaries: v3action.ProcessSummaries{ 207 { 208 Process: v3action.Process{ 209 Type: constant.ProcessTypeWeb, 210 Command: *types.NewFilteredString("some-command-1"), 211 }, 212 }, 213 { 214 Process: v3action.Process{ 215 Type: "console", 216 Command: *types.NewFilteredString("some-command-2"), 217 }, 218 }, 219 }, 220 }, 221 } 222 fakeAppSummaryActor.GetApplicationSummaryByNameAndSpaceReturns(summary, v2v3action.Warnings{"warning-1", "warning-2"}, nil) 223 }) 224 225 It("prints the application summary and outputs warnings", func() { 226 Expect(executeErr).ToNot(HaveOccurred()) 227 228 Expect(testUI.Out).To(Say(`(?m)Showing health and status for app some-app in org some-org / space some-space as steve\.\.\.\n\n`)) 229 Expect(testUI.Out).To(Say(`name:\s+some-app`)) 230 Expect(testUI.Out).To(Say(`requested state:\s+started`)) 231 Expect(testUI.Out).ToNot(Say("start command:")) 232 233 Expect(testUI.Err).To(Say("warning-1")) 234 Expect(testUI.Err).To(Say("warning-2")) 235 236 Expect(fakeAppSummaryActor.GetApplicationSummaryByNameAndSpaceCallCount()).To(Equal(1)) 237 appName, spaceGUID, withObfuscatedValues := fakeAppSummaryActor.GetApplicationSummaryByNameAndSpaceArgsForCall(0) 238 Expect(appName).To(Equal("some-app")) 239 Expect(spaceGUID).To(Equal("some-space-guid")) 240 Expect(withObfuscatedValues).To(BeFalse()) 241 }) 242 }) 243 }) 244 })