github.com/ablease/cli@v6.37.1-0.20180613014814-3adbb7d7fb19+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 Context("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 Context("when the cc returns an invalid semver", func() { 63 BeforeEach(func() { 64 fakeV3Actor.CloudControllerAPIVersionReturns("i am invalid") 65 }) 66 67 It("returns a semver error", func() { 68 Expect(executeErr).To(MatchError("No Major.Minor.Patch elements found")) 69 Expect(warnings).To(ConsistOf("v2-action-warnings")) 70 }) 71 72 }) 73 74 Context("when the cc has a v3 buildpacks endpoint ( >= v3.25)", func() { 75 BeforeEach(func() { 76 fakeV3Actor.CloudControllerAPIVersionReturns("3.25.0") 77 }) 78 79 It("Calls the v3actor.GetApplicationByNameAndSpace with the appName and appSpace", func() { 80 Expect(fakeV3Actor.GetApplicationByNameAndSpaceCallCount()).To(Equal(1)) 81 appNameArg, appSpaceArg := fakeV3Actor.GetApplicationByNameAndSpaceArgsForCall(0) 82 Expect(appNameArg).To(Equal(appName)) 83 Expect(appSpaceArg).To(Equal(appSpace)) 84 }) 85 86 Context("when the v3Actor.GetApplicationByNameAndSpace succeeds", func() { 87 BeforeEach(func() { 88 v3Application := v3action.Application{LifecycleBuildpacks: []string{"some-buildpack"}} 89 fakeV3Actor.GetApplicationByNameAndSpaceReturns(v3Application, v3action.Warnings{"v3-action-warnings"}, nil) 90 }) 91 92 It("should return an application with v3 specific attributes", func() { 93 Expect(executeErr).ToNot(HaveOccurred()) 94 Expect(warnings).To(ConsistOf("v2-action-warnings", "v3-action-warnings")) 95 Expect(manifestApp).To(MatchFields(IgnoreExtras, Fields{ 96 "Buildpack": Equal(types.FilteredString{}), 97 "Buildpacks": ConsistOf("some-buildpack"), 98 })) 99 }) 100 }) 101 102 Context("when the v3Actor.GetApplicationByNameAndSpace fails", func() { 103 BeforeEach(func() { 104 fakeV3Actor.GetApplicationByNameAndSpaceReturns(v3action.Application{}, v3action.Warnings{"v3-action-warnings"}, errors.New("i'm a v3 error")) 105 }) 106 107 It("it raises the error", func() { 108 Expect(executeErr).To(MatchError("i'm a v3 error")) 109 Expect(warnings).To(ConsistOf("v2-action-warnings", "v3-action-warnings")) 110 }) 111 }) 112 }) 113 114 Context("when the cc does not have a v3 buildpacks endpoint ( < v3.25)", func() { 115 BeforeEach(func() { 116 fakeV3Actor.CloudControllerAPIVersionReturns("3.24.0") 117 }) 118 119 It("does not call the v3actor.GetApplicationByNameAndSpace", func() { 120 Expect(fakeV3Actor.GetApplicationByNameAndSpaceCallCount()).To(Equal(0)) 121 }) 122 123 It("returns the v2 only version of a manifest application", func() { 124 Expect(executeErr).ToNot(HaveOccurred()) 125 Expect(warnings).To(ConsistOf("v2-action-warnings")) 126 Expect(manifestApp).To(MatchFields(IgnoreExtras, Fields{ 127 "Buildpack": Equal(types.FilteredString{}), 128 "Buildpacks": ConsistOf("some-buildpack"), 129 })) 130 }) 131 }) 132 }) 133 134 Context("when v2Actor.CreateManifestApplication fails", func() { 135 BeforeEach(func() { 136 fakeV2Actor.CreateApplicationManifestByNameAndSpaceReturns(manifest.Application{}, v2action.Warnings{"v2-action-warnings"}, errors.New("spaghetti")) 137 }) 138 139 It("returns warnings and the error", func() { 140 Expect(executeErr).To(MatchError(errors.New("spaghetti"))) 141 Expect(warnings).To(ConsistOf("v2-action-warnings")) 142 }) 143 }) 144 })