github.com/loggregator/cli@v6.33.1-0.20180224010324-82334f081791+incompatible/actor/v3action/environment_variable_test.go (about)

     1  package v3action_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/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(fakeCloudControllerClient, nil, nil, 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  
    79  				It("makes the API call to get the app environment variables and returns all warnings", func() {
    80  					Expect(fakeCloudControllerClient.GetApplicationsCallCount()).To(Equal(1))
    81  					Expect(fakeCloudControllerClient.GetApplicationsArgsForCall(0)).To(ConsistOf(
    82  						ccv3.Query{Key: ccv3.NameFilter, Values: []string{appName}},
    83  						ccv3.Query{Key: ccv3.SpaceGUIDFilter, Values: []string{spaceGUID}},
    84  					))
    85  
    86  					Expect(fakeCloudControllerClient.GetApplicationEnvironmentVariablesCallCount()).To(Equal(1))
    87  					Expect(fakeCloudControllerClient.GetApplicationEnvironmentVariablesArgsForCall(0)).To(Equal("some-app-guid"))
    88  					Expect(fetchedEnvVariables).To(Equal(EnvironmentVariableGroups{
    89  						SystemProvided:      map[string]interface{}{"system-var": "system-val"},
    90  						ApplicationProvided: map[string]interface{}{"app-var": "app-val"},
    91  						UserProvided:        map[string]interface{}{"user-var": "user-val"},
    92  						RunningGroup:        map[string]interface{}{"running-var": "running-val"},
    93  						StagingGroup:        map[string]interface{}{"staging-var": "staging-val"},
    94  					}))
    95  					Expect(executeErr).ToNot(HaveOccurred())
    96  					Expect(warnings).To(ConsistOf("get-application-warning", "some-env-var-warnings"))
    97  				})
    98  			})
    99  		})
   100  	})
   101  
   102  	Describe("SetEnvironmentVariableByApplicationNameAndSpace", func() {
   103  		var (
   104  			actor                     *Actor
   105  			fakeCloudControllerClient *v3actionfakes.FakeCloudControllerClient
   106  			appName                   string
   107  			spaceGUID                 string
   108  			envPair                   EnvironmentVariablePair
   109  			executeErr                error
   110  			warnings                  Warnings
   111  		)
   112  
   113  		BeforeEach(func() {
   114  			fakeCloudControllerClient = new(v3actionfakes.FakeCloudControllerClient)
   115  			actor = NewActor(fakeCloudControllerClient, nil, nil, nil)
   116  			appName = "some-app"
   117  			spaceGUID = "space-guid"
   118  			envPair = EnvironmentVariablePair{Key: "my-var", Value: "my-val"}
   119  		})
   120  
   121  		JustBeforeEach(func() {
   122  			warnings, executeErr = actor.SetEnvironmentVariableByApplicationNameAndSpace(appName, spaceGUID, envPair)
   123  		})
   124  
   125  		Context("when finding the app fails", func() {
   126  			BeforeEach(func() {
   127  				fakeCloudControllerClient.GetApplicationsReturns(nil, ccv3.Warnings{"get-application-warning"}, errors.New("get-application-error"))
   128  			})
   129  
   130  			It("returns an error", func() {
   131  				Expect(executeErr).To(MatchError("get-application-error"))
   132  				Expect(warnings).To(ConsistOf("get-application-warning"))
   133  			})
   134  		})
   135  
   136  		Context("when finding the app succeeds", func() {
   137  			BeforeEach(func() {
   138  				fakeCloudControllerClient.GetApplicationsReturns([]ccv3.Application{{Name: "some-app", GUID: "some-app-guid"}}, ccv3.Warnings{"get-application-warning"}, nil)
   139  			})
   140  
   141  			Context("when updating the app environment variables fails", func() {
   142  				BeforeEach(func() {
   143  					fakeCloudControllerClient.PatchApplicationUserProvidedEnvironmentVariablesReturns(ccv3.EnvironmentVariables{}, ccv3.Warnings{"some-env-var-warnings"}, errors.New("some-env-var-error"))
   144  				})
   145  				It("returns an error", func() {
   146  					Expect(executeErr).To(MatchError("some-env-var-error"))
   147  					Expect(warnings).To(ConsistOf("get-application-warning", "some-env-var-warnings"))
   148  				})
   149  			})
   150  
   151  			Context("when updating the app environment variables succeeds", func() {
   152  				BeforeEach(func() {
   153  					fakeCloudControllerClient.PatchApplicationUserProvidedEnvironmentVariablesReturns(
   154  						ccv3.EnvironmentVariables{
   155  							Variables: map[string]types.FilteredString{"my-var": {Value: "my-val", IsSet: true}},
   156  						},
   157  						ccv3.Warnings{"some-env-var-warnings"},
   158  						nil,
   159  					)
   160  				})
   161  				It("makes the API call to update the app environment variables and returns all warnings", func() {
   162  					Expect(fakeCloudControllerClient.GetApplicationsCallCount()).To(Equal(1))
   163  					Expect(fakeCloudControllerClient.GetApplicationsArgsForCall(0)).To(ConsistOf(
   164  						ccv3.Query{Key: ccv3.NameFilter, Values: []string{appName}},
   165  						ccv3.Query{Key: ccv3.SpaceGUIDFilter, Values: []string{spaceGUID}},
   166  					))
   167  
   168  					Expect(fakeCloudControllerClient.PatchApplicationUserProvidedEnvironmentVariablesCallCount()).To(Equal(1))
   169  					appGUIDArg, envVarsArg := fakeCloudControllerClient.PatchApplicationUserProvidedEnvironmentVariablesArgsForCall(0)
   170  					Expect(appGUIDArg).To(Equal("some-app-guid"))
   171  					Expect(envVarsArg).To(Equal(ccv3.EnvironmentVariables{
   172  						Variables: map[string]types.FilteredString{"my-var": {Value: "my-val", IsSet: true}},
   173  					}))
   174  					Expect(executeErr).ToNot(HaveOccurred())
   175  					Expect(warnings).To(ConsistOf("get-application-warning", "some-env-var-warnings"))
   176  				})
   177  			})
   178  		})
   179  	})
   180  
   181  	Describe("UnsetEnvironmentVariableByApplicationNameAndSpace", func() {
   182  		var (
   183  			actor                     *Actor
   184  			fakeCloudControllerClient *v3actionfakes.FakeCloudControllerClient
   185  			appName                   string
   186  			spaceGUID                 string
   187  			envVariableName           string
   188  			executeErr                error
   189  			warnings                  Warnings
   190  		)
   191  
   192  		BeforeEach(func() {
   193  			fakeCloudControllerClient = new(v3actionfakes.FakeCloudControllerClient)
   194  			actor = NewActor(fakeCloudControllerClient, nil, nil, nil)
   195  			appName = "some-app"
   196  			spaceGUID = "space-guid"
   197  			envVariableName = "my-var"
   198  		})
   199  
   200  		JustBeforeEach(func() {
   201  			warnings, executeErr = actor.UnsetEnvironmentVariableByApplicationNameAndSpace(appName, spaceGUID, envVariableName)
   202  		})
   203  
   204  		Context("when finding the app fails", func() {
   205  			BeforeEach(func() {
   206  				fakeCloudControllerClient.GetApplicationsReturns(nil, ccv3.Warnings{"get-application-warning"}, errors.New("get-application-error"))
   207  			})
   208  
   209  			It("returns an error", func() {
   210  				Expect(executeErr).To(MatchError("get-application-error"))
   211  				Expect(warnings).To(ConsistOf("get-application-warning"))
   212  			})
   213  		})
   214  
   215  		Context("when finding the app succeeds", func() {
   216  			BeforeEach(func() {
   217  				fakeCloudControllerClient.GetApplicationsReturns([]ccv3.Application{{Name: "some-app", GUID: "some-app-guid"}}, ccv3.Warnings{"get-application-warning"}, nil)
   218  			})
   219  
   220  			Context("when getting the app environment variables fails", func() {
   221  				BeforeEach(func() {
   222  					fakeCloudControllerClient.GetApplicationEnvironmentVariablesReturns(ccv3.EnvironmentVariableGroups{}, ccv3.Warnings{"some-get-env-var-warnings"}, errors.New("some-env-var-error"))
   223  				})
   224  				It("returns an error", func() {
   225  					Expect(executeErr).To(MatchError("some-env-var-error"))
   226  					Expect(warnings).To(ConsistOf("get-application-warning", "some-get-env-var-warnings"))
   227  				})
   228  			})
   229  
   230  			Context("when the variable doesn't exists", func() {
   231  				BeforeEach(func() {
   232  					fakeCloudControllerClient.GetApplicationEnvironmentVariablesReturns(
   233  						ccv3.EnvironmentVariableGroups{},
   234  						ccv3.Warnings{"some-get-env-var-warnings"},
   235  						nil,
   236  					)
   237  				})
   238  				It("returns an EnvironmentVariableNotSetError", func() {
   239  					Expect(executeErr).To(MatchError(actionerror.EnvironmentVariableNotSetError{EnvironmentVariableName: "my-var"}))
   240  					Expect(warnings).To(ConsistOf("get-application-warning", "some-get-env-var-warnings"))
   241  				})
   242  			})
   243  
   244  			Context("when the variable exists", func() {
   245  				BeforeEach(func() {
   246  					fakeCloudControllerClient.GetApplicationEnvironmentVariablesReturns(
   247  						ccv3.EnvironmentVariableGroups{
   248  							UserProvided: map[string]interface{}{"my-var": "my-val"},
   249  						},
   250  						ccv3.Warnings{"some-get-env-var-warnings"},
   251  						nil,
   252  					)
   253  				})
   254  				Context("when updating the app environment variables fails", func() {
   255  					BeforeEach(func() {
   256  						fakeCloudControllerClient.PatchApplicationUserProvidedEnvironmentVariablesReturns(ccv3.EnvironmentVariables{}, ccv3.Warnings{"some-patch-env-var-warnings"}, errors.New("some-env-var-error"))
   257  					})
   258  					It("returns an error", func() {
   259  						Expect(executeErr).To(MatchError("some-env-var-error"))
   260  						Expect(warnings).To(ConsistOf("get-application-warning", "some-get-env-var-warnings", "some-patch-env-var-warnings"))
   261  					})
   262  				})
   263  
   264  				Context("when updating the app environment variables succeeds", func() {
   265  					BeforeEach(func() {
   266  						fakeCloudControllerClient.PatchApplicationUserProvidedEnvironmentVariablesReturns(
   267  							ccv3.EnvironmentVariables{
   268  								Variables: map[string]types.FilteredString{"my-var": {Value: "my-val", IsSet: true}},
   269  							},
   270  							ccv3.Warnings{"some-patch-env-var-warnings"},
   271  							nil,
   272  						)
   273  					})
   274  					It("makes the API call to update the app environment variables and returns all warnings", func() {
   275  						Expect(fakeCloudControllerClient.GetApplicationsCallCount()).To(Equal(1))
   276  						Expect(fakeCloudControllerClient.GetApplicationsArgsForCall(0)).To(ConsistOf(
   277  							ccv3.Query{Key: ccv3.NameFilter, Values: []string{appName}},
   278  							ccv3.Query{Key: ccv3.SpaceGUIDFilter, Values: []string{spaceGUID}},
   279  						))
   280  
   281  						Expect(fakeCloudControllerClient.PatchApplicationUserProvidedEnvironmentVariablesCallCount()).To(Equal(1))
   282  						appGUIDArg, envVarsArg := fakeCloudControllerClient.PatchApplicationUserProvidedEnvironmentVariablesArgsForCall(0)
   283  						Expect(appGUIDArg).To(Equal("some-app-guid"))
   284  						Expect(envVarsArg).To(Equal(ccv3.EnvironmentVariables{
   285  							Variables: map[string]types.FilteredString{"my-var": {Value: "", IsSet: false}},
   286  						}))
   287  
   288  						Expect(executeErr).ToNot(HaveOccurred())
   289  						Expect(warnings).To(ConsistOf("get-application-warning", "some-get-env-var-warnings", "some-patch-env-var-warnings"))
   290  					})
   291  				})
   292  			})
   293  		})
   294  	})
   295  })