code.cloudfoundry.org/cli@v7.1.0+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/resources"
    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  		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  		When("finding the app succeeds", func() {
    50  			BeforeEach(func() {
    51  				fakeCloudControllerClient.GetApplicationsReturns([]resources.Application{{Name: "some-app", GUID: "some-app-guid"}}, ccv3.Warnings{"get-application-warning"}, nil)
    52  			})
    53  
    54  			When("getting the app environment variables fails", func() {
    55  				BeforeEach(func() {
    56  					fakeCloudControllerClient.GetApplicationEnvironmentReturns(ccv3.Environment{}, 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  			When("getting the app environment variables succeeds", func() {
    65  				BeforeEach(func() {
    66  					fakeCloudControllerClient.GetApplicationEnvironmentReturns(
    67  						ccv3.Environment{
    68  							System:               map[string]interface{}{"system-var": "system-val"},
    69  							Application:          map[string]interface{}{"app-var": "app-val"},
    70  							EnvironmentVariables: map[string]interface{}{"user-var": "user-val"},
    71  							Running:              map[string]interface{}{"running-var": "running-val"},
    72  							Staging:              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.GetApplicationEnvironmentCallCount()).To(Equal(1))
    87  					Expect(fakeCloudControllerClient.GetApplicationEnvironmentArgsForCall(0)).To(Equal("some-app-guid"))
    88  					Expect(fetchedEnvVariables).To(Equal(EnvironmentVariableGroups{
    89  						System:               map[string]interface{}{"system-var": "system-val"},
    90  						Application:          map[string]interface{}{"app-var": "app-val"},
    91  						EnvironmentVariables: map[string]interface{}{"user-var": "user-val"},
    92  						Running:              map[string]interface{}{"running-var": "running-val"},
    93  						Staging:              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  		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  		When("finding the app succeeds", func() {
   137  			BeforeEach(func() {
   138  				fakeCloudControllerClient.GetApplicationsReturns([]resources.Application{{Name: "some-app", GUID: "some-app-guid"}}, ccv3.Warnings{"get-application-warning"}, nil)
   139  			})
   140  
   141  			When("updating the app environment variables fails", func() {
   142  				BeforeEach(func() {
   143  					fakeCloudControllerClient.UpdateApplicationEnvironmentVariablesReturns(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  			When("updating the app environment variables succeeds", func() {
   152  				BeforeEach(func() {
   153  					fakeCloudControllerClient.UpdateApplicationEnvironmentVariablesReturns(
   154  						ccv3.EnvironmentVariables{
   155  							"my-var": {Value: "my-val", IsSet: true},
   156  						},
   157  						ccv3.Warnings{"some-env-var-warnings"},
   158  						nil,
   159  					)
   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  					Expect(fakeCloudControllerClient.GetApplicationsArgsForCall(0)).To(ConsistOf(
   165  						ccv3.Query{Key: ccv3.NameFilter, Values: []string{appName}},
   166  						ccv3.Query{Key: ccv3.SpaceGUIDFilter, Values: []string{spaceGUID}},
   167  					))
   168  
   169  					Expect(fakeCloudControllerClient.UpdateApplicationEnvironmentVariablesCallCount()).To(Equal(1))
   170  					appGUIDArg, envVarsArg := fakeCloudControllerClient.UpdateApplicationEnvironmentVariablesArgsForCall(0)
   171  					Expect(appGUIDArg).To(Equal("some-app-guid"))
   172  					Expect(envVarsArg).To(Equal(ccv3.EnvironmentVariables{
   173  						"my-var": {Value: "my-val", IsSet: true},
   174  					}))
   175  					Expect(executeErr).ToNot(HaveOccurred())
   176  					Expect(warnings).To(ConsistOf("get-application-warning", "some-env-var-warnings"))
   177  				})
   178  			})
   179  		})
   180  	})
   181  
   182  	Describe("UnsetEnvironmentVariableByApplicationNameAndSpace", func() {
   183  		var (
   184  			actor                     *Actor
   185  			fakeCloudControllerClient *v3actionfakes.FakeCloudControllerClient
   186  			appName                   string
   187  			spaceGUID                 string
   188  			envVariableName           string
   189  			executeErr                error
   190  			warnings                  Warnings
   191  		)
   192  
   193  		BeforeEach(func() {
   194  			fakeCloudControllerClient = new(v3actionfakes.FakeCloudControllerClient)
   195  			actor = NewActor(fakeCloudControllerClient, nil, nil, nil)
   196  			appName = "some-app"
   197  			spaceGUID = "space-guid"
   198  			envVariableName = "my-var"
   199  		})
   200  
   201  		JustBeforeEach(func() {
   202  			warnings, executeErr = actor.UnsetEnvironmentVariableByApplicationNameAndSpace(appName, spaceGUID, envVariableName)
   203  		})
   204  
   205  		When("finding the app fails", func() {
   206  			BeforeEach(func() {
   207  				fakeCloudControllerClient.GetApplicationsReturns(nil, ccv3.Warnings{"get-application-warning"}, errors.New("get-application-error"))
   208  			})
   209  
   210  			It("returns an error", func() {
   211  				Expect(executeErr).To(MatchError("get-application-error"))
   212  				Expect(warnings).To(ConsistOf("get-application-warning"))
   213  			})
   214  		})
   215  
   216  		When("finding the app succeeds", func() {
   217  			BeforeEach(func() {
   218  				fakeCloudControllerClient.GetApplicationsReturns([]resources.Application{{Name: "some-app", GUID: "some-app-guid"}}, ccv3.Warnings{"get-application-warning"}, nil)
   219  			})
   220  
   221  			When("getting the app environment variables fails", func() {
   222  				BeforeEach(func() {
   223  					fakeCloudControllerClient.GetApplicationEnvironmentReturns(ccv3.Environment{}, ccv3.Warnings{"some-get-env-var-warnings"}, errors.New("some-env-var-error"))
   224  				})
   225  				It("returns an error", func() {
   226  					Expect(executeErr).To(MatchError("some-env-var-error"))
   227  					Expect(warnings).To(ConsistOf("get-application-warning", "some-get-env-var-warnings"))
   228  				})
   229  			})
   230  
   231  			When("the variable doesn't exists", func() {
   232  				BeforeEach(func() {
   233  					fakeCloudControllerClient.GetApplicationEnvironmentReturns(
   234  						ccv3.Environment{},
   235  						ccv3.Warnings{"some-get-env-var-warnings"},
   236  						nil,
   237  					)
   238  				})
   239  				It("returns an EnvironmentVariableNotSetError", func() {
   240  					Expect(executeErr).To(MatchError(actionerror.EnvironmentVariableNotSetError{EnvironmentVariableName: "my-var"}))
   241  					Expect(warnings).To(ConsistOf("get-application-warning", "some-get-env-var-warnings"))
   242  				})
   243  			})
   244  
   245  			When("the variable exists", func() {
   246  				BeforeEach(func() {
   247  					fakeCloudControllerClient.GetApplicationEnvironmentReturns(
   248  						ccv3.Environment{
   249  							EnvironmentVariables: map[string]interface{}{"my-var": "my-val"},
   250  						},
   251  						ccv3.Warnings{"some-get-env-var-warnings"},
   252  						nil,
   253  					)
   254  				})
   255  				When("updating the app environment variables fails", func() {
   256  					BeforeEach(func() {
   257  						fakeCloudControllerClient.UpdateApplicationEnvironmentVariablesReturns(ccv3.EnvironmentVariables{}, ccv3.Warnings{"some-patch-env-var-warnings"}, errors.New("some-env-var-error"))
   258  					})
   259  					It("returns an error", func() {
   260  						Expect(executeErr).To(MatchError("some-env-var-error"))
   261  						Expect(warnings).To(ConsistOf("get-application-warning", "some-get-env-var-warnings", "some-patch-env-var-warnings"))
   262  					})
   263  				})
   264  
   265  				When("updating the app environment variables succeeds", func() {
   266  					BeforeEach(func() {
   267  						fakeCloudControllerClient.UpdateApplicationEnvironmentVariablesReturns(
   268  							ccv3.EnvironmentVariables{
   269  								"my-var": {Value: "my-val", IsSet: true},
   270  							},
   271  							ccv3.Warnings{"some-patch-env-var-warnings"},
   272  							nil,
   273  						)
   274  					})
   275  					It("makes the API call to update the app environment variables and returns all warnings", func() {
   276  						Expect(fakeCloudControllerClient.GetApplicationsCallCount()).To(Equal(1))
   277  						Expect(fakeCloudControllerClient.GetApplicationsArgsForCall(0)).To(ConsistOf(
   278  							ccv3.Query{Key: ccv3.NameFilter, Values: []string{appName}},
   279  							ccv3.Query{Key: ccv3.SpaceGUIDFilter, Values: []string{spaceGUID}},
   280  						))
   281  
   282  						Expect(fakeCloudControllerClient.UpdateApplicationEnvironmentVariablesCallCount()).To(Equal(1))
   283  						appGUIDArg, envVarsArg := fakeCloudControllerClient.UpdateApplicationEnvironmentVariablesArgsForCall(0)
   284  						Expect(appGUIDArg).To(Equal("some-app-guid"))
   285  						Expect(envVarsArg).To(Equal(ccv3.EnvironmentVariables{
   286  							"my-var": {Value: "", IsSet: false},
   287  						}))
   288  
   289  						Expect(executeErr).ToNot(HaveOccurred())
   290  						Expect(warnings).To(ConsistOf("get-application-warning", "some-get-env-var-warnings", "some-patch-env-var-warnings"))
   291  					})
   292  				})
   293  			})
   294  		})
   295  	})
   296  })