using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Threading; using AutoFixture; using CoreUnitTests.Infrastructure; using CoreUnitTests.Infrastructure.Model; using FluentAssertions; using MongoDB.Driver; using MongoDbGenericRepository.DataAccess.Read; using Moq; using Xunit; namespace CoreUnitTests.ReadOnlyMongoRepositoryTests; public class GetAllTests : TestReadOnlyMongoRepositoryContext { private readonly Expression> expression = document => document.SomeContent == "SomeContent"; [Fact] public void WithExpression_GetsAll() { // Arrange var document = Fixture.CreateMany().ToList(); SetupReader(document); // Act var result = Sut.GetAll(expression); // Assert result.Should().NotBeNull(); result.Should().BeEquivalentTo(document); Reader.Verify( x => x.GetAll(expression, null, CancellationToken.None), Times.Once); } [Fact] public void WithExpressionAndCancellationToken_GetsAll() { // Arrange var document = Fixture.CreateMany().ToList(); var token = new CancellationToken(true); SetupReader(document); // Act var result = Sut.GetAll(expression, token); // Assert result.Should().NotBeNull(); result.Should().BeEquivalentTo(document); Reader.Verify( x => x.GetAll(expression, null, token), Times.Once); } [Fact] public void WithExpressionAndPartitionKey_GetsAll() { // Arrange var document = Fixture.CreateMany().ToList(); var partitionKey = Fixture.Create(); SetupReader(document); // Act var result = Sut.GetAll(expression, partitionKey); // Assert result.Should().NotBeNull(); result.Should().BeEquivalentTo(document); Reader.Verify( x => x.GetAll(expression, partitionKey, CancellationToken.None), Times.Once); } [Fact] public void WithExpressionAndPartitionKeyAndCancellationToken_GetsAll() { // Arrange var document = Fixture.CreateMany().ToList(); var partitionKey = Fixture.Create(); var token = new CancellationToken(true); SetupReader(document); // Act var result = Sut.GetAll(expression, partitionKey, token); // Assert result.Should().NotBeNull(); result.Should().BeEquivalentTo(document); Reader.Verify( x => x.GetAll(expression, partitionKey, token), Times.Once); } private void SetupReader(List documents) { Reader = new Mock(); Reader .Setup( x => x.GetAll( It.IsAny>>(), It.IsAny(), It.IsAny())) .Returns(documents); } #region Keyed private readonly Expression, bool>> keyedExpression = document => document.SomeContent == "SomeContent"; private readonly FilterDefinition> keyedFilter = Builders>.Filter.Eq(document => document.SomeContent, "SomeContent"); [Fact] public void Keyed_WithExpression_GetsAll() { // Arrange var document = Fixture.CreateMany>().ToList(); SetupKeyedReader(document); // Act var result = Sut.GetAll, int>(keyedExpression); // Assert result.Should().NotBeNull(); result.Should().BeEquivalentTo(document); Reader.Verify( x => x.GetAll, int>(keyedExpression, null, CancellationToken.None), Times.Once); } [Fact] public void Keyed_WithExpressionAndCancellationToken_GetsAll() { // Arrange var document = Fixture.CreateMany>().ToList(); var token = new CancellationToken(true); SetupKeyedReader(document); // Act var result = Sut.GetAll, int>(keyedExpression, token); // Assert result.Should().NotBeNull(); result.Should().BeEquivalentTo(document); Reader.Verify( x => x.GetAll, int>(keyedExpression, null, token), Times.Once); } [Fact] public void Keyed_WithExpressionAndPartitionKey_GetsAll() { // Arrange var document = Fixture.CreateMany>().ToList(); var partitionKey = Fixture.Create(); SetupKeyedReader(document); // Act var result = Sut.GetAll, int>(keyedExpression, partitionKey); // Assert result.Should().NotBeNull(); result.Should().BeEquivalentTo(document); Reader.Verify( x => x.GetAll, int>(keyedExpression, partitionKey, CancellationToken.None), Times.Once); } [Fact] public void Keyed_WithExpressionAndPartitionKeyAndCancellationToken_GetsAll() { // Arrange var document = Fixture.CreateMany>().ToList(); var partitionKey = Fixture.Create(); var token = new CancellationToken(true); SetupKeyedReader(document); // Act var result = Sut.GetAll, int>(keyedExpression, partitionKey, token); // Assert result.Should().NotBeNull(); result.Should().BeEquivalentTo(document); Reader.Verify( x => x.GetAll, int>(keyedExpression, partitionKey, token), Times.Once); } [Fact] public void Keyed_WithFilter_GetsAll() { // Arrange var document = Fixture.CreateMany>().ToList(); SetupKeyedReaderWithFilter(document); // Act var result = Sut.GetAll, int>(keyedFilter); // Assert result.Should().NotBeNull(); result.Should().BeEquivalentTo(document); Reader.Verify( x => x.GetAll, int>(keyedFilter, null, null, CancellationToken.None), Times.Once); } [Fact] public void Keyed_WithFilterAndFindOptions_GetsAll() { // Arrange var document = Fixture.CreateMany>().ToList(); var options = new FindOptions(); SetupKeyedReaderWithFilter(document); // Act var result = Sut.GetAll, int>(keyedFilter, options); // Assert result.Should().NotBeNull(); result.Should().BeEquivalentTo(document); Reader.Verify( x => x.GetAll, int>(keyedFilter, options, null, CancellationToken.None), Times.Once); } [Fact] public void Keyed_WithFilterAndCancellationToken_GetsAll() { // Arrange var document = Fixture.CreateMany>().ToList(); var token = new CancellationToken(true); SetupKeyedReaderWithFilter(document); // Act var result = Sut.GetAll, int>(keyedFilter, token); // Assert result.Should().NotBeNull(); result.Should().BeEquivalentTo(document); Reader.Verify( x => x.GetAll, int>(keyedFilter, null, null, token), Times.Once); } [Fact] public void Keyed_WithFilterAndFindOptionsAndCancellationToken_GetsAll() { // Arrange var document = Fixture.CreateMany>().ToList(); var token = new CancellationToken(true); var options = new FindOptions(); SetupKeyedReaderWithFilter(document); // Act var result = Sut.GetAll, int>(keyedFilter, options, token); // Assert result.Should().NotBeNull(); result.Should().BeEquivalentTo(document); Reader.Verify( x => x.GetAll, int>(keyedFilter, options, null, token), Times.Once); } [Fact] public void Keyed_WithFilterAndPartitionKey_GetsAll() { // Arrange var document = Fixture.CreateMany>().ToList(); var partitionKey = Fixture.Create(); SetupKeyedReaderWithFilter(document); // Act var result = Sut.GetAll, int>(keyedFilter, partitionKey); // Assert result.Should().NotBeNull(); result.Should().BeEquivalentTo(document); Reader.Verify( x => x.GetAll, int>(keyedFilter, null, partitionKey, CancellationToken.None), Times.Once); } [Fact] public void Keyed_WithFilterAndFindOptionsAndPartitionKey_GetsAll() { // Arrange var document = Fixture.CreateMany>().ToList(); var partitionKey = Fixture.Create(); var options = new FindOptions(); SetupKeyedReaderWithFilter(document); // Act var result = Sut.GetAll, int>(keyedFilter, options, partitionKey); // Assert result.Should().NotBeNull(); result.Should().BeEquivalentTo(document); Reader.Verify( x => x.GetAll, int>(keyedFilter, options, partitionKey, CancellationToken.None), Times.Once); } [Fact] public void Keyed_WithFilterAndPartitionKeyAndCancellationToken_GetsAll() { // Arrange var document = Fixture.CreateMany>().ToList(); var partitionKey = Fixture.Create(); var token = new CancellationToken(true); SetupKeyedReaderWithFilter(document); // Act var result = Sut.GetAll, int>(keyedFilter, partitionKey, token); // Assert result.Should().NotBeNull(); result.Should().BeEquivalentTo(document); Reader.Verify( x => x.GetAll, int>(keyedFilter, null, partitionKey, token), Times.Once); } [Fact] public void Keyed_WithFilterAndFindOptionsAndPartitionKeyAndCancellationToken_GetsAll() { // Arrange var document = Fixture.CreateMany>().ToList(); var partitionKey = Fixture.Create(); var token = new CancellationToken(true); var options = new FindOptions(); SetupKeyedReaderWithFilter(document); // Act var result = Sut.GetAll, int>(keyedFilter, options, partitionKey, token); // Assert result.Should().NotBeNull(); result.Should().BeEquivalentTo(document); Reader.Verify( x => x.GetAll, int>(keyedFilter, options, partitionKey, token), Times.Once); } private void SetupKeyedReaderWithFilter(List> documents) { Reader = new Mock(); Reader .Setup( x => x.GetAll, int>( It.IsAny>>(), It.IsAny(), It.IsAny(), It.IsAny())) .Returns(documents); } private void SetupKeyedReader(List> documents) { Reader = new Mock(); Reader .Setup( x => x.GetAll, int>( It.IsAny, bool>>>(), It.IsAny(), It.IsAny())) .Returns(documents); } #endregion }