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