github.com/jghiloni/cli@v6.28.1-0.20170628223758-0ce05fe032a2+incompatible/actor/v3action/build_test.go (about)

     1  package v3action_test
     2  
     3  import (
     4  	"errors"
     5  
     6  	. "code.cloudfoundry.org/cli/actor/v3action"
     7  	"code.cloudfoundry.org/cli/actor/v3action/v3actionfakes"
     8  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3"
     9  	. "github.com/onsi/ginkgo"
    10  	. "github.com/onsi/gomega"
    11  )
    12  
    13  var _ = Describe("Build Actions", func() {
    14  	var (
    15  		actor                     *Actor
    16  		fakeCloudControllerClient *v3actionfakes.FakeCloudControllerClient
    17  		fakeConfig                *v3actionfakes.FakeConfig
    18  	)
    19  
    20  	BeforeEach(func() {
    21  		fakeCloudControllerClient = new(v3actionfakes.FakeCloudControllerClient)
    22  		fakeConfig = new(v3actionfakes.FakeConfig)
    23  		actor = NewActor(fakeCloudControllerClient, fakeConfig)
    24  	})
    25  
    26  	Describe("StagePackage", func() {
    27  		var (
    28  			packageGUID string
    29  
    30  			buildStream    <-chan Build
    31  			warningsStream <-chan Warnings
    32  			errorStream    <-chan error
    33  
    34  			buildGUID string
    35  		)
    36  
    37  		BeforeEach(func() {
    38  			packageGUID = "some-package-guid"
    39  		})
    40  
    41  		AfterEach(func() {
    42  			Eventually(errorStream).Should(BeClosed())
    43  			Eventually(warningsStream).Should(BeClosed())
    44  			Eventually(buildStream).Should(BeClosed())
    45  		})
    46  
    47  		JustBeforeEach(func() {
    48  			buildStream, warningsStream, errorStream = actor.StagePackage(packageGUID)
    49  		})
    50  
    51  		Context("when the creation is successful", func() {
    52  			BeforeEach(func() {
    53  				buildGUID = "some-build-guid"
    54  				fakeCloudControllerClient.CreateBuildReturns(ccv3.Build{GUID: buildGUID, State: ccv3.BuildStateStaging}, ccv3.Warnings{"create-warnings-1", "create-warnings-2"}, nil)
    55  			})
    56  
    57  			Context("when the polling is successful", func() {
    58  				BeforeEach(func() {
    59  					fakeCloudControllerClient.GetBuildReturnsOnCall(0, ccv3.Build{GUID: buildGUID, State: ccv3.BuildStateStaging}, ccv3.Warnings{"get-warnings-1", "get-warnings-2"}, nil)
    60  					fakeCloudControllerClient.GetBuildReturnsOnCall(1, ccv3.Build{GUID: buildGUID, State: ccv3.BuildStateStaged}, ccv3.Warnings{"get-warnings-3", "get-warnings-4"}, nil)
    61  				})
    62  
    63  				It("creates the build", func() {
    64  					Eventually(warningsStream).Should(Receive(ConsistOf("create-warnings-1", "create-warnings-2")))
    65  					Eventually(warningsStream).Should(Receive(ConsistOf("get-warnings-1", "get-warnings-2")))
    66  					Eventually(warningsStream).Should(Receive(ConsistOf("get-warnings-3", "get-warnings-4")))
    67  					Eventually(buildStream).Should(Receive(Equal(Build{GUID: buildGUID, State: ccv3.BuildStateStaged})))
    68  
    69  					Expect(fakeCloudControllerClient.CreateBuildCallCount()).To(Equal(1))
    70  					Expect(fakeCloudControllerClient.CreateBuildArgsForCall(0)).To(Equal(ccv3.Build{
    71  						Package: ccv3.Package{
    72  							GUID: packageGUID,
    73  						},
    74  					}))
    75  				})
    76  
    77  				It("polls until the build status is not 'STAGING'", func() {
    78  					Eventually(warningsStream).Should(Receive(ConsistOf("create-warnings-1", "create-warnings-2")))
    79  					Eventually(warningsStream).Should(Receive(ConsistOf("get-warnings-1", "get-warnings-2")))
    80  					Eventually(warningsStream).Should(Receive(ConsistOf("get-warnings-3", "get-warnings-4")))
    81  					Eventually(buildStream).Should(Receive())
    82  
    83  					Expect(fakeCloudControllerClient.GetBuildCallCount()).To(Equal(2))
    84  					Expect(fakeCloudControllerClient.GetBuildArgsForCall(0)).To(Equal(buildGUID))
    85  					Expect(fakeCloudControllerClient.GetBuildArgsForCall(1)).To(Equal(buildGUID))
    86  
    87  					Expect(fakeConfig.PollingIntervalCallCount()).To(Equal(2))
    88  				})
    89  			})
    90  
    91  			Context("when the polling errors", func() {
    92  				var expectedErr error
    93  				BeforeEach(func() {
    94  					expectedErr = errors.New("I am a banana")
    95  					fakeCloudControllerClient.GetBuildReturnsOnCall(0, ccv3.Build{GUID: buildGUID, State: ccv3.BuildStateStaging}, ccv3.Warnings{"get-warnings-1", "get-warnings-2"}, nil)
    96  					fakeCloudControllerClient.GetBuildReturnsOnCall(1, ccv3.Build{}, ccv3.Warnings{"get-warnings-3", "get-warnings-4"}, expectedErr)
    97  				})
    98  
    99  				It("returns the error and warnings", func() {
   100  					Eventually(warningsStream).Should(Receive(ConsistOf("create-warnings-1", "create-warnings-2")))
   101  					Eventually(warningsStream).Should(Receive(ConsistOf("get-warnings-1", "get-warnings-2")))
   102  					Eventually(warningsStream).Should(Receive(ConsistOf("get-warnings-3", "get-warnings-4")))
   103  					Eventually(errorStream).Should(Receive(MatchError(expectedErr)))
   104  				})
   105  			})
   106  		})
   107  
   108  		Context("when the creation is error", func() {
   109  			var expectedErr error
   110  			BeforeEach(func() {
   111  				expectedErr = errors.New("I am a banana")
   112  				fakeCloudControllerClient.CreateBuildReturns(ccv3.Build{}, ccv3.Warnings{"create-warnings-1", "create-warnings-2"}, expectedErr)
   113  			})
   114  
   115  			It("returns the error and warnings", func() {
   116  				Eventually(warningsStream).Should(Receive(ConsistOf("create-warnings-1", "create-warnings-2")))
   117  				Eventually(errorStream).Should(Receive(MatchError(expectedErr)))
   118  			})
   119  		})
   120  	})
   121  })