public async Task ShouldCreateAndResumeConnection()
        {
            var subject = Guid.NewGuid().ToString();

            var repository = EventStoreRepository.Create(new EventStoreRepositoryConfiguration());

            _cleanup.Add(repository);

            await repository.Connect(TimeSpan.FromSeconds(10));

            //wait for EventStore to setup user accounts
            await Task.Delay(500);

            var counter = 0;

            var subscription = repository.Observe(subject)
                               .Subscribe(ev =>
            {
                counter++;
            });

            _cleanup.Add(subscription);

            await repository.SavePendingEvents(subject, -1, new[] { new CcyPairChanged("Harmony", subject, true, 1.32, 1.34) });

            await Task.Delay(200);

            await _embeddedEventStore.Dispose();

            _embeddedEventStore = new EmbeddedEventStoreFixture();
            await _embeddedEventStore.Initialize();

            await Wait.Until(() => repository.IsConnected, TimeSpan.FromSeconds(5));

            //wait for EventStore to setup user accounts
            await Task.Delay(500);

            await repository.SavePendingEvents(subject, -1, new[] { new CcyPairChanged("Harmony", subject, true, 1.32, 1.34) });

            await Task.Delay(200);

            Assert.AreEqual(2, counter);
        }
        public async Task ShouldSubscribeFromVersion()
        {
            var subject    = Guid.NewGuid().ToString();
            var repository = EventStoreRepository.Create(new EventStoreRepositoryConfiguration());

            _cleanup.Add(repository);

            await repository.Connect(TimeSpan.FromSeconds(10));

            //wait for EventStore to setup user accounts
            await Task.Delay(500);

            await repository.SavePendingEvents(subject, -1, new[] { new CcyPairChanged("Harmony", subject, true, 1.32, 1.34) });

            await Task.Delay(200);

            await repository.SavePendingEvents(subject, 0, new[] { new CcyPairChanged("Harmony", subject, true, 1.32, 1.34) });

            await Task.Delay(200);

            repository.Dispose();

            repository = EventStoreRepository.Create(new EventStoreRepositoryConfiguration());
            await repository.Connect(TimeSpan.FromSeconds(10));

            //wait for EventStore to setup user accounts
            await Task.Delay(500);

            var counter      = 0;
            var subscription = repository.Observe(subject, 1)
                               .Subscribe(ev =>
            {
                counter++;
            });

            _cleanup.Add(subscription);

            await Task.Delay(200);

            Assert.AreEqual(1, counter);
        }
        public async Task ShouldCatchUpStream()
        {
            var repository = EventStoreRepository.Create(new EventStoreRepositoryConfiguration());

            await repository.Connect(TimeSpan.FromSeconds(10));

            //wait for EventStore to setup user accounts
            await Task.Delay(500);

            await repository.SavePendingEvents("EUR/USD", -1, new[] { new CcyPairChanged("Harmony", "EUR/USD", true, 1.32, 1.34) });

            await Task.Delay(200);

            await repository.SavePendingEvents("EUR/USD", 0, new[] { new CcyPairChanged("Harmony", "EUR/USD", true, 1.32, 1.34) });

            await Task.Delay(200);

            repository.Dispose();

            repository = EventStoreRepository.Create(new EventStoreRepositoryConfiguration());
            await repository.Connect(TimeSpan.FromSeconds(10));

            //wait for EventStore to setup user accounts
            await Task.Delay(500);

            var counter      = 0;
            var subscription = repository.Observe("EUR/USD", rewindAfterDisconnection: true)
                               .Subscribe(ev =>
            {
                counter++;
            });

            await Task.Delay(200);

            Assert.AreEqual(2, counter);

            subscription.Dispose();
            repository.Dispose();
        }