public async Task Can_get_stream_message_count_with_created_before_date()
        {
            using (var fixture = new PostgresStreamStoreFixture("dbo"))
            {
                using (var store = await fixture.GetPostgresStreamStore())
                {
                    fixture.GetUtcNow = () => new DateTime(2016, 1, 1, 0, 0, 0);

                    var streamId = "stream-1";
                    await store.AppendToStream(
                        streamId,
                        ExpectedVersion.NoStream,
                        CreateNewStreamMessages(1, 2, 3));

                    fixture.GetUtcNow = () => new DateTime(2016, 1, 1, 0, 1, 0);

                    await store.AppendToStream(
                        streamId,
                        ExpectedVersion.Any,
                        CreateNewStreamMessages(4, 5, 6));

                    var streamCount = await store.GetmessageCount(streamId, new DateTime(2016, 1, 1, 0, 1, 0));

                    streamCount.ShouldBe(3); // The first 3
                }
            }
        }
        public async Task Can_call_initialize_repeatably(string schema)
        {
            using (var fixture = new PostgresStreamStoreFixture(schema))
            {
                using (var store = await fixture.GetPostgresStreamStore())
                {
                    await store.InitializeStore();

                    await store.InitializeStore();
                }
            }
        }
        public async Task When_stream_does_not_exist_then_stream_message_count_should_be_zero()
        {
            using (var fixture = new PostgresStreamStoreFixture("dbo"))
            {
                using (var store = await fixture.GetPostgresStreamStore())
                {
                    var streamId = "stream-doesnotexist";

                    var streamCount = await store.GetmessageCount(streamId);

                    streamCount.ShouldBe(0);
                }
            }
        }
        public async Task when_try_scavenge_fails_returns_negative_one()
        {
            using (var fixture = new PostgresStreamStoreFixture("dbo", TestOutputHelper))
            {
                using (var store = await fixture.GetPostgresStreamStore())
                {
                    var cts = new CancellationTokenSource();

                    cts.Cancel();

                    var result = await store.TryScavenge(new StreamIdInfo("stream-1"), cts.Token);

                    result.ShouldBe(-1);
                }
            }
        }
        public async Task Can_drop_all()
        {
            var streamStoreObjects = new List <string>();

            string ReadInformationSchema((string name, string table) _)
            => $"SELECT {_.name}_name FROM information_schema.{_.table} WHERE {_.name}_schema = 'dbo'";

            using (var fixture = new PostgresStreamStoreFixture("dbo", TestOutputHelper))
            {
                using (var store = await fixture.GetPostgresStreamStore())
                {
                    await store.DropAll();
                }

                var commandText = string.Join(
                    $"{Environment.NewLine}UNION{Environment.NewLine}",
                    new[]
        public async Task Can_get_stream_message_count()
        {
            using (var fixture = new PostgresStreamStoreFixture("dbo"))
            {
                using (var store = await fixture.GetPostgresStreamStore())
                {
                    var streamId = "stream-1";
                    await store.AppendToStream(
                        streamId,
                        ExpectedVersion.NoStream,
                        CreateNewStreamMessages(1, 2, 3, 4, 5));

                    var streamCount = await store.GetmessageCount(streamId);

                    streamCount.ShouldBe(5);
                }
            }
        }