github.com/cloudfoundry-attic/cli-with-i18n@v6.32.1-0.20171002233121-7401370d3b85+incompatible/actor/v3action/instance_test.go (about) 1 package v3action_test 2 3 import ( 4 "errors" 5 "net/url" 6 "time" 7 8 . "code.cloudfoundry.org/cli/actor/v3action" 9 "code.cloudfoundry.org/cli/actor/v3action/v3actionfakes" 10 "code.cloudfoundry.org/cli/api/cloudcontroller/ccerror" 11 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3" 12 . "github.com/onsi/ginkgo" 13 . "github.com/onsi/gomega" 14 ) 15 16 var _ = Describe("instance actions", func() { 17 var ( 18 actor *Actor 19 fakeCloudControllerClient *v3actionfakes.FakeCloudControllerClient 20 ) 21 22 BeforeEach(func() { 23 fakeCloudControllerClient = new(v3actionfakes.FakeCloudControllerClient) 24 actor = NewActor(nil, fakeCloudControllerClient, nil) 25 }) 26 27 Describe("Instance", func() { 28 Describe("StartTime", func() { 29 It("returns the time that the instance started", func() { 30 instance := Instance{Uptime: 86400} 31 Expect(instance.StartTime()).To(BeTemporally("~", time.Now().Add(-24*time.Hour), 10*time.Second)) 32 }) 33 }) 34 }) 35 36 Describe("DeleteInstanceByApplicationNameSpaceProcessTypeAndIndex", func() { 37 var ( 38 executeErr error 39 warnings Warnings 40 ) 41 42 JustBeforeEach(func() { 43 warnings, executeErr = actor.DeleteInstanceByApplicationNameSpaceProcessTypeAndIndex("some-app-name", "some-space-guid", "some-process-type", 666) 44 }) 45 46 Context("when getting the application returns an error", func() { 47 BeforeEach(func() { 48 fakeCloudControllerClient.GetApplicationsReturns([]ccv3.Application{}, ccv3.Warnings{"some-get-app-warning"}, errors.New("some-get-app-error")) 49 }) 50 51 It("returns all warnings and the error", func() { 52 Expect(executeErr).To(MatchError("some-get-app-error")) 53 Expect(warnings).To(ConsistOf("some-get-app-warning")) 54 }) 55 }) 56 57 Context("when getting the application succeeds", func() { 58 BeforeEach(func() { 59 fakeCloudControllerClient.GetApplicationsReturns([]ccv3.Application{{GUID: "some-app-guid"}}, ccv3.Warnings{"some-get-app-warning"}, nil) 60 }) 61 62 Context("when deleting the instance returns ProcessNotFoundError", func() { 63 BeforeEach(func() { 64 fakeCloudControllerClient.DeleteApplicationProcessInstanceReturns(ccv3.Warnings{"some-delete-warning"}, ccerror.ProcessNotFoundError{}) 65 }) 66 67 It("returns all warnings and the ProcessNotFoundError error", func() { 68 Expect(executeErr).To(Equal(ProcessNotFoundError{ProcessType: "some-process-type"})) 69 Expect(warnings).To(ConsistOf("some-get-app-warning", "some-delete-warning")) 70 }) 71 }) 72 73 Context("when deleting the instance returns InstanceNotFoundError", func() { 74 BeforeEach(func() { 75 fakeCloudControllerClient.DeleteApplicationProcessInstanceReturns(ccv3.Warnings{"some-delete-warning"}, ccerror.InstanceNotFoundError{}) 76 }) 77 78 It("returns all warnings and the ProcessInstanceNotFoundError error", func() { 79 Expect(executeErr).To(Equal(ProcessInstanceNotFoundError{ProcessType: "some-process-type", InstanceIndex: 666})) 80 Expect(warnings).To(ConsistOf("some-get-app-warning", "some-delete-warning")) 81 }) 82 }) 83 84 Context("when deleting the instance returns other error", func() { 85 BeforeEach(func() { 86 fakeCloudControllerClient.DeleteApplicationProcessInstanceReturns(ccv3.Warnings{"some-delete-warning"}, errors.New("some-delete-error")) 87 }) 88 89 It("returns all warnings and the error", func() { 90 Expect(executeErr).To(MatchError("some-delete-error")) 91 Expect(warnings).To(ConsistOf("some-get-app-warning", "some-delete-warning")) 92 }) 93 }) 94 95 Context("when deleting the instance succeeds", func() { 96 BeforeEach(func() { 97 fakeCloudControllerClient.DeleteApplicationProcessInstanceReturns(ccv3.Warnings{"some-delete-warning"}, nil) 98 }) 99 100 It("returns all warnings and no error", func() { 101 Expect(executeErr).ToNot(HaveOccurred()) 102 Expect(warnings).To(ConsistOf("some-get-app-warning", "some-delete-warning")) 103 104 Expect(fakeCloudControllerClient.GetApplicationsCallCount()).To(Equal(1)) 105 expectedQuery := url.Values{ 106 "names": []string{"some-app-name"}, 107 "space_guids": []string{"some-space-guid"}, 108 } 109 query := fakeCloudControllerClient.GetApplicationsArgsForCall(0) 110 Expect(query).To(Equal(expectedQuery)) 111 112 Expect(fakeCloudControllerClient.DeleteApplicationProcessInstanceCallCount()).To(Equal(1)) 113 appGUID, processType, instanceIndex := fakeCloudControllerClient.DeleteApplicationProcessInstanceArgsForCall(0) 114 Expect(appGUID).To(Equal("some-app-guid")) 115 Expect(processType).To(Equal("some-process-type")) 116 Expect(instanceIndex).To(Equal(666)) 117 }) 118 }) 119 }) 120 }) 121 })