namespace CoreUnitTests.BaseMongoRepositoryTests.DeleteTests; using System; using System.Linq.Expressions; using System.Threading; using AutoFixture; using FluentAssertions; using Infrastructure; using Infrastructure.Model; using MongoDbGenericRepository.DataAccess.Delete; using Moq; using Xunit; public class DeleteOneTests : TestMongoRepositoryContext { [Fact] public void WithDocument_ShouldDeleteOne() { // Arrange var document = Fixture.Create(); var count = Fixture.Create(); Eraser = new Mock(); Eraser .Setup(x => x.DeleteOne(It.IsAny(), It.IsAny())) .Returns(count); // Act var result = Sut.DeleteOne(document); // Assert result.Should().Be(count); Eraser.Verify(x => x.DeleteOne(document, CancellationToken.None), Times.Once); } [Fact] public void WithDocumentAndCancellationToken_ShouldDeleteOne() { // Arrange var document = Fixture.Create(); var count = Fixture.Create(); var token = new CancellationToken(true); Eraser = new Mock(); Eraser .Setup(x => x.DeleteOne(It.IsAny(), It.IsAny())) .Returns(count); // Act var result = Sut.DeleteOne(document, token); // Assert result.Should().Be(count); Eraser.Verify(x => x.DeleteOne(document, token), Times.Once); } [Fact] public void WithFilter_ShouldDeleteOne() { // Arrange var count = Fixture.Create(); var content = Fixture.Create(); Expression> filter = x => x.SomeContent == content; Eraser = new Mock(); Eraser .Setup(x => x.DeleteOne(It.IsAny>>(), It.IsAny(), It.IsAny())) .Returns(count); // Act var result = Sut.DeleteOne(filter); // Assert result.Should().Be(count); Eraser.Verify(x => x.DeleteOne(filter, null, CancellationToken.None), Times.Once); } [Fact] public void WithFilterAndCancellationToken_ShouldDeleteOne() { // Arrange var count = Fixture.Create(); var content = Fixture.Create(); var token = new CancellationToken(true); Expression> filter = x => x.SomeContent == content; Eraser = new Mock(); Eraser .Setup( x => x.DeleteOne( It.IsAny>>(), It.IsAny(), It.IsAny())) .Returns(count); // Act var result = Sut.DeleteOne(filter, token); // Assert result.Should().Be(count); Eraser.Verify(x => x.DeleteOne(filter, null, token), Times.Once); } [Fact] public void WithFilterAndPartitionKey_ShouldDeleteOne() { // Arrange var count = Fixture.Create(); var content = Fixture.Create(); var partitionKey = Fixture.Create(); Expression> filter = x => x.SomeContent == content; Eraser = new Mock(); Eraser .Setup( x => x.DeleteOne( It.IsAny>>(), It.IsAny(), It.IsAny())) .Returns(count); // Act var result = Sut.DeleteOne(filter, partitionKey); // Assert result.Should().Be(count); Eraser.Verify(x => x.DeleteOne(filter, partitionKey, CancellationToken.None), Times.Once); } [Fact] public void WithFilterAndPartitionKeyAndCancellationToken_ShouldDeleteOne() { // Arrange var count = Fixture.Create(); var content = Fixture.Create(); var partitionKey = Fixture.Create(); var token = new CancellationToken(true); Expression> filter = x => x.SomeContent == content; Eraser = new Mock(); Eraser .Setup( x => x.DeleteOne( It.IsAny>>(), It.IsAny(), It.IsAny())) .Returns(count); // Act var result = Sut.DeleteOne(filter, partitionKey, token); // Assert result.Should().Be(count); Eraser.Verify(x => x.DeleteOne(filter, partitionKey, token), Times.Once); } [Fact] public void WithKeyedDocument_ShouldDeleteOne() { // Arrange var document = Fixture.Create>(); var count = Fixture.Create(); Eraser = new Mock(); Eraser .Setup(x => x.DeleteOne, int>(It.IsAny>(), It.IsAny())) .Returns(count); // Act var result = Sut.DeleteOne, int>(document); // Assert result.Should().Be(count); Eraser.Verify(x => x.DeleteOne, int>(document, CancellationToken.None), Times.Once); } [Fact] public void WithKeyedDocumentAndCancellationToken_ShouldDeleteOne() { // Arrange var document = Fixture.Create>(); var count = Fixture.Create(); var token = new CancellationToken(true); Eraser = new Mock(); Eraser .Setup(x => x.DeleteOne, int>(It.IsAny>(), It.IsAny())) .Returns(count); // Act var result = Sut.DeleteOne, int>(document, token); // Assert result.Should().Be(count); Eraser.Verify(x => x.DeleteOne, int>(document, token), Times.Once); } [Fact] public void Keyed_WithFilter_ShouldDeleteOne() { // Arrange var count = Fixture.Create(); var content = Fixture.Create(); Expression, bool>> filter = x => x.SomeContent == content; Eraser = new Mock(); Eraser .Setup( x => x.DeleteOne, int>( It.IsAny, bool>>>(), It.IsAny(), It.IsAny())) .Returns(count); // Act var result = Sut.DeleteOne, int>(filter); // Assert result.Should().Be(count); Eraser.Verify(x => x.DeleteOne, int>(filter, null, CancellationToken.None), Times.Once); } [Fact] public void Keyed_WithFilterAndCancellationToken_ShouldDeleteOne() { // Arrange var count = Fixture.Create(); var content = Fixture.Create(); var token = new CancellationToken(true); Expression, bool>> filter = x => x.SomeContent == content; Eraser = new Mock(); Eraser .Setup( x => x.DeleteOne, int>( It.IsAny, bool>>>(), It.IsAny(), It.IsAny())) .Returns(count); // Act var result = Sut.DeleteOne, int>(filter, token); // Assert result.Should().Be(count); Eraser.Verify(x => x.DeleteOne, int>(filter, null, token), Times.Once); } [Fact] public void Keyed_WithFilterAndPartitionKey_ShouldDeleteOne() { // Arrange var count = Fixture.Create(); var content = Fixture.Create(); var partitionKey = Fixture.Create(); Expression, bool>> filter = x => x.SomeContent == content; Eraser = new Mock(); Eraser .Setup( x => x.DeleteOne, int>( It.IsAny, bool>>>(), It.IsAny(), It.IsAny())) .Returns(count); // Act var result = Sut.DeleteOne, int>(filter, partitionKey); // Assert result.Should().Be(count); Eraser.Verify(x => x.DeleteOne, int>(filter, partitionKey, CancellationToken.None), Times.Once); } [Fact] public void Keyed_WithFilterAndPartitionKeyAndCancellationToken_ShouldDeleteOne() { // Arrange var count = Fixture.Create(); var content = Fixture.Create(); var partitionKey = Fixture.Create(); var token = new CancellationToken(true); Expression, bool>> filter = x => x.SomeContent == content; Eraser = new Mock(); Eraser .Setup( x => x.DeleteOne, int>( It.IsAny, bool>>>(), It.IsAny(), It.IsAny())) .Returns(count); // Act var result = Sut.DeleteOne, int>(filter, partitionKey, token); // Assert result.Should().Be(count); Eraser.Verify(x => x.DeleteOne, int>(filter, partitionKey, token), Times.Once); } }