public void ReleaseLockAsync_OnDocumentClientSuccess_ThrowsNoException()
        {
            // Arrange
            var lease = new CosmosDistributedLockClaim("lock-name");

            _mockDocumentClient.Setup(m => m.DeleteDocumentAsync(
                                          It.IsAny <Uri>(),
                                          It.IsAny <RequestOptions>(), default))
            .ReturnsAsync(new Document().ToResourceResponse(HttpStatusCode.OK));

            // Act
            Func <Task> act = async() => await _store.ReleaseLockAsync(lease);

            // Assert
            act.Should().NotThrow();
        }
        public async Task TryClaimLockAsync_WhenLockConflicted_ReturnsFalse()
        {
            // Arrange
            var lease = new CosmosDistributedLockClaim("lock-name");

            _mockDocumentClient.Setup(m => m.CreateDocumentAsync(
                                          It.IsAny <Uri>(),
                                          It.IsAny <object>(),
                                          It.IsAny <RequestOptions>(), false, default))
            .ReturnsAsync(new Document().ToResourceResponse(HttpStatusCode.Conflict));

            // Act
            var result = await _store.TryClaimLockAsync(lease);

            // Assert
            result.Should().BeFalse();
        }
        public void ReleaseLockAsync_OnDocumentClientFailure_ThrowsException()
        {
            // Arrange
            var lease = new CosmosDistributedLockClaim("lock-name");

            _mockDocumentClient.Setup(m => m.DeleteDocumentAsync(
                                          It.IsAny <Uri>(),
                                          It.IsAny <RequestOptions>(), default))
            .Throws(CreateDocumentClientExceptionForTesting("http error", null, HttpStatusCode.RequestTimeout));

            // Act
            Func <Task> act = async() => await _store.ReleaseLockAsync(lease);

            // Assert
            act.Should().Throw <DocumentClientException>()
            .WithMessage("http error*");
        }
        public void TryClaimLockAsync_OnDocumentClientException_ThrowsException()
        {
            // Arrange
            var lease = new CosmosDistributedLockClaim("lock-name");

            _mockDocumentClient.Setup(m => m.CreateDocumentAsync(
                                          It.IsAny <Uri>(),
                                          It.IsAny <object>(),
                                          It.IsAny <RequestOptions>(),
                                          false,
                                          default))
            .Throws(new Exception("http error"));

            // Act
            Func <Task> act = async() => await _store.TryClaimLockAsync(lease);

            // Assert
            act.Should().Throw <Exception>()
            .WithMessage("http error");
        }