github.com/liamawhite/cli-with-i18n@v6.32.1-0.20171122084555-dede0a5c3448+incompatible/actor/v3action/droplet_test.go (about)

     1  package v3action_test
     2  
     3  import (
     4  	"errors"
     5  	"net/url"
     6  
     7  	. "github.com/liamawhite/cli-with-i18n/actor/v3action"
     8  	"github.com/liamawhite/cli-with-i18n/actor/v3action/v3actionfakes"
     9  	"github.com/liamawhite/cli-with-i18n/api/cloudcontroller/ccerror"
    10  	"github.com/liamawhite/cli-with-i18n/api/cloudcontroller/ccv3"
    11  
    12  	. "github.com/onsi/ginkgo"
    13  	. "github.com/onsi/gomega"
    14  )
    15  
    16  var _ = Describe("Droplet Actions", func() {
    17  	var (
    18  		actor                     *Actor
    19  		fakeCloudControllerClient *v3actionfakes.FakeCloudControllerClient
    20  	)
    21  
    22  	BeforeEach(func() {
    23  		fakeCloudControllerClient = new(v3actionfakes.FakeCloudControllerClient)
    24  		actor = NewActor(nil, fakeCloudControllerClient, nil)
    25  	})
    26  
    27  	Describe("SetApplicationDroplet", func() {
    28  		Context("when there are no client errors", func() {
    29  			BeforeEach(func() {
    30  				fakeCloudControllerClient.GetApplicationsReturns(
    31  					[]ccv3.Application{
    32  						{GUID: "some-app-guid"},
    33  					},
    34  					ccv3.Warnings{"get-applications-warning"},
    35  					nil,
    36  				)
    37  
    38  				fakeCloudControllerClient.SetApplicationDropletReturns(
    39  					ccv3.Relationship{GUID: "some-droplet-guid"},
    40  					ccv3.Warnings{"set-application-droplet-warning"},
    41  					nil,
    42  				)
    43  			})
    44  
    45  			It("sets the app's droplet", func() {
    46  				warnings, err := actor.SetApplicationDroplet("some-app-name", "some-space-guid", "some-droplet-guid")
    47  
    48  				Expect(err).ToNot(HaveOccurred())
    49  				Expect(warnings).To(ConsistOf("get-applications-warning", "set-application-droplet-warning"))
    50  
    51  				Expect(fakeCloudControllerClient.GetApplicationsCallCount()).To(Equal(1))
    52  				queryURL := fakeCloudControllerClient.GetApplicationsArgsForCall(0)
    53  				query := url.Values{"names": []string{"some-app-name"}, "space_guids": []string{"some-space-guid"}}
    54  				Expect(queryURL).To(Equal(query))
    55  
    56  				Expect(fakeCloudControllerClient.SetApplicationDropletCallCount()).To(Equal(1))
    57  				appGUID, dropletGUID := fakeCloudControllerClient.SetApplicationDropletArgsForCall(0)
    58  				Expect(appGUID).To(Equal("some-app-guid"))
    59  				Expect(dropletGUID).To(Equal("some-droplet-guid"))
    60  			})
    61  		})
    62  
    63  		Context("when getting the application fails", func() {
    64  			var expectedErr error
    65  
    66  			BeforeEach(func() {
    67  				expectedErr = errors.New("some get application error")
    68  
    69  				fakeCloudControllerClient.GetApplicationsReturns(
    70  					[]ccv3.Application{},
    71  					ccv3.Warnings{"get-applications-warning"},
    72  					expectedErr,
    73  				)
    74  			})
    75  
    76  			It("returns the error", func() {
    77  				warnings, err := actor.SetApplicationDroplet("some-app-name", "some-space-guid", "some-droplet-guid")
    78  
    79  				Expect(err).To(Equal(expectedErr))
    80  				Expect(warnings).To(ConsistOf("get-applications-warning"))
    81  			})
    82  		})
    83  
    84  		Context("when setting the droplet fails", func() {
    85  			var expectedErr error
    86  			BeforeEach(func() {
    87  				expectedErr = errors.New("some set application-droplet error")
    88  				fakeCloudControllerClient.GetApplicationsReturns(
    89  					[]ccv3.Application{
    90  						{GUID: "some-app-guid"},
    91  					},
    92  					ccv3.Warnings{"get-applications-warning"},
    93  					nil,
    94  				)
    95  
    96  				fakeCloudControllerClient.SetApplicationDropletReturns(
    97  					ccv3.Relationship{},
    98  					ccv3.Warnings{"set-application-droplet-warning"},
    99  					expectedErr,
   100  				)
   101  			})
   102  
   103  			It("returns the error", func() {
   104  				warnings, err := actor.SetApplicationDroplet("some-app-name", "some-space-guid", "some-droplet-guid")
   105  
   106  				Expect(err).To(Equal(expectedErr))
   107  				Expect(warnings).To(ConsistOf("get-applications-warning", "set-application-droplet-warning"))
   108  			})
   109  
   110  			Context("when the cc client response contains an UnprocessableEntityError", func() {
   111  				BeforeEach(func() {
   112  					fakeCloudControllerClient.SetApplicationDropletReturns(
   113  						ccv3.Relationship{},
   114  						ccv3.Warnings{"set-application-droplet-warning"},
   115  						ccerror.UnprocessableEntityError{Message: "some-message"},
   116  					)
   117  				})
   118  
   119  				It("raises the error as AssignDropletError and returns warnings", func() {
   120  					warnings, err := actor.SetApplicationDroplet("some-app-name", "some-space-guid", "some-droplet-guid")
   121  
   122  					Expect(err).To(MatchError("some-message"))
   123  					Expect(warnings).To(ConsistOf("get-applications-warning", "set-application-droplet-warning"))
   124  				})
   125  			})
   126  
   127  		})
   128  	})
   129  
   130  	Describe("GetApplicationDroplets", func() {
   131  		Context("when there are no client errors", func() {
   132  			BeforeEach(func() {
   133  				fakeCloudControllerClient.GetApplicationsReturns(
   134  					[]ccv3.Application{
   135  						{GUID: "some-app-guid"},
   136  					},
   137  					ccv3.Warnings{"get-applications-warning"},
   138  					nil,
   139  				)
   140  
   141  				fakeCloudControllerClient.GetApplicationDropletsReturns(
   142  					[]ccv3.Droplet{
   143  						{
   144  							GUID:      "some-droplet-guid-1",
   145  							State:     ccv3.DropletStateStaged,
   146  							CreatedAt: "2017-08-14T21:16:42Z",
   147  							Buildpacks: []ccv3.DropletBuildpack{
   148  								{Name: "ruby"},
   149  								{Name: "nodejs"},
   150  							},
   151  							Image: "docker/some-image",
   152  							Stack: "penguin",
   153  						},
   154  						{
   155  							GUID:      "some-droplet-guid-2",
   156  							State:     ccv3.DropletStateFailed,
   157  							CreatedAt: "2017-08-16T00:18:24Z",
   158  							Buildpacks: []ccv3.DropletBuildpack{
   159  								{Name: "java"},
   160  							},
   161  							Stack: "windows",
   162  						},
   163  					},
   164  					ccv3.Warnings{"get-application-droplets-warning"},
   165  					nil,
   166  				)
   167  			})
   168  
   169  			It("gets the app's droplets", func() {
   170  				droplets, warnings, err := actor.GetApplicationDroplets("some-app-name", "some-space-guid")
   171  
   172  				Expect(err).ToNot(HaveOccurred())
   173  				Expect(warnings).To(ConsistOf("get-applications-warning", "get-application-droplets-warning"))
   174  				Expect(droplets).To(Equal([]Droplet{
   175  					{
   176  						GUID:      "some-droplet-guid-1",
   177  						State:     DropletStateStaged,
   178  						CreatedAt: "2017-08-14T21:16:42Z",
   179  						Buildpacks: []Buildpack{
   180  							{Name: "ruby"},
   181  							{Name: "nodejs"},
   182  						},
   183  						Image: "docker/some-image",
   184  						Stack: "penguin",
   185  					},
   186  					{
   187  						GUID:      "some-droplet-guid-2",
   188  						State:     DropletStateFailed,
   189  						CreatedAt: "2017-08-16T00:18:24Z",
   190  						Buildpacks: []Buildpack{
   191  							{Name: "java"},
   192  						},
   193  						Stack: "windows",
   194  					},
   195  				}))
   196  
   197  				Expect(fakeCloudControllerClient.GetApplicationsCallCount()).To(Equal(1))
   198  				queryURL := fakeCloudControllerClient.GetApplicationsArgsForCall(0)
   199  				query := url.Values{"names": []string{"some-app-name"}, "space_guids": []string{"some-space-guid"}}
   200  				Expect(queryURL).To(Equal(query))
   201  
   202  				Expect(fakeCloudControllerClient.GetApplicationDropletsCallCount()).To(Equal(1))
   203  				appGUID, query := fakeCloudControllerClient.GetApplicationDropletsArgsForCall(0)
   204  				Expect(appGUID).To(Equal("some-app-guid"))
   205  				Expect(query).To(Equal(url.Values{}))
   206  			})
   207  		})
   208  
   209  		Context("when getting the application fails", func() {
   210  			var expectedErr error
   211  
   212  			BeforeEach(func() {
   213  				expectedErr = errors.New("some get application error")
   214  
   215  				fakeCloudControllerClient.GetApplicationsReturns(
   216  					[]ccv3.Application{},
   217  					ccv3.Warnings{"get-applications-warning"},
   218  					expectedErr,
   219  				)
   220  			})
   221  
   222  			It("returns the error", func() {
   223  				_, warnings, err := actor.GetApplicationDroplets("some-app-name", "some-space-guid")
   224  
   225  				Expect(err).To(Equal(expectedErr))
   226  				Expect(warnings).To(ConsistOf("get-applications-warning"))
   227  			})
   228  		})
   229  
   230  		Context("when getting the application droplets fails", func() {
   231  			var expectedErr error
   232  
   233  			BeforeEach(func() {
   234  				expectedErr = errors.New("some get application error")
   235  
   236  				fakeCloudControllerClient.GetApplicationsReturns(
   237  					[]ccv3.Application{
   238  						{GUID: "some-app-guid"},
   239  					},
   240  					ccv3.Warnings{"get-applications-warning"},
   241  					nil,
   242  				)
   243  
   244  				fakeCloudControllerClient.GetApplicationDropletsReturns(
   245  					[]ccv3.Droplet{},
   246  					ccv3.Warnings{"get-application-droplets-warning"},
   247  					expectedErr,
   248  				)
   249  			})
   250  
   251  			It("returns the error", func() {
   252  				_, warnings, err := actor.GetApplicationDroplets("some-app-name", "some-space-guid")
   253  
   254  				Expect(err).To(Equal(expectedErr))
   255  				Expect(warnings).To(ConsistOf("get-applications-warning", "get-application-droplets-warning"))
   256  			})
   257  		})
   258  	})
   259  })