func TestBatcher(t *testing.T) { Convey("Given I have a context", t, func() { context := rivers.NewContext() Convey("And a stream of data", func() { in, out := stream.New(3) out <- 1 out <- 2 out <- 3 close(out) Convey("When I apply the batch transformer to the stream", func() { transformer := transformers.Batch(2) transformer.Attach(context) next := transformer.Transform(in) Convey("Then a transformed stream is returned", func() { So(next.ReadAll(), ShouldResemble, []stream.T{[]stream.T{1, 2}, []stream.T{3}}) }) }) Convey("When I apply the batch by transformer to the stream", func() { transformer := transformers.BatchBy(&batch{size: 1}) transformer.Attach(context) next := transformer.Transform(in) Convey("Then a transformed stream is returned", func() { So(next.ReadAll(), ShouldResemble, []stream.T{[]stream.T{1}, []stream.T{2}, []stream.T{3}}) }) }) Convey("When I close the context", func() { context.Close(stream.Done) Convey("And I apply the transformer to the stream", func() { transformer := transformers.Flatten() transformer.Attach(context) next := transformer.Transform(in) Convey("Then no item is sent to the next stage", func() { So(next.ReadAll(), ShouldBeEmpty) }) }) }) }) }) }
func (pipeline *Pipeline) BatchBy(batch stream.Batch) *Pipeline { return pipeline.Apply(transformers.BatchBy(batch)) }