Exemplo n.º 1
0
		})

		It("does not emit any more messages", func() {
			Consistently(emitter.EmitCallCount).Should(Equal(1))
		})
	})

	Context("when the event source returns an error", func() {
		var subscribeErr error

		BeforeEach(func() {
			subscribeErr = errors.New("subscribe-error")

			bbsClient.SubscribeToEventsStub = func() (events.EventSource, error) {
				if bbsClient.SubscribeToEventsCallCount() == 1 {
					return eventSource, nil
				}
				return nil, subscribeErr
			}

			eventSource.NextStub = func() (models.Event, error) {
				return nil, errors.New("next-error")
			}
		})

		JustBeforeEach(func() {
			syncEvents.Sync <- struct{}{}
		})

		It("re-subscribes", func() {
			Eventually(bbsClient.SubscribeToEventsCallCount, 2*time.Second).Should(BeNumerically(">", 5))
		})
			})

			It("returns an internal server error", func() {
				response := &http.Response{}
				Eventually(responseChan).Should(Receive(&response))
				Expect(response.StatusCode).To(Equal(http.StatusInternalServerError))
			})
		})

		Context("when connection is closed before subscription is complete", func() {
			var subscribe chan bool

			BeforeEach(func() {
				subscribe = make(chan bool)
				fakeBBS.SubscribeToEventsStub = func() (events.EventSource, error) {
					<-subscribe
					return nil, errors.New("broken")
				}
			})

			It("returns an internal server error", func() {
				Eventually(fakeBBS.SubscribeToEventsCallCount).Should(Equal(1))
				http.DefaultTransport.(*http.Transport).CancelRequest(request)

				// should not timeout
				server.Close()
				Eventually(responseChan).Should(Receive())
			})
		})

		Context("when successfully subscribing to the event stream", func() {
			var eventSource *eventfakes.FakeEventSource