using System; using System.Linq; using System.Threading; using System.Threading.Tasks; using AutoFixture; using CoreUnitTests.Infrastructure.Model; using FluentAssertions; using MongoDB.Bson; using MongoDB.Driver; using MongoDbGenericRepository; using Moq; using Xunit; namespace CoreUnitTests.DataAccessTests.MongoDbIndexHandlerTests; public class GetIndexNamesAsyncTests : BaseIndexTests { [Fact] public async Task WithNoParameters_ReturnsAllIndexNames() { // Arrange var indexNames = Fixture.CreateMany().ToList(); var indexes = indexNames.Select(x => new BsonDocument {{"name", x}}).ToList(); var collection = MockOf>(); var context = MockOf(); context .Setup(x => x.GetCollection(It.IsAny())) .Returns(collection.Object); var (cursor, manager) = SetupIndexes(indexes, collection); // Act var result = await Sut.GetIndexesNamesAsync(); // Assert result.Should().NotBeNull(); result.Should().BeEquivalentTo(indexNames); context.Verify(x => x.GetCollection(null)); manager.Verify(x => x.ListAsync(CancellationToken.None)); cursor.Verify(x => x.MoveNextAsync(CancellationToken.None)); } [Fact] public async Task WithPartitionKey_ReturnsAllIndexNames() { // Arrange var partitionKey = Fixture.Create(); var indexNames = Fixture.CreateMany().ToList(); var indexes = indexNames.Select(x => new BsonDocument {{"name", x}}).ToList(); var collection = MockOf>(); var context = MockOf(); context .Setup(x => x.GetCollection(It.IsAny())) .Returns(collection.Object); var (cursor, manager) = SetupIndexes(indexes, collection); // Act var result = await Sut.GetIndexesNamesAsync(partitionKey); // Assert result.Should().NotBeNull(); result.Should().BeEquivalentTo(indexNames); context.Verify(x => x.GetCollection(partitionKey)); manager.Verify(x => x.ListAsync(CancellationToken.None)); cursor.Verify(x => x.MoveNextAsync(CancellationToken.None)); } [Fact] public async Task WithCancellationToken_ReturnsAllIndexNames() { // Arrange var token = new CancellationToken(); var indexNames = Fixture.CreateMany().ToList(); var indexes = indexNames.Select(x => new BsonDocument {{"name", x}}).ToList(); var collection = MockOf>(); var context = MockOf(); context .Setup(x => x.GetCollection(It.IsAny())) .Returns(collection.Object); var (cursor, manager) = SetupIndexes(indexes, collection); // Act var result = await Sut.GetIndexesNamesAsync(cancellationToken:token); // Assert result.Should().NotBeNull(); result.Should().BeEquivalentTo(indexNames); context.Verify(x => x.GetCollection(null)); manager.Verify(x => x.ListAsync(token)); cursor.Verify(x => x.MoveNextAsync(token)); } [Fact] public async Task WithPartitionKeyCancellationToken_ReturnsAllIndexNames() { // Arrange var partitionKey = Fixture.Create(); var token = new CancellationToken(); var indexNames = Fixture.CreateMany().ToList(); var indexes = indexNames.Select(x => new BsonDocument {{"name", x}}).ToList(); var collection = MockOf>(); var context = MockOf(); context .Setup(x => x.GetCollection(It.IsAny())) .Returns(collection.Object); var (cursor, manager) = SetupIndexes(indexes, collection); // Act var result = await Sut.GetIndexesNamesAsync(partitionKey, token); // Assert result.Should().NotBeNull(); result.Should().BeEquivalentTo(indexNames); context.Verify(x => x.GetCollection(partitionKey)); manager.Verify(x => x.ListAsync(token)); cursor.Verify(x => x.MoveNextAsync(token)); } }