Context("when the user has incorrect scopes", func() {
			BeforeEach(func() {
				token.DecodeTokenReturns(errors.New("Not valid"))
			})

			It("returns an Unauthorized status code", func() {
				Expect(response.StatusCode).To(Equal(http.StatusUnauthorized))
			})
		})

		Context("when the user has route.admin scope", func() {
			BeforeEach(func() {
				resultsChan := make(chan storeadapter.WatchEvent, 1)
				storeNode := storeadapter.StoreNode{Value: []byte("valuable-string")}
				resultsChan <- storeadapter.WatchEvent{Type: storeadapter.UpdateEvent, Node: &storeNode}
				database.WatchRouteChangesReturns(resultsChan, nil, nil)
			})

			It("emits events from changes in the db", func() {
				reader := sse.NewReadCloser(response.Body)

				event, err := reader.Next()
				Expect(err).NotTo(HaveOccurred())

				expectedEvent := sse.Event{ID: "0", Name: "Upsert", Data: []byte("valuable-string")}

				Expect(event).To(Equal(expectedEvent))
			})

			It("sets the content-type to text/event-stream", func() {
				Expect(response.Header.Get("Content-Type")).Should(Equal("text/event-stream; charset=utf-8"))
		Context("when the user has incorrect scopes", func() {
			BeforeEach(func() {
				token.DecodeTokenReturns(errors.New("Not valid"))
			})

			It("returns an Unauthorized status code", func() {
				Expect(response.StatusCode).To(Equal(http.StatusUnauthorized))
			})
		})

		Context("when the user has route.admin scope", func() {
			BeforeEach(func() {
				resultsChan := make(chan storeadapter.WatchEvent, 1)
				storeNode := storeadapter.StoreNode{Value: []byte("valuable-string")}
				resultsChan <- storeadapter.WatchEvent{Type: storeadapter.UpdateEvent, Node: &storeNode}
				database.WatchRouteChangesReturns(resultsChan, nil, nil)
			})

			It("emits events from changes in the db", func() {
				reader := sse.NewReadCloser(response.Body)

				event, err := reader.Next()
				Expect(err).NotTo(HaveOccurred())

				expectedEvent := sse.Event{ID: "0", Name: "Upsert", Data: []byte("valuable-string")}

				Expect(event).To(Equal(expectedEvent))
			})

			It("sets the content-type to text/event-stream", func() {
				Expect(response.Header.Get("Content-Type")).Should(Equal("text/event-stream; charset=utf-8"))
	var (
		handler    handlers.EventStreamHandler
		database   *fake_db.FakeDB
		logger     *lagertest.TestLogger
		fakeClient *fake_client.FakeClient
		server     *httptest.Server
		stats      *fake_statsd.FakePartialStatsdClient
	)

	var emptyCancelFunc = func() {}

	BeforeEach(func() {
		fakeClient = &fake_client.FakeClient{}

		database = &fake_db.FakeDB{}
		database.WatchRouteChangesReturns(nil, nil, emptyCancelFunc)

		logger = lagertest.NewTestLogger("event-handler-test")
		stats = new(fake_statsd.FakePartialStatsdClient)
		handler = *handlers.NewEventStreamHandler(fakeClient, database, logger, stats)
	})

	AfterEach(func(done Done) {
		if server != nil {
			go func() {
				server.CloseClientConnections()
				server.Close()
				close(done)
			}()
		} else {
			close(done)