github.com/randomtask1155/cli@v6.41.1-0.20181227003417-a98eed78cbde+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/api/cloudcontroller/ccversion"
    15  	"code.cloudfoundry.org/cli/types"
    16  	"code.cloudfoundry.org/cli/util/manifest"
    17  )
    18  
    19  var _ = Describe("Manifest", func() {
    20  	var (
    21  		actor       *Actor
    22  		fakeV2Actor *v2v3actionfakes.FakeV2Actor
    23  		fakeV3Actor *v2v3actionfakes.FakeV3Actor
    24  
    25  		appName  string
    26  		appSpace string
    27  
    28  		manifestApp manifest.Application
    29  		warnings    Warnings
    30  		executeErr  error
    31  	)
    32  
    33  	BeforeEach(func() {
    34  		fakeV2Actor = new(v2v3actionfakes.FakeV2Actor)
    35  		fakeV3Actor = new(v2v3actionfakes.FakeV3Actor)
    36  
    37  		actor = NewActor(fakeV2Actor, fakeV3Actor)
    38  
    39  		appName = "some-app-name"
    40  		appSpace = "some-space-GUID"
    41  	})
    42  
    43  	JustBeforeEach(func() {
    44  		manifestApp, warnings, executeErr = actor.CreateApplicationManifestByNameAndSpace(appName, appSpace)
    45  	})
    46  
    47  	It("calls v2Actor.CreateManifestApplication with the appName and appSpace", func() {
    48  		Expect(fakeV2Actor.CreateApplicationManifestByNameAndSpaceCallCount()).To(Equal(1))
    49  		appNameArg, appSpaceArg := fakeV2Actor.CreateApplicationManifestByNameAndSpaceArgsForCall(0)
    50  		Expect(appNameArg).To(Equal(appName))
    51  		Expect(appSpaceArg).To(Equal(appSpace))
    52  	})
    53  
    54  	When("v2Actor.CreateManifestApplication succeeds", func() {
    55  		BeforeEach(func() {
    56  			v2Application := manifest.Application{
    57  				Buildpacks: []string{"some-buildpack"},
    58  			}
    59  
    60  			fakeV2Actor.CreateApplicationManifestByNameAndSpaceReturns(v2Application, v2action.Warnings{"v2-action-warnings"}, nil)
    61  		})
    62  
    63  		When("the cc returns an invalid semver", func() {
    64  			BeforeEach(func() {
    65  				fakeV3Actor.CloudControllerAPIVersionReturns("i am invalid")
    66  			})
    67  
    68  			It("returns a semver error", func() {
    69  				Expect(executeErr).To(MatchError("No Major.Minor.Patch elements found"))
    70  				Expect(warnings).To(ConsistOf("v2-action-warnings"))
    71  			})
    72  
    73  		})
    74  
    75  		When("the cc has a v3 buildpacks endpoint ( >= v3.25)", func() {
    76  			BeforeEach(func() {
    77  				fakeV3Actor.CloudControllerAPIVersionReturns(ccversion.MinVersionManifestBuildpacksV3)
    78  			})
    79  
    80  			It("Calls the v3actor.GetApplicationByNameAndSpace with the appName and appSpace", func() {
    81  				Expect(fakeV3Actor.GetApplicationByNameAndSpaceCallCount()).To(Equal(1))
    82  				appNameArg, appSpaceArg := fakeV3Actor.GetApplicationByNameAndSpaceArgsForCall(0)
    83  				Expect(appNameArg).To(Equal(appName))
    84  				Expect(appSpaceArg).To(Equal(appSpace))
    85  			})
    86  
    87  			When("the v3Actor.GetApplicationByNameAndSpace succeeds", func() {
    88  				BeforeEach(func() {
    89  					v3Application := v3action.Application{LifecycleBuildpacks: []string{"some-buildpack"}}
    90  					fakeV3Actor.GetApplicationByNameAndSpaceReturns(v3Application, v3action.Warnings{"v3-action-warnings"}, nil)
    91  				})
    92  
    93  				It("should return an application with v3 specific attributes", func() {
    94  					Expect(executeErr).ToNot(HaveOccurred())
    95  					Expect(warnings).To(ConsistOf("v2-action-warnings", "v3-action-warnings"))
    96  					Expect(manifestApp).To(MatchFields(IgnoreExtras, Fields{
    97  						"Buildpack":  Equal(types.FilteredString{}),
    98  						"Buildpacks": ConsistOf("some-buildpack"),
    99  					}))
   100  				})
   101  			})
   102  
   103  			When("the v3Actor.GetApplicationByNameAndSpace fails", func() {
   104  				BeforeEach(func() {
   105  					fakeV3Actor.GetApplicationByNameAndSpaceReturns(v3action.Application{}, v3action.Warnings{"v3-action-warnings"}, errors.New("i'm a v3 error"))
   106  				})
   107  
   108  				It("it raises the error", func() {
   109  					Expect(executeErr).To(MatchError("i'm a v3 error"))
   110  					Expect(warnings).To(ConsistOf("v2-action-warnings", "v3-action-warnings"))
   111  				})
   112  			})
   113  		})
   114  
   115  		When("the cc does not have a v3 buildpacks endpoint ( < v3.25)", func() {
   116  			BeforeEach(func() {
   117  				fakeV3Actor.CloudControllerAPIVersionReturns(ccversion.MinV3ClientVersion)
   118  			})
   119  
   120  			It("does not call the v3actor.GetApplicationByNameAndSpace", func() {
   121  				Expect(fakeV3Actor.GetApplicationByNameAndSpaceCallCount()).To(Equal(0))
   122  			})
   123  
   124  			It("returns the v2 only version of a manifest application", func() {
   125  				Expect(executeErr).ToNot(HaveOccurred())
   126  				Expect(warnings).To(ConsistOf("v2-action-warnings"))
   127  				Expect(manifestApp).To(MatchFields(IgnoreExtras, Fields{
   128  					"Buildpack":  Equal(types.FilteredString{}),
   129  					"Buildpacks": ConsistOf("some-buildpack"),
   130  				}))
   131  			})
   132  		})
   133  	})
   134  
   135  	When("v2Actor.CreateManifestApplication fails", func() {
   136  		BeforeEach(func() {
   137  			fakeV2Actor.CreateApplicationManifestByNameAndSpaceReturns(manifest.Application{}, v2action.Warnings{"v2-action-warnings"}, errors.New("spaghetti"))
   138  		})
   139  
   140  		It("returns warnings and the error", func() {
   141  			Expect(executeErr).To(MatchError(errors.New("spaghetti")))
   142  			Expect(warnings).To(ConsistOf("v2-action-warnings"))
   143  		})
   144  	})
   145  })