public void it_doesnt_trigger_the_rate_limit_when_the_timeline_is_empty()
        {
            var timeline = MockRepository.GenerateStub <IEventTimeline>();

            timeline.Stub(it => it.RecordEvent(Arg <DateTime> .Is.Anything));
            timeline.Stub(it => it.GetLastEventDateAndTime()).Return(null);

            IPauseTime pauseTime = MockRepository.GenerateMock <IPauseTime>();

            TrickleRateLimiter rateLimiter = new TrickleRateLimiter(timeline, pauseTime);

            rateLimiter.CheckAndEnforceRateLimit(DateTime.UtcNow);

            pauseTime.AssertWasNotCalled(it => it.Pause(Arg <TimeSpan> .Is.Anything));
        }
        public void it_doesnt_trigger_the_rate_limit_when_the_last_event_date_is_more_than_1_second_ago()
        {
            DateTime firstEventDateTime  = new DateTime(2000, 1, 1, 12, 0, 0);
            DateTime secondEventDateTime = new DateTime(2000, 1, 1, 12, 0, 2);

            var timeline = MockRepository.GenerateStub <IEventTimeline>();

            timeline.Stub(it => it.RecordEvent(Arg <DateTime> .Is.Anything));
            timeline.Stub(it => it.GetLastEventDateAndTime()).Return(firstEventDateTime);

            IPauseTime pauseTime = MockRepository.GenerateMock <IPauseTime>();

            TrickleRateLimiter rateLimiter = new TrickleRateLimiter(timeline, pauseTime);

            rateLimiter.CheckAndEnforceRateLimit(secondEventDateTime);

            pauseTime.AssertWasNotCalled(it => it.Pause(Arg <TimeSpan> .Is.Anything));
        }