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.KeyedReadOnlyMongoRepositoryTests; public class GetByMinTests : TestKeyedReadOnlyMongoRepositoryContext { private readonly Expression, bool>> filter = document => document.SomeContent == "SomeContent"; private readonly Expression, object>> selector = document => document.SomeValue; [Fact] public void WithFilterAndSelector_GetsOne() { // Arrange var document = Fixture.Create>(); SetupReader(document); // Act var result = Sut.GetByMin(filter, selector); // Assert result.Should().NotBeNull(); result.Should().BeEquivalentTo(document); Reader.Verify( x => x.GetByMin, int>(filter, selector, null, CancellationToken.None), Times.Once); } [Fact] public void WithFilterAndSelectorAndCancellationToken_GetsOne() { // Arrange var document = Fixture.Create>(); var token = new CancellationToken(true); SetupReader(document); // Act var result = Sut.GetByMin(filter, selector, token); // Assert result.Should().NotBeNull(); result.Should().BeEquivalentTo(document); Reader.Verify( x => x.GetByMin, int>(filter, selector, null, token), Times.Once); } [Fact] public void WithFilterAndSelectorAndPartitionKey_GetsOne() { // Arrange var document = Fixture.Create>(); var partitionKey = Fixture.Create(); SetupReader(document); // Act var result = Sut.GetByMin(filter, selector, partitionKey); // Assert result.Should().NotBeNull(); result.Should().BeEquivalentTo(document); Reader.Verify( x => x.GetByMin, int>(filter, selector, partitionKey, CancellationToken.None), Times.Once); } [Fact] public void WithFilterAndSelectorAndPartitionKeyAndCancellationToken_GetsOne() { // Arrange var document = Fixture.Create>(); var partitionKey = Fixture.Create(); var token = new CancellationToken(true); SetupReader(document); // Act var result = Sut.GetByMin(filter, selector, partitionKey, token); // Assert result.Should().NotBeNull(); result.Should().BeEquivalentTo(document); Reader.Verify( x => x.GetByMin, int>(filter, selector, partitionKey, token), Times.Once); } private void SetupReader(TestDocumentWithKey document) { Reader = new Mock(); Reader .Setup( x => x.GetByMin, int>( It.IsAny, bool>>>(), It.IsAny, object>>>(), It.IsAny(), It.IsAny())) .Returns(document); } }