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 })