github.com/nimakaviani/cli@v6.37.1-0.20180619223813-e734901a73fa+incompatible/command/v3/v3_env_command_test.go (about) 1 package v3_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/v3" 12 "code.cloudfoundry.org/cli/command/v3/v3fakes" 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 v3.V3EnvCommand 23 testUI *ui.UI 24 fakeConfig *commandfakes.FakeConfig 25 fakeSharedActor *commandfakes.FakeSharedActor 26 fakeActor *v3fakes.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(v3fakes.FakeV3EnvActor) 37 38 cmd = v3.V3EnvCommand{ 39 UI: testUI, 40 Config: fakeConfig, 41 SharedActor: fakeSharedActor, 42 Actor: fakeActor, 43 } 44 45 fakeActor.CloudControllerAPIVersionReturns(ccversion.MinVersionV3) 46 binaryName = "faceman" 47 fakeConfig.BinaryNameReturns(binaryName) 48 appName = "some-app" 49 50 cmd.RequiredArgs.AppName = appName 51 }) 52 53 JustBeforeEach(func() { 54 executeErr = cmd.Execute(nil) 55 }) 56 57 Context("when the API version is below the minimum", func() { 58 BeforeEach(func() { 59 fakeActor.CloudControllerAPIVersionReturns("0.0.0") 60 }) 61 62 It("returns a MinimumAPIVersionNotMetError", func() { 63 Expect(executeErr).To(MatchError(translatableerror.MinimumAPIVersionNotMetError{ 64 CurrentVersion: "0.0.0", 65 MinimumVersion: ccversion.MinVersionV3, 66 })) 67 }) 68 69 It("displays the experimental warning", func() { 70 Expect(testUI.Err).To(Say("This command is in EXPERIMENTAL stage and may change without notice")) 71 }) 72 }) 73 74 Context("when checking target fails", func() { 75 BeforeEach(func() { 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 Context("when the user is logged in, an org is targeted and a space is targeted", func() { 90 BeforeEach(func() { 91 fakeConfig.TargetedSpaceReturns(configv3.Space{Name: "some-space", GUID: "some-space-guid"}) 92 fakeConfig.TargetedOrganizationReturns(configv3.Organization{Name: "some-org"}) 93 }) 94 95 Context("when getting the current user returns an error", func() { 96 BeforeEach(func() { 97 fakeConfig.CurrentUserReturns(configv3.User{}, errors.New("some-error")) 98 }) 99 100 It("returns the error", func() { 101 Expect(executeErr).To(MatchError("some-error")) 102 }) 103 }) 104 105 Context("when getting the current user succeeds", func() { 106 BeforeEach(func() { 107 fakeConfig.CurrentUserReturns(configv3.User{Name: "banana"}, nil) 108 }) 109 110 Context("when getting the environment returns env vars for all groups", func() { 111 BeforeEach(func() { 112 envGroups := v3action.EnvironmentVariableGroups{ 113 System: map[string]interface{}{"system-name": map[string]interface{}{"mysql": []string{"system-value"}}}, 114 Application: map[string]interface{}{"application-name": "application-value"}, 115 EnvironmentVariables: map[string]interface{}{"user-name": "user-value"}, 116 Running: map[string]interface{}{"running-name": "running-value"}, 117 Staging: map[string]interface{}{"staging-name": "staging-value"}, 118 } 119 fakeActor.GetEnvironmentVariablesByApplicationNameAndSpaceReturns(envGroups, v3action.Warnings{"get-warning-1", "get-warning-2"}, nil) 120 }) 121 122 It("displays the environment variable and value pair", func() { 123 Expect(executeErr).ToNot(HaveOccurred()) 124 125 Expect(testUI.Out).To(Say("Getting env variables for app some-app in org some-org / space some-space as banana\\.\\.\\.")) 126 Expect(testUI.Out).To(Say("System-Provided:")) 127 Expect(testUI.Out).To(Say("system-name: {")) 128 Expect(testUI.Out).To(Say(`"mysql": \[`)) 129 Expect(testUI.Out).To(Say(`"system-value"`)) 130 Expect(testUI.Out).To(Say("\\]")) 131 Expect(testUI.Out).To(Say("}")) 132 Expect(testUI.Out).To(Say(`application-name: "application-value"`)) 133 134 Expect(testUI.Out).To(Say("User-Provided:")) 135 Expect(testUI.Out).To(Say(`user-name: "user-value"`)) 136 137 Expect(testUI.Out).To(Say("Running Environment Variable Groups:")) 138 Expect(testUI.Out).To(Say(`running-name: "running-value"`)) 139 140 Expect(testUI.Out).To(Say("Staging Environment Variable Groups:")) 141 Expect(testUI.Out).To(Say(`staging-name: "staging-value"`)) 142 143 Expect(testUI.Err).To(Say("get-warning-1")) 144 Expect(testUI.Err).To(Say("get-warning-2")) 145 146 Expect(fakeActor.GetEnvironmentVariablesByApplicationNameAndSpaceCallCount()).To(Equal(1)) 147 appName, spaceGUID := fakeActor.GetEnvironmentVariablesByApplicationNameAndSpaceArgsForCall(0) 148 Expect(appName).To(Equal("some-app")) 149 Expect(spaceGUID).To(Equal("some-space-guid")) 150 }) 151 }) 152 153 Context("when getting the environment returns empty env vars for all groups", func() { 154 BeforeEach(func() { 155 envGroups := v3action.EnvironmentVariableGroups{ 156 System: map[string]interface{}{}, 157 Application: map[string]interface{}{}, 158 EnvironmentVariables: map[string]interface{}{}, 159 Running: map[string]interface{}{}, 160 Staging: map[string]interface{}{}, 161 } 162 fakeActor.GetEnvironmentVariablesByApplicationNameAndSpaceReturns(envGroups, v3action.Warnings{"get-warning-1", "get-warning-2"}, nil) 163 }) 164 165 It("displays helpful messages", func() { 166 Expect(executeErr).ToNot(HaveOccurred()) 167 168 Expect(testUI.Out).To(Say("Getting env variables for app some-app in org some-org / space some-space as banana\\.\\.\\.")) 169 Expect(testUI.Out).To(Say("No system-provided env variables have been set")) 170 171 Expect(testUI.Out).To(Say("No user-provided env variables have been set")) 172 173 Expect(testUI.Out).To(Say("No running env variables have been set")) 174 175 Expect(testUI.Out).To(Say("No staging env variables have been set")) 176 177 Expect(testUI.Err).To(Say("get-warning-1")) 178 Expect(testUI.Err).To(Say("get-warning-2")) 179 180 Expect(fakeActor.GetEnvironmentVariablesByApplicationNameAndSpaceCallCount()).To(Equal(1)) 181 appName, spaceGUID := fakeActor.GetEnvironmentVariablesByApplicationNameAndSpaceArgsForCall(0) 182 Expect(appName).To(Equal("some-app")) 183 Expect(spaceGUID).To(Equal("some-space-guid")) 184 }) 185 }) 186 187 Context("when the get environment variables returns an unknown error", func() { 188 var expectedErr error 189 BeforeEach(func() { 190 expectedErr = errors.New("some-error") 191 fakeActor.GetEnvironmentVariablesByApplicationNameAndSpaceReturns(v3action.EnvironmentVariableGroups{}, v3action.Warnings{"get-warning-1", "get-warning-2"}, expectedErr) 192 }) 193 194 It("returns the error", func() { 195 Expect(executeErr).To(Equal(expectedErr)) 196 Expect(testUI.Out).To(Say("Getting env variables for app some-app in org some-org / space some-space as banana\\.\\.\\.")) 197 198 Expect(testUI.Err).To(Say("get-warning-1")) 199 Expect(testUI.Err).To(Say("get-warning-2")) 200 }) 201 }) 202 }) 203 }) 204 })