github.com/nimakaviani/cli@v6.37.1-0.20180619223813-e734901a73fa+incompatible/command/v3/v3_droplets_command_test.go (about) 1 package v3_test 2 3 import ( 4 "errors" 5 "time" 6 7 "code.cloudfoundry.org/cli/actor/actionerror" 8 "code.cloudfoundry.org/cli/actor/v3action" 9 "code.cloudfoundry.org/cli/api/cloudcontroller/ccerror" 10 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/constant" 11 "code.cloudfoundry.org/cli/api/cloudcontroller/ccversion" 12 "code.cloudfoundry.org/cli/command/commandfakes" 13 "code.cloudfoundry.org/cli/command/flag" 14 "code.cloudfoundry.org/cli/command/translatableerror" 15 "code.cloudfoundry.org/cli/command/v3" 16 "code.cloudfoundry.org/cli/command/v3/v3fakes" 17 "code.cloudfoundry.org/cli/util/configv3" 18 "code.cloudfoundry.org/cli/util/ui" 19 . "github.com/onsi/ginkgo" 20 . "github.com/onsi/gomega" 21 . "github.com/onsi/gomega/gbytes" 22 ) 23 24 var _ = Describe("v3-droplets Command", func() { 25 var ( 26 cmd v3.V3DropletsCommand 27 testUI *ui.UI 28 fakeConfig *commandfakes.FakeConfig 29 fakeSharedActor *commandfakes.FakeSharedActor 30 fakeActor *v3fakes.FakeV3DropletsActor 31 binaryName string 32 executeErr error 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(v3fakes.FakeV3DropletsActor) 40 41 binaryName = "faceman" 42 fakeConfig.BinaryNameReturns(binaryName) 43 44 cmd = v3.V3DropletsCommand{ 45 RequiredArgs: flag.AppName{AppName: "some-app"}, 46 UI: testUI, 47 Config: fakeConfig, 48 Actor: fakeActor, 49 SharedActor: fakeSharedActor, 50 } 51 52 fakeConfig.TargetedOrganizationReturns(configv3.Organization{ 53 Name: "some-org", 54 GUID: "some-org-guid", 55 }) 56 fakeConfig.TargetedSpaceReturns(configv3.Space{ 57 Name: "some-space", 58 GUID: "some-space-guid", 59 }) 60 61 fakeConfig.CurrentUserReturns(configv3.User{Name: "steve"}, nil) 62 fakeActor.CloudControllerAPIVersionReturns(ccversion.MinVersionV3) 63 }) 64 65 JustBeforeEach(func() { 66 executeErr = cmd.Execute(nil) 67 }) 68 69 Context("when the API version is below the minimum", func() { 70 BeforeEach(func() { 71 fakeActor.CloudControllerAPIVersionReturns("0.0.0") 72 }) 73 74 It("returns a MinimumAPIVersionNotMetError", func() { 75 Expect(executeErr).To(MatchError(translatableerror.MinimumAPIVersionNotMetError{ 76 CurrentVersion: "0.0.0", 77 MinimumVersion: ccversion.MinVersionV3, 78 })) 79 }) 80 81 It("displays the experimental warning", func() { 82 Expect(testUI.Err).To(Say("This command is in EXPERIMENTAL stage and may change without notice")) 83 }) 84 }) 85 86 Context("when checking target fails", func() { 87 BeforeEach(func() { 88 fakeSharedActor.CheckTargetReturns(actionerror.NoOrganizationTargetedError{BinaryName: binaryName}) 89 }) 90 91 It("returns an error", func() { 92 Expect(executeErr).To(MatchError(actionerror.NoOrganizationTargetedError{BinaryName: binaryName})) 93 94 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 95 checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0) 96 Expect(checkTargetedOrg).To(BeTrue()) 97 Expect(checkTargetedSpace).To(BeTrue()) 98 }) 99 }) 100 101 Context("when the user is not logged in", func() { 102 var expectedErr error 103 104 BeforeEach(func() { 105 expectedErr = errors.New("some current user error") 106 fakeConfig.CurrentUserReturns(configv3.User{}, expectedErr) 107 }) 108 109 It("return an error", func() { 110 Expect(executeErr).To(Equal(expectedErr)) 111 }) 112 }) 113 114 Context("when getting the application droplets returns an error", func() { 115 var expectedErr error 116 117 BeforeEach(func() { 118 expectedErr = ccerror.RequestError{} 119 fakeActor.GetApplicationDropletsReturns([]v3action.Droplet{}, v3action.Warnings{"warning-1", "warning-2"}, expectedErr) 120 }) 121 122 It("returns the error and prints warnings", func() { 123 Expect(executeErr).To(Equal(ccerror.RequestError{})) 124 125 Expect(testUI.Out).To(Say("Listing droplets of app some-app in org some-org / space some-space as steve\\.\\.\\.")) 126 127 Expect(testUI.Err).To(Say("warning-1")) 128 Expect(testUI.Err).To(Say("warning-2")) 129 }) 130 }) 131 132 Context("when getting the application droplets returns some droplets", func() { 133 var createdAtOne, createdAtTwo string 134 BeforeEach(func() { 135 createdAtOne = "2017-08-14T21:16:42Z" 136 createdAtTwo = "2017-08-16T00:18:24Z" 137 droplets := []v3action.Droplet{ 138 { 139 GUID: "some-droplet-guid-1", 140 State: constant.DropletStaged, 141 CreatedAt: createdAtOne, 142 }, 143 { 144 GUID: "some-droplet-guid-2", 145 State: constant.DropletFailed, 146 CreatedAt: createdAtTwo, 147 }, 148 } 149 fakeActor.GetApplicationDropletsReturns(droplets, v3action.Warnings{"warning-1", "warning-2"}, nil) 150 }) 151 152 It("prints the application droplets and outputs warnings", func() { 153 Expect(executeErr).ToNot(HaveOccurred()) 154 155 Expect(testUI.Out).To(Say("Listing droplets of app some-app in org some-org / space some-space as steve\\.\\.\\.\n")) 156 Expect(testUI.Out).To(Say("\n")) 157 158 createdAtOneParsed, err := time.Parse(time.RFC3339, createdAtOne) 159 Expect(err).ToNot(HaveOccurred()) 160 createdAtTwoParsed, err := time.Parse(time.RFC3339, createdAtTwo) 161 Expect(err).ToNot(HaveOccurred()) 162 163 Expect(testUI.Out).To(Say("guid\\s+state\\s+created\n")) 164 Expect(testUI.Out).To(Say("some-droplet-guid-1\\s+staged\\s+%s\n", testUI.UserFriendlyDate(createdAtOneParsed))) 165 Expect(testUI.Out).To(Say("some-droplet-guid-2\\s+failed\\s+%s\n", testUI.UserFriendlyDate(createdAtTwoParsed))) 166 167 Expect(testUI.Err).To(Say("warning-1")) 168 Expect(testUI.Err).To(Say("warning-2")) 169 170 Expect(fakeActor.GetApplicationDropletsCallCount()).To(Equal(1)) 171 appName, spaceGUID := fakeActor.GetApplicationDropletsArgsForCall(0) 172 Expect(appName).To(Equal("some-app")) 173 Expect(spaceGUID).To(Equal("some-space-guid")) 174 }) 175 }) 176 177 Context("when getting the application droplets returns no droplets", func() { 178 BeforeEach(func() { 179 fakeActor.GetApplicationDropletsReturns([]v3action.Droplet{}, v3action.Warnings{"warning-1", "warning-2"}, nil) 180 }) 181 182 It("displays there are no droplets", func() { 183 Expect(executeErr).ToNot(HaveOccurred()) 184 185 Expect(testUI.Out).To(Say("Listing droplets of app some-app in org some-org / space some-space as steve\\.\\.\\.")) 186 Expect(testUI.Out).To(Say("No droplets found")) 187 188 Expect(testUI.Err).To(Say("warning-1")) 189 Expect(testUI.Err).To(Say("warning-2")) 190 }) 191 }) 192 })