public void Remove_AllItems_UpdatesDictionariesAndTimer()
        {
            // Arrange
            var      now            = DateTime.UtcNow;
            var      timer          = CreateTimer(now);
            var      log            = new Mock <IServiceLogRepository>();
            var      timeoutManager = new TimeoutManager <int>(timer.Object, log.Object);
            DateTime timeout1       = now.AddMinutes(20.0);
            DateTime timeout2       = now.AddMinutes(10.0);

            timeoutManager.Insert(1, timeout1, null);
            timeoutManager.Insert(2, timeout2, null);

            // Act
            timeoutManager.Remove(2);
            timeoutManager.Remove(1);

            // Assert
            Assert.AreEqual(0, timeoutManager.Items.Count);
            Assert.AreEqual(0, timeoutManager.TimeoutsByItem.Count);
            Assert.IsFalse(timer.Object.Enabled);
        }
        public void Remove_NonExistantItems_HasNoEffect()
        {
            // Arrange
            var      now            = DateTime.UtcNow;
            var      timer          = CreateTimer(now);
            var      log            = new Mock <IServiceLogRepository>();
            var      timeoutManager = new TimeoutManager <int>(timer.Object, log.Object);
            DateTime timeout1       = now.AddMinutes(20.0);
            DateTime timeout2       = now.AddMinutes(10.0);

            timeoutManager.Insert(1, timeout1, null);
            timeoutManager.Insert(2, timeout2, null);

            // Act
            timeoutManager.Remove(3);

            // Assert
            Assert.AreEqual(2, timeoutManager.Items.Count);
            Assert.AreEqual(2, timeoutManager.TimeoutsByItem.Count);
            Assert.AreEqual((timeout2 - now).TotalMilliseconds + TimerWrapper.ExtraInterval, timer.Object.Interval);
            Assert.IsTrue(timer.Object.Enabled);
        }