code.cloudfoundry.org/cli@v7.1.0+incompatible/actor/v7pushaction/create_docker_package_for_application_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/api/cloudcontroller/ccv3/constant"
    10  	"code.cloudfoundry.org/cli/resources"
    11  	. "github.com/onsi/ginkgo"
    12  	. "github.com/onsi/gomega"
    13  	. "github.com/onsi/gomega/gstruct"
    14  )
    15  
    16  var _ = Describe("CreateDockerPackageForApplication", func() {
    17  	var (
    18  		actor       *Actor
    19  		fakeV7Actor *v7pushactionfakes.FakeV7Actor
    20  
    21  		returnedPushPlan PushPlan
    22  		paramPlan        PushPlan
    23  		fakeProgressBar  *v7pushactionfakes.FakeProgressBar
    24  
    25  		warnings   Warnings
    26  		executeErr error
    27  
    28  		events []Event
    29  	)
    30  
    31  	BeforeEach(func() {
    32  		actor, fakeV7Actor, _ = getTestPushActor()
    33  
    34  		fakeProgressBar = new(v7pushactionfakes.FakeProgressBar)
    35  
    36  		paramPlan = PushPlan{
    37  			Application: resources.Application{
    38  				GUID: "some-app-guid",
    39  			},
    40  			DockerImageCredentials: v7action.DockerImageCredentials{
    41  				Path:     "some-docker-image",
    42  				Password: "some-docker-password",
    43  				Username: "some-docker-username",
    44  			},
    45  		}
    46  	})
    47  
    48  	JustBeforeEach(func() {
    49  		events = EventFollower(func(eventStream chan<- *PushEvent) {
    50  			returnedPushPlan, warnings, executeErr = actor.CreateDockerPackageForApplication(paramPlan, eventStream, fakeProgressBar)
    51  		})
    52  	})
    53  
    54  	Describe("package upload", func() {
    55  		BeforeEach(func() {
    56  			fakeV7Actor.CreateApplicationInSpaceReturns(
    57  				resources.Application{
    58  					GUID:          "some-app-guid",
    59  					Name:          paramPlan.Application.Name,
    60  					LifecycleType: constant.AppLifecycleTypeDocker,
    61  				},
    62  				v7action.Warnings{"some-app-warnings"},
    63  				nil)
    64  		})
    65  
    66  		When("creating the package is successful", func() {
    67  			BeforeEach(func() {
    68  				fakeV7Actor.CreateDockerPackageByApplicationReturns(
    69  					v7action.Package{GUID: "some-package-guid"},
    70  					v7action.Warnings{"some-package-warnings"},
    71  					nil)
    72  			})
    73  
    74  			It("sets the docker image", func() {
    75  				Expect(executeErr).ToNot(HaveOccurred())
    76  				Expect(warnings).To(ConsistOf("some-package-warnings"))
    77  				Expect(events).To(ConsistOf(SetDockerImage, SetDockerImageComplete))
    78  				Expect(fakeV7Actor.CreateDockerPackageByApplicationCallCount()).To(Equal(1))
    79  
    80  				appGUID, dockerCredentials := fakeV7Actor.CreateDockerPackageByApplicationArgsForCall(0)
    81  				Expect(appGUID).To(Equal("some-app-guid"))
    82  				Expect(dockerCredentials).To(MatchFields(IgnoreExtras,
    83  					Fields{
    84  						"Path":     Equal("some-docker-image"),
    85  						"Username": Equal("some-docker-username"),
    86  						"Password": Equal("some-docker-password"),
    87  					}))
    88  
    89  				Expect(fakeV7Actor.PollPackageArgsForCall(0)).To(MatchFields(IgnoreExtras,
    90  					Fields{
    91  						"GUID": Equal("some-package-guid"),
    92  					}))
    93  			})
    94  		})
    95  
    96  		When("creating the package errors", func() {
    97  			var someErr error
    98  
    99  			BeforeEach(func() {
   100  				someErr = errors.New("I AM A BANANA")
   101  				fakeV7Actor.CreateDockerPackageByApplicationReturns(v7action.Package{}, v7action.Warnings{"some-package-warnings"}, someErr)
   102  			})
   103  
   104  			It("returns errors and warnings", func() {
   105  				Expect(executeErr).To(MatchError(someErr))
   106  				Expect(events).To(ConsistOf(SetDockerImage))
   107  				Expect(warnings).To(ConsistOf("some-package-warnings"))
   108  			})
   109  		})
   110  	})
   111  
   112  	Describe("polling package", func() {
   113  		When("the the polling is successful", func() {
   114  			BeforeEach(func() {
   115  				fakeV7Actor.PollPackageReturns(v7action.Package{GUID: "some-package-guid"}, v7action.Warnings{"some-poll-package-warning"}, nil)
   116  			})
   117  
   118  			It("returns warnings", func() {
   119  				Expect(events).To(ConsistOf(SetDockerImage, SetDockerImageComplete))
   120  				Expect(warnings).To(ConsistOf("some-poll-package-warning"))
   121  			})
   122  
   123  			It("sets the package guid on push plan", func() {
   124  				Expect(returnedPushPlan.PackageGUID).To(Equal("some-package-guid"))
   125  			})
   126  		})
   127  
   128  		When("the the polling returns an error", func() {
   129  			var someErr error
   130  
   131  			BeforeEach(func() {
   132  				someErr = errors.New("I AM A BANANA")
   133  				fakeV7Actor.PollPackageReturns(v7action.Package{}, v7action.Warnings{"some-poll-package-warning"}, someErr)
   134  			})
   135  
   136  			It("returns errors and warnings", func() {
   137  				Expect(events).To(ConsistOf(SetDockerImage, SetDockerImageComplete))
   138  				Expect(executeErr).To(MatchError(someErr))
   139  			})
   140  		})
   141  	})
   142  })