public async Task TryRemove_when_non_existing_is_removed_should_return_false()
        {
            var persister = new InMemoryTimeoutPersister(() => DateTime.UtcNow);
            var inputTimeout = new TimeoutData();
            await persister.Add(inputTimeout, new ContextBag());

            var result = await persister.TryRemove(Guid.NewGuid().ToString(), new ContextBag());

            Assert.False(result);
        }
        public async Task TryRemove_when_non_existing_is_removed_should_return_false()
        {
            var persister    = new InMemoryTimeoutPersister(() => DateTime.UtcNow);
            var inputTimeout = new TimeoutData();
            await persister.Add(inputTimeout, new ContextBag());

            var result = await persister.TryRemove(Guid.NewGuid().ToString(), new ContextBag());

            Assert.False(result);
        }
        public async Task TryRemove_when_existing_is_removed_should_return_true()
        {
            var persister = new InMemoryTimeoutPersister(() => DateTime.UtcNow);
            var inputTimeout = new TimeoutData();
            await persister.Add(inputTimeout, new ContextBag());

            var result = await persister.TryRemove(inputTimeout.Id, new ContextBag());

            Assert.IsTrue(result);
        }
        public async Task TryRemove_when_existing_is_removed_should_return_true()
        {
            var persister    = new InMemoryTimeoutPersister(() => DateTime.UtcNow);
            var inputTimeout = new TimeoutData();
            await persister.Add(inputTimeout, new ContextBag());

            var result = await persister.TryRemove(inputTimeout.Id, new ContextBag());

            Assert.IsTrue(result);
        }
        public void When_existing_is_removed_existing_is_outted()
        {
            var persister    = new InMemoryTimeoutPersister();
            var inputTimeout = new TimeoutData();

            persister.Add(inputTimeout);
            TimeoutData removedTimeout;
            var         removed = persister.TryRemove(inputTimeout.Id, out removedTimeout);

            Assert.IsTrue(removed);
            Assert.AreSame(inputTimeout, removedTimeout);
        }
        public void When_existing_is_removed_by_saga_id()
        {
            var persister    = new InMemoryTimeoutPersister();
            var newGuid      = Guid.NewGuid();
            var inputTimeout = new TimeoutData
            {
                SagaId = newGuid
            };

            persister.Add(inputTimeout);

            persister.RemoveTimeoutBy(newGuid);
            TimeoutData removedTimeout;
            var         removed = persister.TryRemove(inputTimeout.Id, out removedTimeout);

            Assert.False(removed);
        }
        public async Task When_existing_is_removed_by_saga_id()
        {
            var persister    = new InMemoryTimeoutPersister(() => DateTime.UtcNow);
            var newGuid      = Guid.NewGuid();
            var inputTimeout = new TimeoutData
            {
                SagaId = newGuid
            };

            await persister.Add(inputTimeout, new ContextBag());

            await persister.RemoveTimeoutBy(newGuid, new ContextBag());

            var result = await persister.TryRemove(inputTimeout.Id, new ContextBag());

            Assert.IsFalse(result);
        }
        void TryRemove(InMemoryTimeoutPersister inMemoryTimeoutPersister)
        {
            TimeoutData timeout;

            inMemoryTimeoutPersister.TryRemove(Thread.CurrentThread.Name, out timeout);
        }
        public async Task When_existing_is_removed_by_saga_id()
        {
            var persister = new InMemoryTimeoutPersister(() => DateTime.UtcNow);
            var newGuid = Guid.NewGuid();
            var inputTimeout = new TimeoutData
                               {
                                   SagaId = newGuid
                               };

            await persister.Add(inputTimeout, new ContextBag());
            await persister.RemoveTimeoutBy(newGuid, new ContextBag());
            var result = await persister.TryRemove(inputTimeout.Id, new ContextBag());

            Assert.IsFalse(result);
        }