@@ -2,6 +2,7 @@ package eventsource
22
33import (
44 "io"
5+ "net/http"
56 "strings"
67 "testing"
78
@@ -57,6 +58,13 @@ func requireLastEventID(t *testing.T, event Event) string {
5758 return eventWithID .LastEventID ()
5859}
5960
61+ func requireHeaders (t * testing.T , event Event ) http.Header {
62+ // necessary because we can't yet add Headers to the basic Event interface; see EventWithHeaders
63+ eventWithHeaders , ok := event .(EventWithHeaders )
64+ require .True (t , ok , "event should have implemented EventWithHeaders" )
65+ return eventWithHeaders .Headers ()
66+ }
67+
6068func TestDecoderTracksLastEventID (t * testing.T ) {
6169 t .Run ("uses last ID that is passed in options" , func (t * testing.T ) {
6270 inputData := "data: abc\n \n "
@@ -96,8 +104,8 @@ func TestDecoderTracksLastEventID(t *testing.T) {
96104 assert .Equal (t , "def" , requireLastEventID (t , event3 ))
97105 })
98106
99- t .Run ("last ID persists if not overridden" , func (t * testing.T ) {
100- inputData := "id: abc\n data: first\n \n data: second \n \ n id: def \n data:third \n \n "
107+ t .Run ("last ID can be overridden with empty string " , func (t * testing.T ) {
108+ inputData := "id: abc\n data: first\n \n id: \n data: second \n \n "
101109 decoder := NewDecoderWithOptions (strings .NewReader (inputData ), DecoderOptionLastEventID ("my-id" ))
102110
103111 event1 , err := decoder .Decode ()
@@ -112,32 +120,57 @@ func TestDecoderTracksLastEventID(t *testing.T) {
112120
113121 assert .Equal (t , "second" , event2 .Data ())
114122 assert .Equal (t , "" , event2 .Id ())
115- assert .Equal (t , "abc" , requireLastEventID (t , event2 ))
123+ assert .Equal (t , "" , requireLastEventID (t , event2 ))
124+ })
125+ }
116126
117- event3 , err := decoder .Decode ()
127+ func TestDecoderTracksHeaders (t * testing.T ) {
128+ t .Run ("event headers is nil if not provided in options" , func (t * testing.T ) {
129+ inputData := "data: abc\n \n "
130+
131+ decoder := NewDecoderWithOptions (strings .NewReader (inputData ))
132+
133+ event , err := decoder .Decode ()
118134 require .NoError (t , err )
119135
120- assert .Equal (t , "third " , event3 .Data ())
121- assert .Equal (t , "def " , event3 .Id ())
122- assert .Equal (t , "def" , requireLastEventID (t , event3 ))
136+ assert .Equal (t , "abc " , event .Data ())
137+ assert .Equal (t , "" , event .Id ())
138+ assert .Nil (t , requireHeaders (t , event ))
123139 })
124140
125- t .Run ("last ID can be overridden with empty string" , func (t * testing.T ) {
126- inputData := "id: abc\n data: first\n \n id: \n data: second\n \n "
127- decoder := NewDecoderWithOptions (strings .NewReader (inputData ), DecoderOptionLastEventID ("my-id" ))
141+ t .Run ("uses headers that are passed in options" , func (t * testing.T ) {
142+ inputData := "data: abc\n \n "
143+ headers := http.Header {
144+ "X-Ld-Envid" : {"env-id" },
145+ }
128146
129- event1 , err := decoder .Decode ()
147+ decoder := NewDecoderWithOptions (strings .NewReader (inputData ), DecoderOptionHeaders (headers ))
148+
149+ event , err := decoder .Decode ()
130150 require .NoError (t , err )
131151
132- assert .Equal (t , "first" , event1 .Data ())
133- assert .Equal (t , "abc" , event1 .Id ())
134- assert .Equal (t , "abc" , requireLastEventID (t , event1 ))
152+ assert .Equal (t , "abc" , event .Data ())
153+ assert .Equal (t , "" , event .Id ())
154+ assert .Equal (t , headers , requireHeaders (t , event ))
155+ })
135156
136- event2 , err := decoder .Decode ()
157+ t .Run ("event headers are immutable" , func (t * testing.T ) {
158+ inputData := "data: abc\n \n "
159+ headers := http.Header {
160+ "X-Ld-Envid" : {"env-id" },
161+ }
162+
163+ decoder := NewDecoderWithOptions (strings .NewReader (inputData ), DecoderOptionHeaders (headers ))
164+
165+ event , err := decoder .Decode ()
137166 require .NoError (t , err )
138167
139- assert .Equal (t , "second" , event2 .Data ())
140- assert .Equal (t , "" , event2 .Id ())
141- assert .Equal (t , "" , requireLastEventID (t , event2 ))
168+ eventHeaders := requireHeaders (t , event )
169+ assert .Equal (t , "abc" , event .Data ())
170+ assert .Equal (t , "" , event .Id ())
171+ assert .Equal (t , headers , eventHeaders )
172+
173+ eventHeaders .Add ("New-Header" , "new-value" )
174+ assert .NotContains (t , headers , "New-Header" )
142175 })
143176}
0 commit comments