using System; using System.Threading; using System.Threading.Tasks; using AutoFixture; using CoreUnitTests.Infrastructure; using CoreUnitTests.Infrastructure.Model; using FluentAssertions; using MongoDbGenericRepository.DataAccess.Read; using Moq; using Xunit; namespace CoreUnitTests.ReadOnlyMongoRepositoryTests; public class GetByIdAsyncTests : TestReadOnlyMongoRepositoryContext { [Fact] public async Task WithId_Gets() { // Arrange var document = Fixture.Create(); SetupReader(document); // Act var result = await Sut.GetByIdAsync(document.Id); // Assert result.Should().NotBeNull(); result.Should().BeEquivalentTo(document); Reader.Verify( x => x.GetByIdAsync(document.Id, null, CancellationToken.None), Times.Once); } [Fact] public async Task WithIdAndCancellationToken_Gets() { // Arrange var document = Fixture.Create(); var token = new CancellationToken(true); SetupReader(document); // Act var result = await Sut.GetByIdAsync(document.Id, token); // Assert result.Should().NotBeNull(); result.Should().BeEquivalentTo(document); Reader.Verify( x => x.GetByIdAsync(document.Id, null, token), Times.Once); } [Fact] public async Task WithIdAndPartitionKey_Gets() { // Arrange var document = Fixture.Create(); var partitionKey = Fixture.Create(); SetupReader(document); // Act var result = await Sut.GetByIdAsync(document.Id, partitionKey); // Assert result.Should().NotBeNull(); result.Should().BeEquivalentTo(document); Reader.Verify( x => x.GetByIdAsync(document.Id, partitionKey, CancellationToken.None), Times.Once); } [Fact] public async Task WithIdAndPartitionKeyAndCancellationToken_Gets() { // Arrange var document = Fixture.Create(); var partitionKey = Fixture.Create(); var token = new CancellationToken(true); SetupReader(document); // Act var result = await Sut.GetByIdAsync(document.Id, partitionKey, token); // Assert result.Should().NotBeNull(); result.Should().BeEquivalentTo(document); Reader.Verify( x => x.GetByIdAsync(document.Id, partitionKey, token), Times.Once); } private void SetupReader(TestDocument document) { Reader = new Mock(); Reader .Setup( x => x.GetByIdAsync( It.IsAny(), It.IsAny(), It.IsAny())) .ReturnsAsync(document); } #region Keyed [Fact] public async Task Keyed_WithId_Gets() { // Arrange var document = Fixture.Create>(); SetupKeyedReader(document); // Act var result = await Sut.GetByIdAsync, int>(document.Id); // Assert result.Should().NotBeNull(); result.Should().BeEquivalentTo(document); Reader.Verify( x => x.GetByIdAsync, int>(document.Id, null, CancellationToken.None), Times.Once); } [Fact] public async Task Keyed_WithIdAndCancellationToken_Gets() { // Arrange var document = Fixture.Create>(); var token = new CancellationToken(true); SetupKeyedReader(document); // Act var result = await Sut.GetByIdAsync, int>(document.Id, token); // Assert result.Should().NotBeNull(); result.Should().BeEquivalentTo(document); Reader.Verify( x => x.GetByIdAsync, int>(document.Id, null, token), Times.Once); } [Fact] public async Task Keyed_WithIdAndPartitionKey_Gets() { // Arrange var document = Fixture.Create>(); var partitionKey = Fixture.Create(); SetupKeyedReader(document); // Act var result = await Sut.GetByIdAsync, int>(document.Id, partitionKey); // Assert result.Should().NotBeNull(); result.Should().BeEquivalentTo(document); Reader.Verify( x => x.GetByIdAsync, int>(document.Id, partitionKey, CancellationToken.None), Times.Once); } [Fact] public async Task Keyed_WithIdAndPartitionKeyAndCancellationToken_Gets() { // Arrange var document = Fixture.Create>(); var partitionKey = Fixture.Create(); var token = new CancellationToken(true); SetupKeyedReader(document); // Act var result = await Sut.GetByIdAsync, int>(document.Id, partitionKey, token); // Assert result.Should().NotBeNull(); result.Should().BeEquivalentTo(document); Reader.Verify( x => x.GetByIdAsync, int>(document.Id, partitionKey, token), Times.Once); } private void SetupKeyedReader(TestDocumentWithKey document) { Reader = new Mock(); Reader .Setup( x => x.GetByIdAsync, int>( It.IsAny(), It.IsAny(), It.IsAny())) .ReturnsAsync(document); } #endregion }