private static EventBatch <T> CreateStream <T>(Guid streamID, params EventBase[] events)
        {
            DefaultEventMetadata metadata = new DefaultEventMetadata(DateTime.Today);

            return(new EventBatch <T>(
                       streamID,
                       events.Select(e =>
                                     new RecordedEvent(streamID, e, metadata)
                                     ).ToArray()));
        }
        internal void RecordedEvent(
            RecordedEvent rec,
            long eventID,
            Guid streamID,
            DefaultEventMetadata metadata,
            CustomerCreated e,
            RecordedEvent act,
            BsonDocument doc
            )
        {
            GIVEN["a recorded event"] = () => {
                rec          = new RecordedEvent(
                    streamID = Guid.NewGuid(),
                    e        = new CustomerCreated {
                    Name = "Customer 1"
                },
                    metadata = new DefaultEventMetadata(DateTime.Today));

                rec.ID = new EventID(eventID = 100_000_000_000);
            };

            AND["an appropriate configuration"] = () => ConfigureSerialization();

            WHEN["serializing the event"]   = () => doc = Serialize(rec);
            THEN["the BSON is as expected"] = () => {
                var exp = new BsonDocument {
                    { "_id", new BsonInt64(eventID) },
                    { "StreamID", new BsonBinaryData(streamID, GuidRepresentation.Standard) },
                    { "m", new BsonDocument {
                          { "ts", new BsonDateTime(metadata.Timestamp) },
                          { "c", BsonNull.Value }
                      } },
                    { "e", new BsonDocument {
                          { "_t", "TEST:Test.CustomerCreated" },
                          { "Name", e.Name },
                          { "CreationDate", e.CreationDate }
                      } }
                };

                doc.Should().BeEqivalentTo(exp);
            };

            AND["deserializing it"]       = () => act = Deserialize <RecordedEvent>(doc);
            THEN["it has the same value"] = () => act.Should().BeEquivalentTo(rec);
        }