github.com/nimakaviani/cli@v6.37.1-0.20180619223813-e734901a73fa+incompatible/actor/v3action/process_instance_test.go (about)

     1  package v3action_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/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(fakeCloudControllerClient, nil, nil, nil)
    25  	})
    26  
    27  	Describe("Instance", func() {
    28  		Describe("StartTime", func() {
    29  			It("returns the time that the instance started", func() {
    30  				instance := ProcessInstance{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(actionerror.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(actionerror.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  					Expect(fakeCloudControllerClient.GetApplicationsArgsForCall(0)).To(ConsistOf(
   106  						ccv3.Query{Key: ccv3.NameFilter, Values: []string{"some-app-name"}},
   107  						ccv3.Query{Key: ccv3.SpaceGUIDFilter, Values: []string{"some-space-guid"}},
   108  					))
   109  
   110  					Expect(fakeCloudControllerClient.DeleteApplicationProcessInstanceCallCount()).To(Equal(1))
   111  					appGUID, processType, instanceIndex := fakeCloudControllerClient.DeleteApplicationProcessInstanceArgsForCall(0)
   112  					Expect(appGUID).To(Equal("some-app-guid"))
   113  					Expect(processType).To(Equal("some-process-type"))
   114  					Expect(instanceIndex).To(Equal(666))
   115  				})
   116  			})
   117  		})
   118  	})
   119  })