github.com/cloudfoundry-attic/cli-with-i18n@v6.32.1-0.20171002233121-7401370d3b85+incompatible/actor/v3action/environment_variable_test.go (about)

     1  package v3action_test
     2  
     3  import (
     4  	"errors"
     5  	"net/url"
     6  
     7  	. "code.cloudfoundry.org/cli/actor/v3action"
     8  	"code.cloudfoundry.org/cli/actor/v3action/v3actionfakes"
     9  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3"
    10  	"code.cloudfoundry.org/cli/types"
    11  	. "github.com/onsi/ginkgo"
    12  	. "github.com/onsi/gomega"
    13  )
    14  
    15  var _ = Describe("Environment Variable Actions", func() {
    16  	Describe("GetEnvironmentVariablesByApplicationNameAndSpace", func() {
    17  		var (
    18  			actor                     *Actor
    19  			fakeCloudControllerClient *v3actionfakes.FakeCloudControllerClient
    20  			appName                   string
    21  			spaceGUID                 string
    22  			fetchedEnvVariables       EnvironmentVariableGroups
    23  			executeErr                error
    24  			warnings                  Warnings
    25  		)
    26  
    27  		BeforeEach(func() {
    28  			fakeCloudControllerClient = new(v3actionfakes.FakeCloudControllerClient)
    29  			actor = NewActor(nil, fakeCloudControllerClient, nil)
    30  			appName = "some-app"
    31  			spaceGUID = "space-guid"
    32  		})
    33  
    34  		JustBeforeEach(func() {
    35  			fetchedEnvVariables, warnings, executeErr = actor.GetEnvironmentVariablesByApplicationNameAndSpace(appName, spaceGUID)
    36  		})
    37  
    38  		Context("when finding the app fails", func() {
    39  			BeforeEach(func() {
    40  				fakeCloudControllerClient.GetApplicationsReturns(nil, ccv3.Warnings{"get-application-warning"}, errors.New("get-application-error"))
    41  			})
    42  
    43  			It("returns an error", func() {
    44  				Expect(executeErr).To(MatchError("get-application-error"))
    45  				Expect(warnings).To(ConsistOf("get-application-warning"))
    46  			})
    47  		})
    48  
    49  		Context("when finding the app succeeds", func() {
    50  			BeforeEach(func() {
    51  				fakeCloudControllerClient.GetApplicationsReturns([]ccv3.Application{{Name: "some-app", GUID: "some-app-guid"}}, ccv3.Warnings{"get-application-warning"}, nil)
    52  			})
    53  
    54  			Context("when getting the app environment variables fails", func() {
    55  				BeforeEach(func() {
    56  					fakeCloudControllerClient.GetApplicationEnvironmentVariablesReturns(ccv3.EnvironmentVariableGroups{}, ccv3.Warnings{"some-env-var-warnings"}, errors.New("some-env-var-error"))
    57  				})
    58  				It("returns an error", func() {
    59  					Expect(executeErr).To(MatchError("some-env-var-error"))
    60  					Expect(warnings).To(ConsistOf("get-application-warning", "some-env-var-warnings"))
    61  				})
    62  			})
    63  
    64  			Context("when getting the app environment variables succeeds", func() {
    65  				BeforeEach(func() {
    66  					fakeCloudControllerClient.GetApplicationEnvironmentVariablesReturns(
    67  						ccv3.EnvironmentVariableGroups{
    68  							SystemProvided:      map[string]interface{}{"system-var": "system-val"},
    69  							ApplicationProvided: map[string]interface{}{"app-var": "app-val"},
    70  							UserProvided:        map[string]interface{}{"user-var": "user-val"},
    71  							RunningGroup:        map[string]interface{}{"running-var": "running-val"},
    72  							StagingGroup:        map[string]interface{}{"staging-var": "staging-val"},
    73  						},
    74  						ccv3.Warnings{"some-env-var-warnings"},
    75  						nil,
    76  					)
    77  				})
    78  				It("makes the API call to get the app environment variables and returns all warnings", func() {
    79  					Expect(fakeCloudControllerClient.GetApplicationsCallCount()).To(Equal(1))
    80  					expectedQuery := url.Values{
    81  						"names":       []string{"some-app"},
    82  						"space_guids": []string{"space-guid"},
    83  					}
    84  					query := fakeCloudControllerClient.GetApplicationsArgsForCall(0)
    85  					Expect(query).To(Equal(expectedQuery))
    86  
    87  					Expect(fakeCloudControllerClient.GetApplicationEnvironmentVariablesCallCount()).To(Equal(1))
    88  					appGUIDArg := fakeCloudControllerClient.GetApplicationEnvironmentVariablesArgsForCall(0)
    89  					Expect(appGUIDArg).To(Equal("some-app-guid"))
    90  					Expect(fetchedEnvVariables).To(Equal(EnvironmentVariableGroups{
    91  						SystemProvided:      map[string]interface{}{"system-var": "system-val"},
    92  						ApplicationProvided: map[string]interface{}{"app-var": "app-val"},
    93  						UserProvided:        map[string]interface{}{"user-var": "user-val"},
    94  						RunningGroup:        map[string]interface{}{"running-var": "running-val"},
    95  						StagingGroup:        map[string]interface{}{"staging-var": "staging-val"},
    96  					}))
    97  					Expect(executeErr).ToNot(HaveOccurred())
    98  					Expect(warnings).To(ConsistOf("get-application-warning", "some-env-var-warnings"))
    99  				})
   100  			})
   101  		})
   102  	})
   103  	Describe("SetEnvironmentVariableByApplicationNameAndSpace", func() {
   104  		var (
   105  			actor                     *Actor
   106  			fakeCloudControllerClient *v3actionfakes.FakeCloudControllerClient
   107  			appName                   string
   108  			spaceGUID                 string
   109  			envPair                   EnvironmentVariablePair
   110  			executeErr                error
   111  			warnings                  Warnings
   112  		)
   113  
   114  		BeforeEach(func() {
   115  			fakeCloudControllerClient = new(v3actionfakes.FakeCloudControllerClient)
   116  			actor = NewActor(nil, fakeCloudControllerClient, nil)
   117  			appName = "some-app"
   118  			spaceGUID = "space-guid"
   119  			envPair = EnvironmentVariablePair{Key: "my-var", Value: "my-val"}
   120  		})
   121  
   122  		JustBeforeEach(func() {
   123  			warnings, executeErr = actor.SetEnvironmentVariableByApplicationNameAndSpace(appName, spaceGUID, envPair)
   124  		})
   125  
   126  		Context("when finding the app fails", func() {
   127  			BeforeEach(func() {
   128  				fakeCloudControllerClient.GetApplicationsReturns(nil, ccv3.Warnings{"get-application-warning"}, errors.New("get-application-error"))
   129  			})
   130  
   131  			It("returns an error", func() {
   132  				Expect(executeErr).To(MatchError("get-application-error"))
   133  				Expect(warnings).To(ConsistOf("get-application-warning"))
   134  			})
   135  		})
   136  
   137  		Context("when finding the app succeeds", func() {
   138  			BeforeEach(func() {
   139  				fakeCloudControllerClient.GetApplicationsReturns([]ccv3.Application{{Name: "some-app", GUID: "some-app-guid"}}, ccv3.Warnings{"get-application-warning"}, nil)
   140  			})
   141  
   142  			Context("when updating the app environment variables fails", func() {
   143  				BeforeEach(func() {
   144  					fakeCloudControllerClient.PatchApplicationUserProvidedEnvironmentVariablesReturns(ccv3.EnvironmentVariables{}, ccv3.Warnings{"some-env-var-warnings"}, errors.New("some-env-var-error"))
   145  				})
   146  				It("returns an error", func() {
   147  					Expect(executeErr).To(MatchError("some-env-var-error"))
   148  					Expect(warnings).To(ConsistOf("get-application-warning", "some-env-var-warnings"))
   149  				})
   150  			})
   151  
   152  			Context("when updating the app environment variables succeeds", func() {
   153  				BeforeEach(func() {
   154  					fakeCloudControllerClient.PatchApplicationUserProvidedEnvironmentVariablesReturns(
   155  						ccv3.EnvironmentVariables{
   156  							Variables: map[string]types.FilteredString{"my-var": {Value: "my-val", IsSet: true}},
   157  						},
   158  						ccv3.Warnings{"some-env-var-warnings"},
   159  						nil,
   160  					)
   161  				})
   162  				It("makes the API call to update the app environment variables and returns all warnings", func() {
   163  					Expect(fakeCloudControllerClient.GetApplicationsCallCount()).To(Equal(1))
   164  					expectedQuery := url.Values{
   165  						"names":       []string{"some-app"},
   166  						"space_guids": []string{"space-guid"},
   167  					}
   168  					query := fakeCloudControllerClient.GetApplicationsArgsForCall(0)
   169  					Expect(query).To(Equal(expectedQuery))
   170  
   171  					Expect(fakeCloudControllerClient.PatchApplicationUserProvidedEnvironmentVariablesCallCount()).To(Equal(1))
   172  					appGUIDArg, envVarsArg := fakeCloudControllerClient.PatchApplicationUserProvidedEnvironmentVariablesArgsForCall(0)
   173  					Expect(appGUIDArg).To(Equal("some-app-guid"))
   174  					Expect(envVarsArg).To(Equal(ccv3.EnvironmentVariables{
   175  						Variables: map[string]types.FilteredString{"my-var": {Value: "my-val", IsSet: true}},
   176  					}))
   177  					Expect(executeErr).ToNot(HaveOccurred())
   178  					Expect(warnings).To(ConsistOf("get-application-warning", "some-env-var-warnings"))
   179  				})
   180  			})
   181  		})
   182  	})
   183  
   184  	Describe("UnsetEnvironmentVariableByApplicationNameAndSpace", func() {
   185  		var (
   186  			actor                     *Actor
   187  			fakeCloudControllerClient *v3actionfakes.FakeCloudControllerClient
   188  			appName                   string
   189  			spaceGUID                 string
   190  			envVariableName           string
   191  			executeErr                error
   192  			warnings                  Warnings
   193  		)
   194  
   195  		BeforeEach(func() {
   196  			fakeCloudControllerClient = new(v3actionfakes.FakeCloudControllerClient)
   197  			actor = NewActor(nil, fakeCloudControllerClient, nil)
   198  			appName = "some-app"
   199  			spaceGUID = "space-guid"
   200  			envVariableName = "my-var"
   201  		})
   202  
   203  		JustBeforeEach(func() {
   204  			warnings, executeErr = actor.UnsetEnvironmentVariableByApplicationNameAndSpace(appName, spaceGUID, envVariableName)
   205  		})
   206  
   207  		Context("when finding the app fails", func() {
   208  			BeforeEach(func() {
   209  				fakeCloudControllerClient.GetApplicationsReturns(nil, ccv3.Warnings{"get-application-warning"}, errors.New("get-application-error"))
   210  			})
   211  
   212  			It("returns an error", func() {
   213  				Expect(executeErr).To(MatchError("get-application-error"))
   214  				Expect(warnings).To(ConsistOf("get-application-warning"))
   215  			})
   216  		})
   217  
   218  		Context("when finding the app succeeds", func() {
   219  			BeforeEach(func() {
   220  				fakeCloudControllerClient.GetApplicationsReturns([]ccv3.Application{{Name: "some-app", GUID: "some-app-guid"}}, ccv3.Warnings{"get-application-warning"}, nil)
   221  			})
   222  
   223  			Context("when getting the app environment variables fails", func() {
   224  				BeforeEach(func() {
   225  					fakeCloudControllerClient.GetApplicationEnvironmentVariablesReturns(ccv3.EnvironmentVariableGroups{}, ccv3.Warnings{"some-get-env-var-warnings"}, errors.New("some-env-var-error"))
   226  				})
   227  				It("returns an error", func() {
   228  					Expect(executeErr).To(MatchError("some-env-var-error"))
   229  					Expect(warnings).To(ConsistOf("get-application-warning", "some-get-env-var-warnings"))
   230  				})
   231  			})
   232  
   233  			Context("when the variable doesn't exists", func() {
   234  				BeforeEach(func() {
   235  					fakeCloudControllerClient.GetApplicationEnvironmentVariablesReturns(
   236  						ccv3.EnvironmentVariableGroups{},
   237  						ccv3.Warnings{"some-get-env-var-warnings"},
   238  						nil,
   239  					)
   240  				})
   241  				It("returns an EnvironmentVariableNotSetError", func() {
   242  					Expect(executeErr).To(MatchError(EnvironmentVariableNotSetError{EnvironmentVariableName: "my-var"}))
   243  					Expect(warnings).To(ConsistOf("get-application-warning", "some-get-env-var-warnings"))
   244  				})
   245  			})
   246  
   247  			Context("when the variable exists", func() {
   248  				BeforeEach(func() {
   249  					fakeCloudControllerClient.GetApplicationEnvironmentVariablesReturns(
   250  						ccv3.EnvironmentVariableGroups{
   251  							UserProvided: map[string]interface{}{"my-var": "my-val"},
   252  						},
   253  						ccv3.Warnings{"some-get-env-var-warnings"},
   254  						nil,
   255  					)
   256  				})
   257  				Context("when updating the app environment variables fails", func() {
   258  					BeforeEach(func() {
   259  						fakeCloudControllerClient.PatchApplicationUserProvidedEnvironmentVariablesReturns(ccv3.EnvironmentVariables{}, ccv3.Warnings{"some-patch-env-var-warnings"}, errors.New("some-env-var-error"))
   260  					})
   261  					It("returns an error", func() {
   262  						Expect(executeErr).To(MatchError("some-env-var-error"))
   263  						Expect(warnings).To(ConsistOf("get-application-warning", "some-get-env-var-warnings", "some-patch-env-var-warnings"))
   264  					})
   265  				})
   266  
   267  				Context("when updating the app environment variables succeeds", func() {
   268  					BeforeEach(func() {
   269  						fakeCloudControllerClient.PatchApplicationUserProvidedEnvironmentVariablesReturns(
   270  							ccv3.EnvironmentVariables{
   271  								Variables: map[string]types.FilteredString{"my-var": {Value: "my-val", IsSet: true}},
   272  							},
   273  							ccv3.Warnings{"some-patch-env-var-warnings"},
   274  							nil,
   275  						)
   276  					})
   277  					It("makes the API call to update the app environment variables and returns all warnings", func() {
   278  						Expect(fakeCloudControllerClient.GetApplicationsCallCount()).To(Equal(1))
   279  						expectedQuery := url.Values{
   280  							"names":       []string{"some-app"},
   281  							"space_guids": []string{"space-guid"},
   282  						}
   283  						query := fakeCloudControllerClient.GetApplicationsArgsForCall(0)
   284  						Expect(query).To(Equal(expectedQuery))
   285  
   286  						Expect(fakeCloudControllerClient.PatchApplicationUserProvidedEnvironmentVariablesCallCount()).To(Equal(1))
   287  						appGUIDArg, envVarsArg := fakeCloudControllerClient.PatchApplicationUserProvidedEnvironmentVariablesArgsForCall(0)
   288  						Expect(appGUIDArg).To(Equal("some-app-guid"))
   289  						Expect(envVarsArg).To(Equal(ccv3.EnvironmentVariables{
   290  							Variables: map[string]types.FilteredString{"my-var": {Value: "", IsSet: false}},
   291  						}))
   292  
   293  						Expect(executeErr).ToNot(HaveOccurred())
   294  						Expect(warnings).To(ConsistOf("get-application-warning", "some-get-env-var-warnings", "some-patch-env-var-warnings"))
   295  					})
   296  				})
   297  			})
   298  		})
   299  	})
   300  })