public void ShouldFail_OnWrongParameters()
        {
            var service = new DefaultTryRetryService();

            ExpectException <ArgumentNullException>(() =>
            {
                service.TryWithRetry(null, 1, 50);
            });

            ExpectException <ArgumentNullException>(() =>
            {
                service.TryWithRetry(() =>
                {
                    return(true);
                }, 1, 50, null);
            });

            ExpectException <ArgumentOutOfRangeException>(() =>
            {
                service.TryWithRetry(() =>
                {
                    return(false);
                }, -1, 50);
            });

            ExpectException <ArgumentOutOfRangeException>(() =>
            {
                service.TryWithRetry(() =>
                {
                    return(false);
                }, 1, -50);
            });
        }
        public void ShouldWork_On_FirstAttempt()
        {
            var service = new DefaultTryRetryService();

            var currentTryCount = 0;
            var maxTryCount     = Rnd.Int(5) + 1;

            service.TryWithRetry(() =>
            {
                currentTryCount++;
                return(true);
            }, maxTryCount, 50);

            Assert.AreEqual(1, currentTryCount);
        }
        public void ShouldFail_OnMoreAttempts()
        {
            var service         = new DefaultTryRetryService();
            var currentTryCount = 0;

            ExpectException <SPMeta2Exception>(() =>
            {
                service.TryWithRetry(() =>
                {
                    currentTryCount++;
                    return(false);
                });
            });

            Assert.AreEqual(service.MaxRetryCount, currentTryCount);
        }
        public void CanOverride_MaxTryAttempts()
        {
            var service = new DefaultTryRetryService();

            var currentTryCount = 0;
            var maxTryCount     = Rnd.Int(5) + 1;

            ExpectException <SPMeta2Exception>(() =>
            {
                service.TryWithRetry(() =>
                {
                    currentTryCount++;
                    return(false);
                }, maxTryCount, 50);
            });

            Assert.AreEqual(maxTryCount, currentTryCount);
        }
        public void ShouldWork_On_RandomAttempt()
        {
            var service = new DefaultTryRetryService();

            var currentTryCount = 0;

            var maxTryCount      = Rnd.Int(5) + 2;
            var positiveTryCount = maxTryCount / 2 + 1;

            service.TryWithRetry(() =>
            {
                currentTryCount++;

                if (positiveTryCount == currentTryCount)
                {
                    return(true);
                }

                return(false);
            }, maxTryCount, 50);

            Assert.AreEqual(positiveTryCount, currentTryCount);
        }
        public void CanCreate_DefaultTryRetryService()
        {
            var service = new DefaultTryRetryService();

            Assert.IsNotNull(service);
        }