github.com/sleungcy/cli@v7.1.0+incompatible/actor/v7pushaction/create_deployment_for_push_plan_test.go (about) 1 package v7pushaction_test 2 3 import ( 4 "errors" 5 6 "code.cloudfoundry.org/cli/actor/v7action" 7 . "code.cloudfoundry.org/cli/actor/v7pushaction" 8 "code.cloudfoundry.org/cli/actor/v7pushaction/v7pushactionfakes" 9 "code.cloudfoundry.org/cli/resources" 10 . "github.com/onsi/ginkgo" 11 . "github.com/onsi/gomega" 12 ) 13 14 var _ = Describe("CreateDeploymentForApplication()", func() { 15 var ( 16 actor *Actor 17 fakeV7Actor *v7pushactionfakes.FakeV7Actor 18 19 returnedPushPlan PushPlan 20 paramPlan PushPlan 21 fakeProgressBar *v7pushactionfakes.FakeProgressBar 22 23 warnings Warnings 24 executeErr error 25 26 events []Event 27 ) 28 29 BeforeEach(func() { 30 actor, fakeV7Actor, _ = getTestPushActor() 31 32 fakeProgressBar = new(v7pushactionfakes.FakeProgressBar) 33 34 paramPlan = PushPlan{ 35 Application: resources.Application{ 36 GUID: "some-app-guid", 37 }, 38 } 39 }) 40 41 JustBeforeEach(func() { 42 events = EventFollower(func(eventStream chan<- *PushEvent) { 43 returnedPushPlan, warnings, executeErr = actor.CreateDeploymentForApplication(paramPlan, eventStream, fakeProgressBar) 44 }) 45 }) 46 47 Describe("creating deployment", func() { 48 When("creating the deployment is successful", func() { 49 BeforeEach(func() { 50 fakeV7Actor.PollStartForRollingCalls(func(_ resources.Application, _ string, _ bool, handleInstanceDetails func(string)) (warnings v7action.Warnings, err error) { 51 handleInstanceDetails("Instances starting...") 52 return nil, nil 53 }) 54 55 fakeV7Actor.CreateDeploymentByApplicationAndDropletReturns( 56 "some-deployment-guid", 57 v7action.Warnings{"some-deployment-warning"}, 58 nil, 59 ) 60 }) 61 62 It("waits for the app to start", func() { 63 Expect(fakeV7Actor.PollStartForRollingCallCount()).To(Equal(1)) 64 givenApp, givenDeploymentGUID, noWait, _ := fakeV7Actor.PollStartForRollingArgsForCall(0) 65 Expect(givenApp).To(Equal(resources.Application{GUID: "some-app-guid"})) 66 Expect(givenDeploymentGUID).To(Equal("some-deployment-guid")) 67 Expect(noWait).To(Equal(false)) 68 Expect(events).To(ConsistOf(StartingDeployment, InstanceDetails, WaitingForDeployment)) 69 }) 70 71 It("returns errors and warnings", func() { 72 Expect(returnedPushPlan).To(Equal(paramPlan)) 73 Expect(executeErr).NotTo(HaveOccurred()) 74 Expect(warnings).To(ConsistOf("some-deployment-warning")) 75 }) 76 77 It("records deployment events", func() { 78 Expect(events).To(ConsistOf(StartingDeployment, InstanceDetails, WaitingForDeployment)) 79 }) 80 }) 81 82 When("creating the package errors", func() { 83 var someErr error 84 85 BeforeEach(func() { 86 someErr = errors.New("failed to create deployment") 87 88 fakeV7Actor.CreateDeploymentByApplicationAndDropletReturns( 89 "", 90 v7action.Warnings{"some-deployment-warning"}, 91 someErr, 92 ) 93 }) 94 95 It("does not wait for the app to start", func() { 96 Expect(fakeV7Actor.PollStartForRollingCallCount()).To(Equal(0)) 97 }) 98 99 It("returns errors and warnings", func() { 100 Expect(returnedPushPlan).To(Equal(paramPlan)) 101 Expect(executeErr).To(MatchError(someErr)) 102 Expect(warnings).To(ConsistOf("some-deployment-warning")) 103 }) 104 105 It("records deployment events", func() { 106 Expect(events).To(ConsistOf(StartingDeployment)) 107 }) 108 }) 109 }) 110 111 Describe("waiting for app to start", func() { 112 When("the the polling is successful", func() { 113 BeforeEach(func() { 114 fakeV7Actor.PollStartForRollingReturns(v7action.Warnings{"some-poll-start-warning"}, nil) 115 }) 116 117 It("returns warnings and unchanged push plan", func() { 118 Expect(returnedPushPlan).To(Equal(paramPlan)) 119 Expect(warnings).To(ConsistOf("some-poll-start-warning")) 120 }) 121 122 It("records deployment events", func() { 123 Expect(events).To(ConsistOf(StartingDeployment, WaitingForDeployment)) 124 }) 125 }) 126 127 When("the the polling returns an error", func() { 128 var someErr error 129 130 BeforeEach(func() { 131 someErr = errors.New("app failed to start") 132 fakeV7Actor.PollStartForRollingReturns(v7action.Warnings{"some-poll-start-warning"}, someErr) 133 }) 134 135 It("returns errors and warnings", func() { 136 Expect(warnings).To(ConsistOf("some-poll-start-warning")) 137 Expect(executeErr).To(MatchError(someErr)) 138 }) 139 140 It("records deployment events", func() { 141 Expect(events).To(ConsistOf(StartingDeployment, WaitingForDeployment)) 142 }) 143 }) 144 145 When("the noWait flag is set", func() { 146 BeforeEach(func() { 147 paramPlan.NoWait = true 148 }) 149 150 It("passes in the noWait flag", func() { 151 _, _, noWait, _ := fakeV7Actor.PollStartForRollingArgsForCall(0) 152 Expect(noWait).To(Equal(true)) 153 }) 154 }) 155 }) 156 })