public void SetLock()
            {
                // Arrange
                var     key         = new SimpleThrottleKey("test", "key");
                Limiter limiter     = new Limiter().Limit(1).Over(1).LockFor(1);
                var     db          = Substitute.For <IDatabase>();
                var     repository  = new RedisThrottleRepository(db);
                string  id          = repository.CreateLockKey(key, limiter);
                var     transaction = Substitute.For <ITransaction>();

                db
                .CreateTransaction()
                .Returns(transaction);

                // Act
                repository.SetLock(key, limiter);

                // Assert
                transaction
                .Received(1)
                .StringIncrementAsync(id);

                transaction
                .Received(1)
                .KeyExpireAsync(id, limiter.LockDuration);

                transaction
                .Received(1)
                .Execute();
            }
            public void KeyExists_ReturnsTrue(bool keyExists, bool expected)
            {
                // Arrange
                var     key        = new SimpleThrottleKey("test", "key");
                Limiter limiter    = new Limiter().Limit(1).Over(1).LockFor(1);
                var     db         = Substitute.For <IDatabase>();
                var     repository = new RedisThrottleRepository(db);
                string  id         = repository.CreateLockKey(key, limiter);

                db
                .KeyExists(id)
                .Returns(keyExists);

                // Act
                bool result = repository.LockExists(key, limiter);

                // Assert
                Assert.Equal(expected, result);
            }