using System; using System.Linq.Expressions; using System.Threading; using System.Threading.Tasks; using AutoFixture; using CoreUnitTests.Infrastructure; using CoreUnitTests.Infrastructure.Model; using FluentAssertions; using MongoDB.Driver; using MongoDbGenericRepository; using MongoDbGenericRepository.DataAccess.Delete; using Moq; using Xunit; namespace CoreUnitTests.DataAccessTests.MongoDbEraserTests; public class DeleteOneAsyncTests : GenericTestContext { [Fact] public async Task WithDocumentAndCancellationToken_DeletesOne() { // Arrange var count = Fixture.Create(); var document = Fixture.Create(); var token = new CancellationToken(true); var collection = MockOf>(); collection .Setup(x => x.DeleteOneAsync(It.IsAny>(), It.IsAny())) .ReturnsAsync(new DeleteResult.Acknowledged(count)); var dbContext = MockOf(); dbContext .Setup(x => x.GetCollection(null)) .Returns(collection.Object); // Act var result = await Sut.DeleteOneAsync(document, token); // Assert result.Should().Be(count); var expectedFilter = Builders.Filter.Eq("Id", document.Id); collection.Verify( x => x.DeleteOneAsync( It.Is>(f => f.EquivalentTo(expectedFilter)), token), Times.Once()); } [Fact] public async Task WithFilterAndPartitionKeyAndCancellationToken_DeletesOne() { // Arrange var count = Fixture.Create(); var document = Fixture.Create(); var partitionKey = Fixture.Create(); var token = new CancellationToken(true); var collection = MockOf>(); collection .Setup(x => x.DeleteOneAsync(It.IsAny>(), It.IsAny())) .ReturnsAsync(new DeleteResult.Acknowledged(count)); var dbContext = MockOf(); dbContext .Setup(x => x.GetCollection(It.IsAny())) .Returns(collection.Object); Expression> filter = d => d.Id == document.Id; // Act var result = await Sut.DeleteOneAsync(filter, partitionKey, token); // Assert result.Should().Be(count); collection.Verify( x => x.DeleteOneAsync( It.Is>(f => f.EquivalentTo(filter)), token), Times.Once()); dbContext.Verify(x => x.GetCollection(partitionKey)); } }