private async Task AppendReadingsCollectedEvents(string streamId, DateTime fromDate, int dayCount)
        {
            IEventStore eventStore = new CosmosEventStore(this, EndpointUrl, AuthorizationKey, DatabaseId);

            var stream = await eventStore.LoadStreamAsync(streamId);

            // Only append more ReadingsCollected events if we haven't done this before.
            // This can be detected by looking at the stream version.
            var events = Enumerable.Range(0, dayCount - 1)
                         .Select(i => new MeterReadingsCollected
            {
                Date     = fromDate.AddDays(i),
                Readings = GenerateMeterReadings(fromDate.AddDays(i)).ToArray()
            })
                         .ToList();

            await eventStore.AppendToStreamAsync(streamId, stream.Version, events);

            // Wait a little while before adding the last one.
            // This ensures that the last event will be at a different timestamp
            // which is better for explaining the mechanism.
            await Task.Delay(TimeSpan.FromSeconds(2));

            await eventStore.AppendToStreamAsync(streamId, stream.Version + events.Count, new IEvent[]
            {
                new MeterReadingsCollected
                {
                    Date     = fromDate.AddDays(dayCount - 1),
                    Readings = GenerateMeterReadings(fromDate.AddDays(dayCount - 1)).ToArray()
                }
            });
        }
        public async Task SC02_AppendToExistingStreamAsync()
        {
            IEventStore eventStore = new CosmosEventStore(this, EndpointUrl, AuthorizationKey, DatabaseId);

            var streamId = $"meter:87000001";
            var stream   = await eventStore.LoadStreamAsync(streamId);

            var readingsCollected = new MeterReadingsCollected
            {
                Date     = new DateTime(2020, 4, 30),
                Readings = GenerateMeterReadings(new DateTime(2020, 4, 30)).ToArray()
            };

            var succes = await eventStore.AppendToStreamAsync(
                streamId,
                stream.Version,
                new IEvent[] { readingsCollected });

            Assert.IsTrue(succes, "Unexpected stream version encountered.");
        }