github.com/jenspinney/cli@v6.42.1-0.20190207184520-7450c600020e+incompatible/actor/v2action/job_test.go (about)

     1  package v2action_test
     2  
     3  import (
     4  	"errors"
     5  	"io"
     6  	"strings"
     7  
     8  	. "code.cloudfoundry.org/cli/actor/v2action"
     9  	"code.cloudfoundry.org/cli/actor/v2action/v2actionfakes"
    10  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv2"
    11  	. "github.com/onsi/ginkgo"
    12  	. "github.com/onsi/gomega"
    13  )
    14  
    15  var _ = Describe("Job Actions", func() {
    16  	var (
    17  		actor                     *Actor
    18  		fakeCloudControllerClient *v2actionfakes.FakeCloudControllerClient
    19  	)
    20  
    21  	BeforeEach(func() {
    22  		fakeCloudControllerClient = new(v2actionfakes.FakeCloudControllerClient)
    23  		actor = NewActor(fakeCloudControllerClient, nil, nil)
    24  	})
    25  
    26  	Describe("UploadApplicationPackage", func() {
    27  		var (
    28  			appGUID           string
    29  			existingResources []Resource
    30  			reader            io.Reader
    31  			readerLength      int64
    32  
    33  			job        Job
    34  			warnings   Warnings
    35  			executeErr error
    36  		)
    37  
    38  		BeforeEach(func() {
    39  			appGUID = "some-app-guid"
    40  			existingResources = []Resource{{Filename: "some-resource"}, {Filename: "another-resource"}}
    41  			someString := "who reads these days"
    42  			reader = strings.NewReader(someString)
    43  			readerLength = int64(len([]byte(someString)))
    44  		})
    45  
    46  		JustBeforeEach(func() {
    47  			job, warnings, executeErr = actor.UploadApplicationPackage(appGUID, existingResources, reader, readerLength)
    48  		})
    49  
    50  		When("the upload is successful", func() {
    51  			BeforeEach(func() {
    52  				fakeCloudControllerClient.UploadApplicationPackageReturns(ccv2.Job{GUID: "some-job-guid"}, ccv2.Warnings{"upload-warning-1", "upload-warning-2"}, nil)
    53  			})
    54  
    55  			It("returns all warnings", func() {
    56  				Expect(executeErr).ToNot(HaveOccurred())
    57  				Expect(warnings).To(ConsistOf("upload-warning-1", "upload-warning-2"))
    58  				Expect(job).To(Equal(Job{GUID: "some-job-guid"}))
    59  
    60  				Expect(fakeCloudControllerClient.UploadApplicationPackageCallCount()).To(Equal(1))
    61  				passedAppGUID, passedExistingResources, passedReader, passedReaderLength := fakeCloudControllerClient.UploadApplicationPackageArgsForCall(0)
    62  				Expect(passedAppGUID).To(Equal(appGUID))
    63  				Expect(passedExistingResources).To(ConsistOf(ccv2.Resource{Filename: "some-resource"}, ccv2.Resource{Filename: "another-resource"}))
    64  				Expect(passedReader).To(Equal(reader))
    65  				Expect(passedReaderLength).To(Equal(readerLength))
    66  			})
    67  		})
    68  
    69  		When("the upload returns an error", func() {
    70  			var err error
    71  
    72  			BeforeEach(func() {
    73  				err = errors.New("some-error")
    74  				fakeCloudControllerClient.UploadApplicationPackageReturns(ccv2.Job{}, ccv2.Warnings{"upload-warning-1", "upload-warning-2"}, err)
    75  			})
    76  
    77  			It("returns the error", func() {
    78  				Expect(executeErr).To(MatchError(err))
    79  				Expect(warnings).To(ConsistOf("upload-warning-1", "upload-warning-2"))
    80  			})
    81  		})
    82  	})
    83  
    84  	Describe("UploadDroplet", func() {
    85  		var (
    86  			appGUID       string
    87  			droplet       io.Reader
    88  			dropletLength int64
    89  
    90  			job        Job
    91  			warnings   Warnings
    92  			executeErr error
    93  		)
    94  
    95  		BeforeEach(func() {
    96  			appGUID = "some-app-guid"
    97  			someString := "who reads these days"
    98  
    99  			droplet = strings.NewReader(someString)
   100  			dropletLength = int64(len([]byte(someString)))
   101  		})
   102  
   103  		JustBeforeEach(func() {
   104  			job, warnings, executeErr = actor.UploadDroplet(appGUID, droplet, dropletLength)
   105  		})
   106  
   107  		When("the upload is successful", func() {
   108  			BeforeEach(func() {
   109  				fakeCloudControllerClient.UploadDropletReturns(ccv2.Job{GUID: "some-job-guid"}, ccv2.Warnings{"upload-droplet-warning-1", "upload-droplet-warning-2"}, nil)
   110  			})
   111  
   112  			It("returns all warnings", func() {
   113  				Expect(executeErr).ToNot(HaveOccurred())
   114  				Expect(warnings).To(ConsistOf("upload-droplet-warning-1", "upload-droplet-warning-2"))
   115  				Expect(job).To(Equal(Job{GUID: "some-job-guid"}))
   116  
   117  				Expect(fakeCloudControllerClient.UploadDropletCallCount()).To(Equal(1))
   118  				passedAppGUID, passedDroplet, passedDropletLength := fakeCloudControllerClient.UploadDropletArgsForCall(0)
   119  				Expect(passedAppGUID).To(Equal(appGUID))
   120  				Expect(passedDroplet).To(Equal(droplet))
   121  				Expect(passedDropletLength).To(Equal(dropletLength))
   122  			})
   123  		})
   124  
   125  	})
   126  
   127  	Describe("PollJob", func() {
   128  		var (
   129  			job        Job
   130  			warnings   Warnings
   131  			executeErr error
   132  		)
   133  
   134  		JustBeforeEach(func() {
   135  			warnings, executeErr = actor.PollJob(job)
   136  		})
   137  
   138  		When("the job polling is successful", func() {
   139  			BeforeEach(func() {
   140  				fakeCloudControllerClient.PollJobReturns(ccv2.Warnings{"polling-warning"}, nil)
   141  			})
   142  
   143  			It("returns the warnings", func() {
   144  				Expect(executeErr).ToNot(HaveOccurred())
   145  				Expect(warnings).To(ConsistOf("polling-warning"))
   146  
   147  				Expect(fakeCloudControllerClient.PollJobCallCount()).To(Equal(1))
   148  				Expect(fakeCloudControllerClient.PollJobArgsForCall(0)).To(Equal(ccv2.Job(job)))
   149  			})
   150  		})
   151  
   152  		When("polling errors", func() {
   153  			var err error
   154  
   155  			BeforeEach(func() {
   156  				err = errors.New("some-error")
   157  				fakeCloudControllerClient.PollJobReturns(ccv2.Warnings{"polling-warning"}, err)
   158  			})
   159  
   160  			It("returns the error", func() {
   161  				Expect(executeErr).To(MatchError(err))
   162  				Expect(warnings).To(ConsistOf("polling-warning"))
   163  			})
   164  		})
   165  	})
   166  })