using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; using AutoFixture; using CoreUnitTests.Infrastructure; using CoreUnitTests.Infrastructure.Model; using FluentAssertions; using MongoDB.Driver; using MongoDbGenericRepository; using MongoDbGenericRepository.DataAccess.Create; using Moq; using Xunit; namespace CoreUnitTests.DataAccessTests.MongoDbCreatorTests; public class AddManyTests : GenericTestContext { [Fact] public void WithDocuments_AddsMany() { // Arrange var documents = Fixture.CreateMany().ToList(); var context = MockOf(); var collection = MockOf>(); context .Setup(x => x.GetCollection(It.IsAny())) .Returns(collection.Object); // Act Sut.AddMany(documents); // Assert collection.Verify( x => x.InsertMany( It.Is>(l => l.All(d => documents.Contains(d))), null, default), Times.Once()); } [Fact] public void WithDocumentsHavingNoId_SetsId() { // Arrange var documents = Fixture .Build>() .Without(x => x.Id) .CreateMany() .ToList(); var context = MockOf(); var collection = MockOf>>(); context .Setup(x => x.GetCollection>(It.IsAny())) .Returns(collection.Object); // Act Sut.AddMany, string>(documents); // Assert collection.Verify( x => x.InsertMany( It.Is>>(l => l.All(d => documents.Contains(d))), null, default), Times.Once()); documents.Should().AllSatisfy(d => d.Id.Should().NotBeNull()); } [Fact] public void WithPartitionedDocument_AddsMany() { // Arrange var partitionKey = Fixture.Create(); var documents = Fixture.Build() .With(x => x.PartitionKey, partitionKey) .CreateMany() .ToList(); var context = MockOf(); var collection = MockOf>(); context .Setup(x => x.GetCollection(It.IsAny())) .Returns(collection.Object); // Act Sut.AddMany(documents); // Assert collection.Verify( x => x.InsertMany( It.Is>(l => l.All(d => documents.Contains(d))), null, default), Times.Once()); context.Verify(x => x.GetCollection(partitionKey), Times.Once()); } [Fact] public void WithDocumentsAndCancellationToken_AddsMany() { // Arrange var documents = Fixture.CreateMany().ToList(); var context = MockOf(); var collection = MockOf>(); var token = new CancellationToken(true); context .Setup(x => x.GetCollection(It.IsAny())) .Returns(collection.Object); // Act Sut.AddMany(documents, token); // Assert collection.Verify( x => x.InsertMany( It.Is>(l => l.All(d => documents.Contains(d))), null, token), Times.Once()); } [Fact] public void WithPartitionedDocumentAndCancellationToken_AddsOne() { // Arrange var partitionKey = Fixture.Create(); var documents = Fixture.Build() .With(x => x.PartitionKey, partitionKey) .CreateMany() .ToList(); var token = new CancellationToken(true); var context = MockOf(); var collection = MockOf>(); context .Setup(x => x.GetCollection(It.IsAny())) .Returns(collection.Object); // Act Sut.AddMany(documents, token); // Assert collection.Verify( x => x.InsertMany( It.Is>(l => l.All(d => documents.Contains(d))), null, token), Times.Once()); context.Verify(x => x.GetCollection(partitionKey), Times.Once()); } }