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 })