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