public async Task SingleInsertAndFind_TestAsync()
        {
            var streamEvent = FakeInstanceUtils.GenerateRandomStreamEvent();

            await mongo.InsertEventAsync(new WebSocketStream(streamEvent, "tests"));

            var events = await mongo.FindEventsByFiltersAsync(Builders <WebSocketStream> .Filter.Eq(x => x.StreamEvent.Payload.Id, streamEvent.Payload.Id));

            Assert.Single(events);
            var singleEvent = events.First();

            Assert.IsType <WebSocketStream>(singleEvent);
            Assert.IsType <StreamEvent>(singleEvent.StreamEvent);
            Assert.IsType <Payload>(singleEvent.StreamEvent.Payload);

            Assert.IsAssignableFrom <IStreamEvent>(singleEvent.StreamEvent);
            Assert.IsAssignableFrom <IPayload>(singleEvent.StreamEvent.Payload);

            Assert.Equal(streamEvent.Event, singleEvent.StreamEvent.Event);
            Assert.Null(singleEvent.StreamEvent.JoinRef);
            Assert.Null(singleEvent.StreamEvent.Ref);
            Assert.Equal(streamEvent.Topic, singleEvent.StreamEvent.Topic);

            Assert.Equal(streamEvent.Payload.Timestamp, singleEvent.StreamEvent.Payload.Timestamp);
            Assert.Equal(streamEvent.Payload.MachineId, singleEvent.StreamEvent.Payload.MachineId);
            Assert.Equal(streamEvent.Payload.Status, singleEvent.StreamEvent.Payload.Status);
        }
 /// <summary>
 /// It returns the set of events fetched using the defined filters
 /// </summary>
 /// <param name="filters">The filters to apply, for more info on filters check GetStreamEventsFilters()</param>
 /// <returns>A task that contains the enumerable list of IWebSocketStream that matches the filters</returns>
 public async Task <IEnumerable <IWebSocketStream> > GetEventsByFiltersAsync(IDictionary <string, string> filters)
 {
     var(mongoDBFilters, limit) = ParseFilters(filters);
     return(await mongo.FindEventsByFiltersAsync(mongoDBFilters, limit : limit));
 }