github.com/wanddynosios/cli/v8@v8.7.9-0.20240221182337-1a92e3a7017f/command/v7/buildpacks_command_test.go (about) 1 package v7_test 2 3 import ( 4 "errors" 5 6 "code.cloudfoundry.org/cli/resources" 7 "code.cloudfoundry.org/cli/types" 8 9 "code.cloudfoundry.org/cli/actor/actionerror" 10 "code.cloudfoundry.org/cli/actor/v7action" 11 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/constant" 12 "code.cloudfoundry.org/cli/command/commandfakes" 13 . "code.cloudfoundry.org/cli/command/v7" 14 "code.cloudfoundry.org/cli/command/v7/v7fakes" 15 "code.cloudfoundry.org/cli/util/configv3" 16 "code.cloudfoundry.org/cli/util/ui" 17 18 . "github.com/onsi/ginkgo" 19 . "github.com/onsi/gomega" 20 . "github.com/onsi/gomega/gbytes" 21 ) 22 23 var _ = Describe("buildpacks Command", func() { 24 var ( 25 cmd BuildpacksCommand 26 testUI *ui.UI 27 fakeConfig *commandfakes.FakeConfig 28 fakeSharedActor *commandfakes.FakeSharedActor 29 fakeActor *v7fakes.FakeActor 30 executeErr error 31 args []string 32 binaryName string 33 ) 34 35 BeforeEach(func() { 36 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 37 fakeConfig = new(commandfakes.FakeConfig) 38 fakeSharedActor = new(commandfakes.FakeSharedActor) 39 fakeActor = new(v7fakes.FakeActor) 40 args = nil 41 42 cmd = BuildpacksCommand{ 43 BaseCommand: BaseCommand{ 44 UI: testUI, 45 Config: fakeConfig, 46 SharedActor: fakeSharedActor, 47 Actor: fakeActor, 48 }, 49 } 50 51 binaryName = "faceman" 52 fakeConfig.BinaryNameReturns(binaryName) 53 }) 54 55 JustBeforeEach(func() { 56 executeErr = cmd.Execute(args) 57 }) 58 59 When("the environment is not set up correctly", func() { 60 BeforeEach(func() { 61 fakeSharedActor.CheckTargetReturns(actionerror.NotLoggedInError{BinaryName: binaryName}) 62 }) 63 64 It("returns an error", func() { 65 Expect(executeErr).To(MatchError(actionerror.NotLoggedInError{BinaryName: binaryName})) 66 67 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 68 checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0) 69 Expect(checkTargetedOrg).To(BeFalse()) 70 Expect(checkTargetedSpace).To(BeFalse()) 71 }) 72 }) 73 74 When("the environment is setup correctly", func() { 75 BeforeEach(func() { 76 fakeActor.GetCurrentUserReturns(configv3.User{Name: "apple"}, nil) 77 }) 78 79 It("should print text indicating its running", func() { 80 Expect(executeErr).NotTo(HaveOccurred()) 81 Expect(testUI.Out).To(Say(`Getting buildpacks as apple\.\.\.`)) 82 }) 83 84 When("the --labels flag is used", func() { 85 BeforeEach(func() { 86 cmd.Labels = "some-label-selector" 87 }) 88 89 It("passes the label selector to the actor", func() { 90 labelSelector := fakeActor.GetBuildpacksArgsForCall(0) 91 Expect(labelSelector).To(Equal("some-label-selector")) 92 }) 93 }) 94 95 When("getting buildpacks fails", func() { 96 BeforeEach(func() { 97 fakeActor.GetBuildpacksReturns(nil, v7action.Warnings{"some-warning-1", "some-warning-2"}, 98 errors.New("some-error")) 99 }) 100 101 It("prints warnings and returns error", func() { 102 Expect(executeErr).To(MatchError("some-error")) 103 104 Expect(testUI.Err).To(Say("some-warning-1")) 105 Expect(testUI.Err).To(Say("some-warning-2")) 106 }) 107 }) 108 109 When("getting buildpacks succeeds", func() { 110 When("buildpacks exist", func() { 111 BeforeEach(func() { 112 buildpacks := []resources.Buildpack{ 113 { 114 Name: "buildpack-1", 115 Position: types.NullInt{Value: 1, IsSet: true}, 116 Enabled: types.NullBool{Value: true, IsSet: true}, 117 Locked: types.NullBool{Value: false, IsSet: true}, 118 State: constant.BuildpackReady, 119 Filename: "buildpack-1.file", 120 Stack: "buildpack-1-stack", 121 }, 122 123 { 124 Name: "buildpack-2", 125 Position: types.NullInt{Value: 2, IsSet: true}, 126 Enabled: types.NullBool{Value: false, IsSet: true}, 127 Locked: types.NullBool{Value: true, IsSet: true}, 128 State: constant.BuildpackAwaitingUpload, 129 Filename: "buildpack-2.file", 130 Stack: "", 131 }, 132 } 133 fakeActor.GetBuildpacksReturns(buildpacks, v7action.Warnings{"some-warning-1", "some-warning-2"}, nil) 134 }) 135 It("prints a table of buildpacks", func() { 136 Expect(executeErr).NotTo(HaveOccurred()) 137 Expect(testUI.Err).To(Say("some-warning-1")) 138 Expect(testUI.Err).To(Say("some-warning-2")) 139 Expect(testUI.Out).To(Say(`position\s+name\s+stack\s+enabled\s+locked\s+state\s+filename`)) 140 Expect(testUI.Out).To(Say(`1\s+buildpack-1\s+buildpack-1-stack\s+true\s+false\s+READY\s+buildpack-1.file`)) 141 Expect(testUI.Out).To(Say(`2\s+buildpack-2\s+false\s+true\s+AWAITING_UPLOAD\s+buildpack-2.file`)) 142 }) 143 }) 144 When("there are no buildpacks", func() { 145 BeforeEach(func() { 146 buildpacks := []resources.Buildpack{} 147 fakeActor.GetBuildpacksReturns(buildpacks, v7action.Warnings{"some-warning-1", "some-warning-2"}, nil) 148 }) 149 It("prints a table of buildpacks", func() { 150 Expect(executeErr).NotTo(HaveOccurred()) 151 Expect(testUI.Err).To(Say("some-warning-1")) 152 Expect(testUI.Err).To(Say("some-warning-2")) 153 Expect(testUI.Out).To(Say("No buildpacks found")) 154 }) 155 }) 156 }) 157 }) 158 })