using System; using System.Linq.Expressions; using System.Threading; using AutoFixture; using CoreUnitTests.Infrastructure; using CoreUnitTests.Infrastructure.Model; using FluentAssertions; using MongoDbGenericRepository.DataAccess.Read; using Moq; using Xunit; namespace CoreUnitTests.ReadOnlyMongoRepositoryTests; public class GetMaxValueTests : TestReadOnlyMongoRepositoryContext { private readonly Expression> filter = document => document.SomeContent == "SomeContent"; private readonly Expression> selector = document => document.SomeValue; [Fact] public void WithFilterAndSelector_GetsMaxValue() { // Arrange var value = Fixture.Create(); SetupReader(value); // Act var result = Sut.GetMaxValue(filter, selector); // Assert result.Should().Be(value); Reader.Verify( x => x.GetMaxValue(filter, selector, null, CancellationToken.None), Times.Once); } [Fact] public void WithFilterAndSelectorAndCancellationToken_GetsMaxValue() { // Arrange var value = Fixture.Create(); var token = new CancellationToken(true); SetupReader(value); // Act var result = Sut.GetMaxValue(filter, selector, token); // Assert result.Should().Be(value); Reader.Verify( x => x.GetMaxValue(filter, selector, null, token), Times.Once); } [Fact] public void WithFilterAndSelectorAndPartitionKey_GetsMaxValue() { // Arrange var value = Fixture.Create(); var partitionKey = Fixture.Create(); SetupReader(value); // Act var result = Sut.GetMaxValue(filter, selector, partitionKey); // Assert result.Should().Be(value); Reader.Verify( x => x.GetMaxValue(filter, selector, partitionKey, CancellationToken.None), Times.Once); } [Fact] public void WithFilterAndSelectorAndPartitionKeyAndCancellationToken_GetsMaxValue() { // Arrange var value = Fixture.Create(); var partitionKey = Fixture.Create(); var token = new CancellationToken(true); SetupReader(value); // Act var result = Sut.GetMaxValue(filter, selector, partitionKey, token); // Assert result.Should().Be(value); Reader.Verify( x => x.GetMaxValue(filter, selector, partitionKey, token), Times.Once); } private void SetupReader(int value) { Reader = new Mock(); Reader .Setup( x => x.GetMaxValue( It.IsAny>>(), It.IsAny>>(), It.IsAny(), It.IsAny())) .Returns(value); } #region Keyed private readonly Expression, bool>> keyedFilter = document => document.SomeContent == "SomeContent"; private readonly Expression, int>> keyedSelector = document => document.SomeValue; [Fact] public void Keyed_WithFilterAndSelector_GetsMaxValue() { // Arrange var value = Fixture.Create(); SetupKeyedReader(value); // Act var result = Sut.GetMaxValue, int, int>(keyedFilter, keyedSelector); // Assert result.Should().Be(value); Reader.Verify( x => x.GetMaxValue, int, int>(keyedFilter, keyedSelector, null, CancellationToken.None), Times.Once); } [Fact] public void Keyed_WithFilterAndSelectorAndCancellationToken_GetsMaxValue() { // Arrange var value = Fixture.Create(); var token = new CancellationToken(true); SetupKeyedReader(value); // Act var result = Sut.GetMaxValue, int, int>(keyedFilter, keyedSelector, token); // Assert result.Should().Be(value); Reader.Verify( x => x.GetMaxValue, int, int>(keyedFilter, keyedSelector, null, token), Times.Once); } [Fact] public void Keyed_WithFilterAndSelectorAndPartitionKey_GetsMaxValue() { // Arrange var value = Fixture.Create(); var partitionKey = Fixture.Create(); SetupKeyedReader(value); // Act var result = Sut.GetMaxValue, int, int>(keyedFilter, keyedSelector, partitionKey); // Assert result.Should().Be(value); Reader.Verify( x => x.GetMaxValue, int, int>(keyedFilter, keyedSelector, partitionKey, CancellationToken.None), Times.Once); } [Fact] public void Keyed_WithFilterAndSelectorAndPartitionKeyAndCancellationToken_GetsMaxValue() { // Arrange var value = Fixture.Create(); var partitionKey = Fixture.Create(); var token = new CancellationToken(true); SetupKeyedReader(value); // Act var result = Sut.GetMaxValue, int, int>(keyedFilter, keyedSelector, partitionKey, token); // Assert result.Should().Be(value); Reader.Verify( x => x.GetMaxValue, int, int>(keyedFilter, keyedSelector, partitionKey, token), Times.Once); } private void SetupKeyedReader(int value) { Reader = new Mock(); Reader .Setup( x => x.GetMaxValue, int, int>( It.IsAny, bool>>>(), It.IsAny, int>>>(), It.IsAny(), It.IsAny())) .Returns(value); } #endregion }