public TheStartMethod()
 {
     sinceParameters = Substitute.For <ISinceParameterRepository>();
     api             = Substitute.For <ITogglApi>();
     timeService     = Substitute.For <ITimeService>();
     leakyBucket     = Substitute.For <ILeakyBucket>();
     leakyBucket.TryClaimFreeSlots(Arg.Any <int>(), out _).Returns(true);
     rateLimiter = Substitute.For <IRateLimiter>();
     rateLimiter.WaitForFreeSlot().Returns(Observable.Return(Unit.Default));
     timeService.CurrentDateTime.Returns(now);
     state = new FetchAllSinceState(api, sinceParameters, timeService, leakyBucket, rateLimiter);
 }
            public void ReturnsPreventServerOverloadWithCorrectDelayWhenTheLeakyBucketIsFull(TimeSpan delay)
            {
                leakyBucket.TryClaimFreeSlots(Arg.Any <int>(), out _)
                .Returns(x =>
                {
                    x[1] = delay;
                    return(false);
                });

                var transition = state.Start().SingleAsync().Wait();

                transition.Result.Should().Be(state.PreventOverloadingServer);
                var parameter = ((Transition <TimeSpan>)transition).Parameter;
            }