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 })