@@ -28,7 +28,7 @@ defmodule EventStore.Streams.AllStreamTest do
2828 end
2929
3030 describe "stream forward" do
31- setup [ :append_events_to_streams ]
31+ setup [ :append_events_to_streams , :enable_hard_deletes ]
3232
3333 test "should stream events from all streams using single event batch size" , % {
3434 conn: conn ,
@@ -94,10 +94,31 @@ defmodule EventStore.Streams.AllStreamTest do
9494 assert Enum . map ( read_events , & & 1 . event_number ) == [ 1 , 2 , 3 , 4 , 5 , 6 ]
9595 assert Enum . map ( read_events , & & 1 . stream_version ) == [ 1 , 2 , 3 , 1 , 2 , 3 ]
9696 end
97+
98+ test "should handle gaps in all stream" , % {
99+ conn: conn ,
100+ schema: schema ,
101+ serializer: serializer ,
102+ stream1_uuid: stream1_uuid
103+ } do
104+
105+ :ok = EventStore . delete_stream ( stream1_uuid , :stream_exists , :hard )
106+
107+ read_events =
108+ Stream . stream_forward ( conn , @ all_stream , 0 ,
109+ read_batch_size: 1 ,
110+ schema: schema ,
111+ serializer: serializer
112+ )
113+ |> Enum . to_list ( )
114+
115+ assert length ( read_events ) == 3
116+ assert Enum . map ( read_events , & & 1 . event_number ) == [ 4 , 5 , 6 ]
117+ end
97118 end
98119
99120 describe "stream backward" do
100- setup [ :append_events_to_streams ]
121+ setup [ :append_events_to_streams , :enable_hard_deletes ]
101122
102123 test "should stream events from all streams using single event batch size" , % {
103124 conn: conn ,
@@ -181,6 +202,27 @@ defmodule EventStore.Streams.AllStreamTest do
181202 assert Enum . map ( read_events , & & 1 . event_number ) == [ 3 , 2 , 1 ]
182203 assert Enum . map ( read_events , & & 1 . stream_version ) == [ 3 , 2 , 1 ]
183204 end
205+
206+ test "should handle gaps in all stream" , % {
207+ conn: conn ,
208+ schema: schema ,
209+ serializer: serializer ,
210+ stream2_uuid: stream2_uuid
211+ } do
212+
213+ :ok = EventStore . delete_stream ( stream2_uuid , :stream_exists , :hard )
214+
215+ read_events =
216+ Stream . stream_backward ( conn , @ all_stream , - 1 ,
217+ read_batch_size: 1 ,
218+ schema: schema ,
219+ serializer: serializer
220+ )
221+ |> Enum . to_list ( )
222+
223+ assert length ( read_events ) == 3
224+ assert Enum . map ( read_events , & & 1 . event_number ) == [ 3 , 2 , 1 ]
225+ end
184226 end
185227
186228 describe "subscribe to all streams" do
@@ -284,4 +326,15 @@ defmodule EventStore.Streams.AllStreamTest do
284326
285327 { stream_uuid , events }
286328 end
329+
330+ defp enable_hard_deletes ( _context ) do
331+ restart_event_store_with_config ( enable_hard_deletes: true )
332+ end
333+
334+ defp restart_event_store_with_config ( config ) do
335+ stop_supervised! ( TestEventStore )
336+ start_supervised! ( { TestEventStore , config } )
337+
338+ :ok
339+ end
287340end
0 commit comments