github.com/randomtask1155/cli@v6.41.1-0.20181227003417-a98eed78cbde+incompatible/command/v6/v3_env_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/v3action" 8 "code.cloudfoundry.org/cli/api/cloudcontroller/ccversion" 9 "code.cloudfoundry.org/cli/command/commandfakes" 10 "code.cloudfoundry.org/cli/command/translatableerror" 11 . "code.cloudfoundry.org/cli/command/v6" 12 "code.cloudfoundry.org/cli/command/v6/v6fakes" 13 "code.cloudfoundry.org/cli/util/configv3" 14 "code.cloudfoundry.org/cli/util/ui" 15 . "github.com/onsi/ginkgo" 16 . "github.com/onsi/gomega" 17 . "github.com/onsi/gomega/gbytes" 18 ) 19 20 var _ = Describe("v3-env Command", func() { 21 var ( 22 cmd V3EnvCommand 23 testUI *ui.UI 24 fakeConfig *commandfakes.FakeConfig 25 fakeSharedActor *commandfakes.FakeSharedActor 26 fakeActor *v6fakes.FakeV3EnvActor 27 binaryName string 28 executeErr error 29 appName string 30 ) 31 32 BeforeEach(func() { 33 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 34 fakeConfig = new(commandfakes.FakeConfig) 35 fakeSharedActor = new(commandfakes.FakeSharedActor) 36 fakeActor = new(v6fakes.FakeV3EnvActor) 37 38 cmd = V3EnvCommand{ 39 UI: testUI, 40 Config: fakeConfig, 41 SharedActor: fakeSharedActor, 42 Actor: fakeActor, 43 } 44 45 binaryName = "faceman" 46 fakeConfig.BinaryNameReturns(binaryName) 47 appName = "some-app" 48 49 cmd.RequiredArgs.AppName = appName 50 }) 51 52 JustBeforeEach(func() { 53 executeErr = cmd.Execute(nil) 54 }) 55 56 When("the API version is below the minimum", func() { 57 BeforeEach(func() { 58 fakeActor.CloudControllerAPIVersionReturns(ccversion.MinV3ClientVersion) 59 }) 60 61 It("returns a MinimumAPIVersionNotMetError", func() { 62 Expect(executeErr).To(MatchError(translatableerror.MinimumCFAPIVersionNotMetError{ 63 CurrentVersion: ccversion.MinV3ClientVersion, 64 MinimumVersion: ccversion.MinVersionApplicationFlowV3, 65 })) 66 }) 67 68 It("displays the experimental warning", func() { 69 Expect(testUI.Err).To(Say("This command is in EXPERIMENTAL stage and may change without notice")) 70 }) 71 }) 72 73 When("checking target fails", func() { 74 BeforeEach(func() { 75 fakeActor.CloudControllerAPIVersionReturns(ccversion.MinVersionApplicationFlowV3) 76 fakeSharedActor.CheckTargetReturns(actionerror.NotLoggedInError{BinaryName: binaryName}) 77 }) 78 79 It("returns an error", func() { 80 Expect(executeErr).To(MatchError(actionerror.NotLoggedInError{BinaryName: binaryName})) 81 82 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 83 checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0) 84 Expect(checkTargetedOrg).To(BeTrue()) 85 Expect(checkTargetedSpace).To(BeTrue()) 86 }) 87 }) 88 89 When("the user is logged in, an org is targeted and a space is targeted", func() { 90 BeforeEach(func() { 91 fakeActor.CloudControllerAPIVersionReturns(ccversion.MinVersionApplicationFlowV3) 92 fakeConfig.TargetedSpaceReturns(configv3.Space{Name: "some-space", GUID: "some-space-guid"}) 93 fakeConfig.TargetedOrganizationReturns(configv3.Organization{Name: "some-org"}) 94 }) 95 96 When("getting the current user returns an error", func() { 97 BeforeEach(func() { 98 fakeConfig.CurrentUserReturns(configv3.User{}, errors.New("some-error")) 99 }) 100 101 It("returns the error", func() { 102 Expect(executeErr).To(MatchError("some-error")) 103 }) 104 }) 105 106 When("getting the current user succeeds", func() { 107 BeforeEach(func() { 108 fakeConfig.CurrentUserReturns(configv3.User{Name: "banana"}, nil) 109 }) 110 111 When("getting the environment returns env vars for all groups", func() { 112 BeforeEach(func() { 113 envGroups := v3action.EnvironmentVariableGroups{ 114 System: map[string]interface{}{"system-name": map[string]interface{}{"mysql": []string{"system-value"}}}, 115 Application: map[string]interface{}{"application-name": "application-value"}, 116 EnvironmentVariables: map[string]interface{}{"user-name": "user-value"}, 117 Running: map[string]interface{}{"running-name": "running-value"}, 118 Staging: map[string]interface{}{"staging-name": "staging-value"}, 119 } 120 fakeActor.GetEnvironmentVariablesByApplicationNameAndSpaceReturns(envGroups, v3action.Warnings{"get-warning-1", "get-warning-2"}, nil) 121 }) 122 123 It("displays the environment variable and value pair", func() { 124 Expect(executeErr).ToNot(HaveOccurred()) 125 126 Expect(testUI.Out).To(Say(`Getting env variables for app some-app in org some-org / space some-space as banana\.\.\.`)) 127 Expect(testUI.Out).To(Say("System-Provided:")) 128 Expect(testUI.Out).To(Say("system-name: {")) 129 Expect(testUI.Out).To(Say(`"mysql": \[`)) 130 Expect(testUI.Out).To(Say(`"system-value"`)) 131 Expect(testUI.Out).To(Say(`\]`)) 132 Expect(testUI.Out).To(Say("}")) 133 Expect(testUI.Out).To(Say(`application-name: "application-value"`)) 134 135 Expect(testUI.Out).To(Say("User-Provided:")) 136 Expect(testUI.Out).To(Say(`user-name: "user-value"`)) 137 138 Expect(testUI.Out).To(Say("Running Environment Variable Groups:")) 139 Expect(testUI.Out).To(Say(`running-name: "running-value"`)) 140 141 Expect(testUI.Out).To(Say("Staging Environment Variable Groups:")) 142 Expect(testUI.Out).To(Say(`staging-name: "staging-value"`)) 143 144 Expect(testUI.Err).To(Say("get-warning-1")) 145 Expect(testUI.Err).To(Say("get-warning-2")) 146 147 Expect(fakeActor.GetEnvironmentVariablesByApplicationNameAndSpaceCallCount()).To(Equal(1)) 148 appName, spaceGUID := fakeActor.GetEnvironmentVariablesByApplicationNameAndSpaceArgsForCall(0) 149 Expect(appName).To(Equal("some-app")) 150 Expect(spaceGUID).To(Equal("some-space-guid")) 151 }) 152 }) 153 154 When("getting the environment returns empty env vars for all groups", func() { 155 BeforeEach(func() { 156 envGroups := v3action.EnvironmentVariableGroups{ 157 System: map[string]interface{}{}, 158 Application: map[string]interface{}{}, 159 EnvironmentVariables: map[string]interface{}{}, 160 Running: map[string]interface{}{}, 161 Staging: map[string]interface{}{}, 162 } 163 fakeActor.GetEnvironmentVariablesByApplicationNameAndSpaceReturns(envGroups, v3action.Warnings{"get-warning-1", "get-warning-2"}, nil) 164 }) 165 166 It("displays helpful messages", func() { 167 Expect(executeErr).ToNot(HaveOccurred()) 168 169 Expect(testUI.Out).To(Say(`Getting env variables for app some-app in org some-org / space some-space as banana\.\.\.`)) 170 Expect(testUI.Out).To(Say("No system-provided env variables have been set")) 171 172 Expect(testUI.Out).To(Say("No user-provided env variables have been set")) 173 174 Expect(testUI.Out).To(Say("No running env variables have been set")) 175 176 Expect(testUI.Out).To(Say("No staging env variables have been set")) 177 178 Expect(testUI.Err).To(Say("get-warning-1")) 179 Expect(testUI.Err).To(Say("get-warning-2")) 180 181 Expect(fakeActor.GetEnvironmentVariablesByApplicationNameAndSpaceCallCount()).To(Equal(1)) 182 appName, spaceGUID := fakeActor.GetEnvironmentVariablesByApplicationNameAndSpaceArgsForCall(0) 183 Expect(appName).To(Equal("some-app")) 184 Expect(spaceGUID).To(Equal("some-space-guid")) 185 }) 186 }) 187 188 When("the get environment variables returns an unknown error", func() { 189 var expectedErr error 190 BeforeEach(func() { 191 expectedErr = errors.New("some-error") 192 fakeActor.GetEnvironmentVariablesByApplicationNameAndSpaceReturns(v3action.EnvironmentVariableGroups{}, v3action.Warnings{"get-warning-1", "get-warning-2"}, expectedErr) 193 }) 194 195 It("returns the error", func() { 196 Expect(executeErr).To(Equal(expectedErr)) 197 Expect(testUI.Out).To(Say(`Getting env variables for app some-app in org some-org / space some-space as banana\.\.\.`)) 198 199 Expect(testUI.Err).To(Say("get-warning-1")) 200 Expect(testUI.Err).To(Say("get-warning-2")) 201 }) 202 }) 203 }) 204 }) 205 })