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 CountTests : TestKeyedReadOnlyMongoRepositoryContext { private readonly Expression> filter = document => document.SomeContent == "SomeContent"; [Fact] public void WithFilter_GetsOne() { // Arrange var count = Fixture.Create(); SetupReader(count); // Act var result = Sut.Count(filter); // Assert result.Should().Be(count); Reader.Verify( x => x.Count(filter, null, CancellationToken.None), Times.Once); } [Fact] public void WithFilterAndCancellationToken_GetsOne() { // Arrange var count = Fixture.Create(); var token = new CancellationToken(true); SetupReader(count); // Act var result = Sut.Count(filter, token); // Assert result.Should().Be(count); Reader.Verify( x => x.Count(filter, null, token), Times.Once); } [Fact] public void WithFilterAndPartitionKey_GetsOne() { // Arrange var count = Fixture.Create(); var partitionKey = Fixture.Create(); SetupReader(count); // Act var result = Sut.Count(filter, partitionKey); // Assert result.Should().Be(count); Reader.Verify( x => x.Count(filter, partitionKey, CancellationToken.None), Times.Once); } [Fact] public void WithFilterAndPartitionKeyAndCancellationToken_GetsOne() { // Arrange var count = Fixture.Create(); var partitionKey = Fixture.Create(); var token = new CancellationToken(true); SetupReader(count); // Act var result = Sut.Count(filter, partitionKey, token); // Assert result.Should().Be(count); Reader.Verify( x => x.Count(filter, partitionKey, token), Times.Once); } private void SetupReader(long count) { Reader = new Mock(); Reader .Setup( x => x.Count( It.IsAny>>(), It.IsAny(), It.IsAny())) .Returns(count); } }