github.com/randomtask1155/cli@v6.41.1-0.20181227003417-a98eed78cbde+incompatible/actor/v7action/environment_variable_test.go (about)

     1  package v7action_test
     2  
     3  import (
     4  	"errors"
     5  
     6  	"code.cloudfoundry.org/cli/actor/actionerror"
     7  	. "code.cloudfoundry.org/cli/actor/v7action"
     8  	"code.cloudfoundry.org/cli/actor/v7action/v7actionfakes"
     9  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3"
    10  	. "github.com/onsi/ginkgo"
    11  	. "github.com/onsi/gomega"
    12  )
    13  
    14  var _ = Describe("Environment Variable Actions", func() {
    15  	Describe("GetEnvironmentVariablesByApplicationNameAndSpace", func() {
    16  		var (
    17  			actor                     *Actor
    18  			fakeCloudControllerClient *v7actionfakes.FakeCloudControllerClient
    19  			appName                   string
    20  			spaceGUID                 string
    21  			fetchedEnvVariables       EnvironmentVariableGroups
    22  			executeErr                error
    23  			warnings                  Warnings
    24  		)
    25  
    26  		BeforeEach(func() {
    27  			fakeCloudControllerClient = new(v7actionfakes.FakeCloudControllerClient)
    28  			actor = NewActor(fakeCloudControllerClient, nil, nil, nil)
    29  			appName = "some-app"
    30  			spaceGUID = "space-guid"
    31  		})
    32  
    33  		JustBeforeEach(func() {
    34  			fetchedEnvVariables, warnings, executeErr = actor.GetEnvironmentVariablesByApplicationNameAndSpace(appName, spaceGUID)
    35  		})
    36  
    37  		When("finding the app fails", func() {
    38  			BeforeEach(func() {
    39  				fakeCloudControllerClient.GetApplicationsReturns(nil, ccv3.Warnings{"get-application-warning"}, errors.New("get-application-error"))
    40  			})
    41  
    42  			It("returns an error", func() {
    43  				Expect(executeErr).To(MatchError("get-application-error"))
    44  				Expect(warnings).To(ConsistOf("get-application-warning"))
    45  			})
    46  		})
    47  
    48  		When("finding the app succeeds", func() {
    49  			BeforeEach(func() {
    50  				fakeCloudControllerClient.GetApplicationsReturns([]ccv3.Application{{Name: "some-app", GUID: "some-app-guid"}}, ccv3.Warnings{"get-application-warning"}, nil)
    51  			})
    52  
    53  			When("getting the app environment variables fails", func() {
    54  				BeforeEach(func() {
    55  					fakeCloudControllerClient.GetApplicationEnvironmentReturns(ccv3.Environment{}, ccv3.Warnings{"some-env-var-warnings"}, errors.New("some-env-var-error"))
    56  				})
    57  				It("returns an error", func() {
    58  					Expect(executeErr).To(MatchError("some-env-var-error"))
    59  					Expect(warnings).To(ConsistOf("get-application-warning", "some-env-var-warnings"))
    60  				})
    61  			})
    62  
    63  			When("getting the app environment variables succeeds", func() {
    64  				BeforeEach(func() {
    65  					fakeCloudControllerClient.GetApplicationEnvironmentReturns(
    66  						ccv3.Environment{
    67  							System:               map[string]interface{}{"system-var": "system-val"},
    68  							Application:          map[string]interface{}{"app-var": "app-val"},
    69  							EnvironmentVariables: map[string]interface{}{"user-var": "user-val"},
    70  							Running:              map[string]interface{}{"running-var": "running-val"},
    71  							Staging:              map[string]interface{}{"staging-var": "staging-val"},
    72  						},
    73  						ccv3.Warnings{"some-env-var-warnings"},
    74  						nil,
    75  					)
    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  					Expect(fakeCloudControllerClient.GetApplicationsArgsForCall(0)).To(ConsistOf(
    81  						ccv3.Query{Key: ccv3.NameFilter, Values: []string{appName}},
    82  						ccv3.Query{Key: ccv3.SpaceGUIDFilter, Values: []string{spaceGUID}},
    83  					))
    84  
    85  					Expect(fakeCloudControllerClient.GetApplicationEnvironmentCallCount()).To(Equal(1))
    86  					Expect(fakeCloudControllerClient.GetApplicationEnvironmentArgsForCall(0)).To(Equal("some-app-guid"))
    87  					Expect(fetchedEnvVariables).To(Equal(EnvironmentVariableGroups{
    88  						System:               map[string]interface{}{"system-var": "system-val"},
    89  						Application:          map[string]interface{}{"app-var": "app-val"},
    90  						EnvironmentVariables: map[string]interface{}{"user-var": "user-val"},
    91  						Running:              map[string]interface{}{"running-var": "running-val"},
    92  						Staging:              map[string]interface{}{"staging-var": "staging-val"},
    93  					}))
    94  					Expect(executeErr).ToNot(HaveOccurred())
    95  					Expect(warnings).To(ConsistOf("get-application-warning", "some-env-var-warnings"))
    96  				})
    97  			})
    98  		})
    99  	})
   100  
   101  	Describe("SetEnvironmentVariableByApplicationNameAndSpace", func() {
   102  		var (
   103  			actor                     *Actor
   104  			fakeCloudControllerClient *v7actionfakes.FakeCloudControllerClient
   105  			appName                   string
   106  			spaceGUID                 string
   107  			envPair                   EnvironmentVariablePair
   108  			executeErr                error
   109  			warnings                  Warnings
   110  		)
   111  
   112  		BeforeEach(func() {
   113  			fakeCloudControllerClient = new(v7actionfakes.FakeCloudControllerClient)
   114  			actor = NewActor(fakeCloudControllerClient, nil, nil, nil)
   115  			appName = "some-app"
   116  			spaceGUID = "space-guid"
   117  			envPair = EnvironmentVariablePair{Key: "my-var", Value: "my-val"}
   118  		})
   119  
   120  		JustBeforeEach(func() {
   121  			warnings, executeErr = actor.SetEnvironmentVariableByApplicationNameAndSpace(appName, spaceGUID, envPair)
   122  		})
   123  
   124  		When("finding the app fails", func() {
   125  			BeforeEach(func() {
   126  				fakeCloudControllerClient.GetApplicationsReturns(nil, ccv3.Warnings{"get-application-warning"}, errors.New("get-application-error"))
   127  			})
   128  
   129  			It("returns an error", func() {
   130  				Expect(executeErr).To(MatchError("get-application-error"))
   131  				Expect(warnings).To(ConsistOf("get-application-warning"))
   132  			})
   133  		})
   134  
   135  		When("finding the app succeeds", func() {
   136  			BeforeEach(func() {
   137  				fakeCloudControllerClient.GetApplicationsReturns([]ccv3.Application{{Name: "some-app", GUID: "some-app-guid"}}, ccv3.Warnings{"get-application-warning"}, nil)
   138  			})
   139  
   140  			When("updating the app environment variables fails", func() {
   141  				BeforeEach(func() {
   142  					fakeCloudControllerClient.UpdateApplicationEnvironmentVariablesReturns(ccv3.EnvironmentVariables{}, ccv3.Warnings{"some-env-var-warnings"}, errors.New("some-env-var-error"))
   143  				})
   144  				It("returns an error", func() {
   145  					Expect(executeErr).To(MatchError("some-env-var-error"))
   146  					Expect(warnings).To(ConsistOf("get-application-warning", "some-env-var-warnings"))
   147  				})
   148  			})
   149  
   150  			When("updating the app environment variables succeeds", func() {
   151  				BeforeEach(func() {
   152  					fakeCloudControllerClient.UpdateApplicationEnvironmentVariablesReturns(
   153  						ccv3.EnvironmentVariables{
   154  							"my-var": {Value: "my-val", IsSet: true},
   155  						},
   156  						ccv3.Warnings{"some-env-var-warnings"},
   157  						nil,
   158  					)
   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.UpdateApplicationEnvironmentVariablesCallCount()).To(Equal(1))
   169  					appGUIDArg, envVarsArg := fakeCloudControllerClient.UpdateApplicationEnvironmentVariablesArgsForCall(0)
   170  					Expect(appGUIDArg).To(Equal("some-app-guid"))
   171  					Expect(envVarsArg).To(Equal(ccv3.EnvironmentVariables{
   172  						"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 *v7actionfakes.FakeCloudControllerClient
   185  			appName                   string
   186  			spaceGUID                 string
   187  			envVariableName           string
   188  			executeErr                error
   189  			warnings                  Warnings
   190  		)
   191  
   192  		BeforeEach(func() {
   193  			fakeCloudControllerClient = new(v7actionfakes.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  		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  		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  			When("getting the app environment variables fails", func() {
   221  				BeforeEach(func() {
   222  					fakeCloudControllerClient.GetApplicationEnvironmentReturns(ccv3.Environment{}, 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  			When("the variable doesn't exists", func() {
   231  				BeforeEach(func() {
   232  					fakeCloudControllerClient.GetApplicationEnvironmentReturns(
   233  						ccv3.Environment{},
   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  			When("the variable exists", func() {
   245  				BeforeEach(func() {
   246  					fakeCloudControllerClient.GetApplicationEnvironmentReturns(
   247  						ccv3.Environment{
   248  							EnvironmentVariables: map[string]interface{}{"my-var": "my-val"},
   249  						},
   250  						ccv3.Warnings{"some-get-env-var-warnings"},
   251  						nil,
   252  					)
   253  				})
   254  				When("updating the app environment variables fails", func() {
   255  					BeforeEach(func() {
   256  						fakeCloudControllerClient.UpdateApplicationEnvironmentVariablesReturns(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  				When("updating the app environment variables succeeds", func() {
   265  					BeforeEach(func() {
   266  						fakeCloudControllerClient.UpdateApplicationEnvironmentVariablesReturns(
   267  							ccv3.EnvironmentVariables{
   268  								"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.UpdateApplicationEnvironmentVariablesCallCount()).To(Equal(1))
   282  						appGUIDArg, envVarsArg := fakeCloudControllerClient.UpdateApplicationEnvironmentVariablesArgsForCall(0)
   283  						Expect(appGUIDArg).To(Equal("some-app-guid"))
   284  						Expect(envVarsArg).To(Equal(ccv3.EnvironmentVariables{
   285  							"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  })