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

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