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