github.com/jenspinney/cli@v6.42.1-0.20190207184520-7450c600020e+incompatible/actor/v2v3action/manifest_test.go (about)

     1  package v2v3action_test
     2  
     3  import (
     4  	"errors"
     5  
     6  	. "github.com/onsi/ginkgo"
     7  	. "github.com/onsi/gomega"
     8  	. "github.com/onsi/gomega/gstruct"
     9  
    10  	"code.cloudfoundry.org/cli/actor/v2action"
    11  	. "code.cloudfoundry.org/cli/actor/v2v3action"
    12  	"code.cloudfoundry.org/cli/actor/v2v3action/v2v3actionfakes"
    13  	"code.cloudfoundry.org/cli/actor/v3action"
    14  	"code.cloudfoundry.org/cli/types"
    15  	"code.cloudfoundry.org/cli/util/manifest"
    16  )
    17  
    18  var _ = Describe("Manifest", func() {
    19  	var (
    20  		actor       *Actor
    21  		fakeV2Actor *v2v3actionfakes.FakeV2Actor
    22  		fakeV3Actor *v2v3actionfakes.FakeV3Actor
    23  
    24  		appName  string
    25  		appSpace string
    26  
    27  		manifestApp manifest.Application
    28  		warnings    Warnings
    29  		executeErr  error
    30  	)
    31  
    32  	BeforeEach(func() {
    33  		fakeV2Actor = new(v2v3actionfakes.FakeV2Actor)
    34  		fakeV3Actor = new(v2v3actionfakes.FakeV3Actor)
    35  
    36  		actor = NewActor(fakeV2Actor, fakeV3Actor)
    37  
    38  		appName = "some-app-name"
    39  		appSpace = "some-space-GUID"
    40  	})
    41  
    42  	JustBeforeEach(func() {
    43  		manifestApp, warnings, executeErr = actor.CreateApplicationManifestByNameAndSpace(appName, appSpace)
    44  	})
    45  
    46  	It("calls v2Actor.CreateManifestApplication with the appName and appSpace", func() {
    47  		Expect(fakeV2Actor.CreateApplicationManifestByNameAndSpaceCallCount()).To(Equal(1))
    48  		appNameArg, appSpaceArg := fakeV2Actor.CreateApplicationManifestByNameAndSpaceArgsForCall(0)
    49  		Expect(appNameArg).To(Equal(appName))
    50  		Expect(appSpaceArg).To(Equal(appSpace))
    51  	})
    52  
    53  	When("v2Actor.CreateManifestApplication succeeds", func() {
    54  		BeforeEach(func() {
    55  			v2Application := manifest.Application{
    56  				Buildpacks: []string{"some-buildpack"},
    57  			}
    58  
    59  			fakeV2Actor.CreateApplicationManifestByNameAndSpaceReturns(v2Application, v2action.Warnings{"v2-action-warnings"}, nil)
    60  		})
    61  
    62  		It("Calls the v3actor.GetApplicationByNameAndSpace with the appName and appSpace", func() {
    63  			Expect(fakeV3Actor.GetApplicationByNameAndSpaceCallCount()).To(Equal(1))
    64  			appNameArg, appSpaceArg := fakeV3Actor.GetApplicationByNameAndSpaceArgsForCall(0)
    65  			Expect(appNameArg).To(Equal(appName))
    66  			Expect(appSpaceArg).To(Equal(appSpace))
    67  		})
    68  
    69  		When("the v3Actor.GetApplicationByNameAndSpace succeeds", func() {
    70  			BeforeEach(func() {
    71  				v3Application := v3action.Application{LifecycleBuildpacks: []string{"some-buildpack"}}
    72  				fakeV3Actor.GetApplicationByNameAndSpaceReturns(v3Application, v3action.Warnings{"v3-action-warnings"}, nil)
    73  			})
    74  
    75  			It("should return an application with v3 specific attributes", func() {
    76  				Expect(executeErr).ToNot(HaveOccurred())
    77  				Expect(warnings).To(ConsistOf("v2-action-warnings", "v3-action-warnings"))
    78  				Expect(manifestApp).To(MatchFields(IgnoreExtras, Fields{
    79  					"Buildpack":  Equal(types.FilteredString{}),
    80  					"Buildpacks": ConsistOf("some-buildpack"),
    81  				}))
    82  			})
    83  		})
    84  
    85  		When("the v3Actor.GetApplicationByNameAndSpace fails", func() {
    86  			BeforeEach(func() {
    87  				fakeV3Actor.GetApplicationByNameAndSpaceReturns(v3action.Application{}, v3action.Warnings{"v3-action-warnings"}, errors.New("i'm a v3 error"))
    88  			})
    89  
    90  			It("it raises the error", func() {
    91  				Expect(executeErr).To(MatchError("i'm a v3 error"))
    92  				Expect(warnings).To(ConsistOf("v2-action-warnings", "v3-action-warnings"))
    93  			})
    94  		})
    95  	})
    96  
    97  	When("v2Actor.CreateManifestApplication fails", func() {
    98  		BeforeEach(func() {
    99  			fakeV2Actor.CreateApplicationManifestByNameAndSpaceReturns(manifest.Application{}, v2action.Warnings{"v2-action-warnings"}, errors.New("spaghetti"))
   100  		})
   101  
   102  		It("returns warnings and the error", func() {
   103  			Expect(executeErr).To(MatchError(errors.New("spaghetti")))
   104  			Expect(warnings).To(ConsistOf("v2-action-warnings"))
   105  		})
   106  	})
   107  })