using System; using System.Linq.Expressions; using System.Threading; 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 DeleteOneTests : GenericTestContext { [Fact] public void WithDocument_DeletesOne() { // Arrange var count = Fixture.Create(); var document = Fixture.Create(); var collection = MockOf>(); collection .Setup(x => x.DeleteOne(It.IsAny>(), It.IsAny())) .Returns(new DeleteResult.Acknowledged(count)); var dbContext = MockOf(); dbContext .Setup(x => x.GetCollection(null)) .Returns(Fixture.Create>()); // Act var result = Sut.DeleteOne(document); // Assert result.Should().Be(count); var expectedFilter = Builders.Filter.Eq("Id", document.Id); collection.Verify( x => x.DeleteOne( It.Is>(f => f.EquivalentTo(expectedFilter)), CancellationToken.None)); } [Fact] public void WithDocumentAndCancellationToken_DeletesOne() { // Arrange var count = Fixture.Create(); var document = Fixture.Create(); var token = new CancellationToken(true); var collection = MockOf>(); collection .Setup(x => x.DeleteOne(It.IsAny>(), It.IsAny())) .Returns(new DeleteResult.Acknowledged(count)); var dbContext = MockOf(); dbContext .Setup(x => x.GetCollection(null)) .Returns(Fixture.Create>()); // Act var result = Sut.DeleteOne(document, token); // Assert result.Should().Be(count); var expectedFilter = Builders.Filter.Eq("Id", document.Id); collection.Verify( x => x.DeleteOne( It.Is>(f => f.EquivalentTo(expectedFilter)), token)); } [Fact] public void WithFilter_DeletesOne() { // Arrange var count = Fixture.Create(); var document = Fixture.Create(); var collection = MockOf>(); collection .Setup(x => x.DeleteOne(It.IsAny>(), It.IsAny())) .Returns(new DeleteResult.Acknowledged(count)); var dbContext = MockOf(); dbContext .Setup(x => x.GetCollection(null)) .Returns(Fixture.Create>()); Expression> filter = d => d.SomeContent == document.SomeContent; // Act var result = Sut.DeleteOne(filter); // Assert result.Should().Be(count); collection.Verify( x => x.DeleteOne( It.Is>(f => f.EquivalentTo(filter)), CancellationToken.None)); } [Fact] public void WithFilterAndCancellationToken_DeletesOne() { // Arrange var count = Fixture.Create(); var document = Fixture.Create(); var token = new CancellationToken(true); var collection = MockOf>(); collection .Setup(x => x.DeleteOne(It.IsAny>(), It.IsAny())) .Returns(new DeleteResult.Acknowledged(count)); var dbContext = MockOf(); dbContext .Setup(x => x.GetCollection(null)) .Returns(Fixture.Create>()); Expression> filter = d => d.Id == document.Id; // Act var result = Sut.DeleteOne(filter, cancellationToken: token); // Assert result.Should().Be(count); collection.Verify( x => x.DeleteOne( It.Is>(f => f.EquivalentTo(filter)), token)); } [Fact] public void WithFilterAndPartitionKey_DeletesOne() { // Arrange var count = Fixture.Create(); var document = Fixture.Create(); var partitionKey = Fixture.Create(); var collection = MockOf>(); collection .Setup(x => x.DeleteOne(It.IsAny>(), It.IsAny())) .Returns(new DeleteResult.Acknowledged(count)); var dbContext = MockOf(); dbContext .Setup(x => x.GetCollection(It.IsAny())) .Returns(Fixture.Create>()); Expression> filter = d => d.Id == document.Id; // Act var result = Sut.DeleteOne(filter, partitionKey); // Assert result.Should().Be(count); collection.Verify( x => x.DeleteOne( It.Is>(f => f.EquivalentTo(filter)), CancellationToken.None)); dbContext.Verify(x => x.GetCollection(partitionKey)); } [Fact] public void 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.DeleteOne(It.IsAny>(), It.IsAny())) .Returns(new DeleteResult.Acknowledged(count)); var dbContext = MockOf(); dbContext .Setup(x => x.GetCollection(It.IsAny())) .Returns(Fixture.Create>()); Expression> filter = d => d.Id == document.Id; // Act var result = Sut.DeleteOne(filter, partitionKey, token); // Assert result.Should().Be(count); collection.Verify( x => x.DeleteOne( It.Is>(f => f.EquivalentTo(filter)), token)); dbContext.Verify(x => x.GetCollection(partitionKey)); } }