diff --git a/tests/Dequeueable.AzureQueueStorage.UnitTests/Services/Singleton/DistributedLockManagerTests.cs b/tests/Dequeueable.AzureQueueStorage.UnitTests/Services/Singleton/DistributedLockManagerTests.cs index c4baeb8..a75ca11 100644 --- a/tests/Dequeueable.AzureQueueStorage.UnitTests/Services/Singleton/DistributedLockManagerTests.cs +++ b/tests/Dequeueable.AzureQueueStorage.UnitTests/Services/Singleton/DistributedLockManagerTests.cs @@ -146,6 +146,43 @@ public async Task Given_a_DistributedLockManager_when_AcquireAsync_is_called_for result.Should().Be(leaseId); } + [Fact] + public async Task Given_a_DistributedLockManager_when_AcquireAsync_is_called_and_the_created_container_already_exists_then_the_lease_is_acquired_correctly() + { + // Arrange + var leaseId = "someId"; + var blobPropertiesFake = BlobsModelFactory.BlobProperties(leaseState: LeaseState.Available); + var blobLeaseFake = BlobsModelFactory.BlobLease(new ETag(), DateTimeOffset.Now, leaseId: leaseId); + var blobClientFake = new Mock(MockBehavior.Strict); + var blobLeaseClientFake = new Mock(MockBehavior.Strict); + var blobContainerClientFake = new Mock(MockBehavior.Strict); + var blobLeaseResponseFake = new Mock>(MockBehavior.Strict); + + var loggerMock = new Mock(); + + blobLeaseResponseFake.SetupGet(p => p.Value).Returns(blobLeaseFake); + blobLeaseClientFake.Setup(b => b.AcquireAsync(TimeSpan.FromSeconds(60), null, It.IsAny())).ReturnsAsync(blobLeaseResponseFake.Object); + + blobClientFake.Protected().Setup("GetBlobLeaseClientCore", ItExpr.IsAny()) + .Returns((leaseId) => blobLeaseClientFake.Object); + blobClientFake.Setup(b => b.GetPropertiesAsync(null, It.IsAny())).ThrowsAsync(new RequestFailedException(404, "blob not found")); + blobClientFake.SetupSequence(b => b.UploadAsync(It.IsAny(), It.IsAny())) + .ThrowsAsync(new RequestFailedException(404, "container not found")) + .ReturnsAsync(new Mock>(MockBehavior.Strict).Object); + + blobContainerClientFake.Setup(c => c.CreateAsync(PublicAccessType.None, null, null, It.IsAny())).ThrowsAsync(new RequestFailedException(409, "container already exists")); + blobClientFake.Protected().Setup("GetParentBlobContainerClientCore") + .Returns(() => blobContainerClientFake.Object); + + var sut = new DistributedLockManager(blobClientFake.Object, loggerMock.Object); + + // Act + var result = await sut.AcquireAsync(CancellationToken.None); + + // Assert + result.Should().Be(leaseId); + } + [Theory] [InlineData(409)] [InlineData(412)]