github.com/liamawhite/cli-with-i18n@v6.32.1-0.20171122084555-dede0a5c3448+incompatible/actor/v3action/instance_test.go (about)

     1  package v3action_test
     2  
     3  import (
     4  	"errors"
     5  	"net/url"
     6  	"time"
     7  
     8  	. "github.com/liamawhite/cli-with-i18n/actor/v3action"
     9  	"github.com/liamawhite/cli-with-i18n/actor/v3action/v3actionfakes"
    10  	"github.com/liamawhite/cli-with-i18n/api/cloudcontroller/ccerror"
    11  	"github.com/liamawhite/cli-with-i18n/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  })