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

     1  package v2action_test
     2  
     3  import (
     4  	"errors"
     5  
     6  	. "github.com/liamawhite/cli-with-i18n/actor/v2action"
     7  	"github.com/liamawhite/cli-with-i18n/actor/v2action/v2actionfakes"
     8  	"github.com/liamawhite/cli-with-i18n/api/cloudcontroller/ccerror"
     9  	"github.com/liamawhite/cli-with-i18n/api/cloudcontroller/ccv2"
    10  	. "github.com/onsi/ginkgo"
    11  	. "github.com/onsi/gomega"
    12  )
    13  
    14  var _ = Describe("Application Instance Actions", func() {
    15  	var (
    16  		actor                     *Actor
    17  		fakeCloudControllerClient *v2actionfakes.FakeCloudControllerClient
    18  	)
    19  
    20  	BeforeEach(func() {
    21  		fakeCloudControllerClient = new(v2actionfakes.FakeCloudControllerClient)
    22  		actor = NewActor(fakeCloudControllerClient, nil, nil)
    23  	})
    24  
    25  	Describe("ApplicationInstance", func() {
    26  		var instance ApplicationInstance
    27  
    28  		BeforeEach(func() {
    29  			instance = ApplicationInstance{}
    30  		})
    31  
    32  		Describe("Crashed", func() {
    33  			Context("instance is crashed", func() {
    34  				It("returns true", func() {
    35  					instance.State = ccv2.ApplicationInstanceCrashed
    36  					Expect(instance.Crashed()).To(BeTrue())
    37  				})
    38  			})
    39  
    40  			Context("instance is *not* crashed", func() {
    41  				It("returns false", func() {
    42  					instance.State = ccv2.ApplicationInstanceRunning
    43  					Expect(instance.Crashed()).To(BeFalse())
    44  				})
    45  			})
    46  		})
    47  
    48  		Describe("Flapping", func() {
    49  			Context("instance is flapping", func() {
    50  				It("returns true", func() {
    51  					instance.State = ccv2.ApplicationInstanceFlapping
    52  					Expect(instance.Flapping()).To(BeTrue())
    53  				})
    54  			})
    55  
    56  			Context("instance is *not* flapping", func() {
    57  				It("returns false", func() {
    58  					instance.State = ccv2.ApplicationInstanceCrashed
    59  					Expect(instance.Flapping()).To(BeFalse())
    60  				})
    61  			})
    62  		})
    63  
    64  		Describe("Running", func() {
    65  			Context("instance is running", func() {
    66  				It("returns true", func() {
    67  					instance.State = ccv2.ApplicationInstanceRunning
    68  					Expect(instance.Running()).To(BeTrue())
    69  				})
    70  			})
    71  
    72  			Context("instance is *not* running", func() {
    73  				It("returns false", func() {
    74  					instance.State = ccv2.ApplicationInstanceCrashed
    75  					Expect(instance.Running()).To(BeFalse())
    76  				})
    77  			})
    78  		})
    79  	})
    80  
    81  	Describe("GetApplicationInstancesByApplication", func() {
    82  		Context("when the application exists", func() {
    83  			BeforeEach(func() {
    84  				fakeCloudControllerClient.GetApplicationInstancesByApplicationReturns(
    85  					map[int]ccv2.ApplicationInstance{
    86  						0: {ID: 0, Details: "hello", Since: 1485985587.12345, State: ccv2.ApplicationInstanceRunning},
    87  						1: {ID: 1, Details: "hi", Since: 1485985587.567},
    88  					},
    89  					ccv2.Warnings{"instance-warning-1", "instance-warning-2"},
    90  					nil)
    91  			})
    92  
    93  			It("returns the application instances and all warnings", func() {
    94  				instances, warnings, err := actor.GetApplicationInstancesByApplication("some-app-guid")
    95  				Expect(err).ToNot(HaveOccurred())
    96  				Expect(instances).To(ConsistOf(
    97  					ApplicationInstance{
    98  						ID:      0,
    99  						Details: "hello",
   100  						Since:   1485985587.12345,
   101  						State:   ccv2.ApplicationInstanceRunning,
   102  					},
   103  					ApplicationInstance{
   104  						ID:      1,
   105  						Details: "hi",
   106  						Since:   1485985587.567,
   107  					},
   108  				))
   109  				Expect(warnings).To(ConsistOf("instance-warning-1", "instance-warning-2"))
   110  
   111  				Expect(fakeCloudControllerClient.GetApplicationInstancesByApplicationCallCount()).To(Equal(1))
   112  				Expect(fakeCloudControllerClient.GetApplicationInstancesByApplicationArgsForCall(0)).To(Equal("some-app-guid"))
   113  			})
   114  		})
   115  
   116  		Context("when an error is encountered", func() {
   117  			var expectedErr error
   118  
   119  			BeforeEach(func() {
   120  				expectedErr = errors.New("banana")
   121  				fakeCloudControllerClient.GetApplicationInstancesByApplicationReturns(
   122  					nil,
   123  					ccv2.Warnings{"instances-warning"},
   124  					expectedErr)
   125  			})
   126  
   127  			It("returns the error and all warnings", func() {
   128  				_, warnings, err := actor.GetApplicationInstancesByApplication("some-app-guid")
   129  				Expect(err).To(MatchError(expectedErr))
   130  				Expect(warnings).To(ConsistOf("instances-warning"))
   131  			})
   132  
   133  			Context("when the application does not exist", func() {
   134  				BeforeEach(func() {
   135  					fakeCloudControllerClient.GetApplicationInstancesByApplicationReturns(
   136  						nil,
   137  						nil,
   138  						ccerror.ResourceNotFoundError{})
   139  				})
   140  
   141  				It("returns an ApplicationInstancesNotFoundError", func() {
   142  					_, _, err := actor.GetApplicationInstancesByApplication("some-app-guid")
   143  					Expect(err).To(MatchError(ApplicationInstancesNotFoundError{ApplicationGUID: "some-app-guid"}))
   144  				})
   145  			})
   146  
   147  			Context("when the app has not been staged yet", func() {
   148  				Context("when getting instances returns a CF-NotStaged error", func() {
   149  					BeforeEach(func() {
   150  						fakeCloudControllerClient.GetApplicationInstancesByApplicationReturns(
   151  							nil,
   152  							nil,
   153  							ccerror.NotStagedError{})
   154  					})
   155  
   156  					It("returns an ApplicationInstancesNotFoundError", func() {
   157  						_, _, err := actor.GetApplicationInstancesByApplication("some-app-guid")
   158  						Expect(err).To(MatchError(ApplicationInstancesNotFoundError{ApplicationGUID: "some-app-guid"}))
   159  					})
   160  				})
   161  			})
   162  
   163  			Context("when getting instances returns a CF-InstancesError", func() {
   164  				BeforeEach(func() {
   165  					fakeCloudControllerClient.GetApplicationInstancesByApplicationReturns(
   166  						nil,
   167  						nil,
   168  						ccerror.InstancesError{})
   169  				})
   170  
   171  				It("returns an ApplicationInstancesNotFoundError", func() {
   172  					_, _, err := actor.GetApplicationInstancesByApplication("some-app-guid")
   173  					Expect(err).To(MatchError(ApplicationInstancesNotFoundError{ApplicationGUID: "some-app-guid"}))
   174  				})
   175  			})
   176  		})
   177  	})
   178  })