more tests, in the ReadTests

This commit is contained in:
alexandre-spieser
2017-08-27 18:29:11 +00:00
parent 3b45c59415
commit c2e1e5f095
3 changed files with 162 additions and 17 deletions
@@ -1,19 +1,30 @@
using MongoDbGenericRepository.Models; using MongoDbGenericRepository.Models;
using NUnit.Framework; using NUnit.Framework;
using System.Collections.Generic;
using System.Configuration; using System.Configuration;
namespace IntegrationTests.Infrastructure namespace IntegrationTests.Infrastructure
{ {
public class BaseMongoDbRepositoryTests<T> where T : Document, new() public class BaseMongoDbRepositoryTests<T> where T : Document, new()
{ {
public T GetDocumentInstance() public T CreateTestDocument()
{ {
return new T(); return new T();
} }
public List<T> CreateTestDocuments(int numberOfDocumentsToCreate)
{
var docs = new List<T>();
for(var i = 0; i < numberOfDocumentsToCreate; i++)
{
docs.Add(new T());
}
return docs;
}
public BaseMongoDbRepositoryTests() public BaseMongoDbRepositoryTests()
{ {
var type = GetDocumentInstance(); var type = CreateTestDocument();
if (type is IPartitionedDocument) if (type is IPartitionedDocument)
{ {
PartitionKey = ((IPartitionedDocument)type).PartitionKey; PartitionKey = ((IPartitionedDocument)type).PartitionKey;
+132 -2
View File
@@ -1,5 +1,8 @@
using MongoDbGenericRepository.Models; using IntegrationTests.Infrastructure;
using MongoDbGenericRepository.Models;
using NUnit.Framework; using NUnit.Framework;
using System;
using System.Threading.Tasks;
namespace IntegrationTests namespace IntegrationTests
{ {
@@ -13,7 +16,134 @@ namespace IntegrationTests
} }
[TestFixture] [TestFixture]
public class ReadTests public class ReadTests : BaseMongoDbRepositoryTests<ReadTestsDocument>
{ {
[Test]
public async Task GetById()
{
// Arrange
var document = CreateTestDocument();
SUT.AddOne(document);
// Act
var result = await SUT.GetByIdAsync<ReadTestsDocument>(document.Id);
// Assert
Assert.IsNotNull(result);
}
[Test]
public async Task GetOneAsync()
{
// Arrange
var document = CreateTestDocument();
SUT.AddOne(document);
// Act
var result = await SUT.GetOneAsync<ReadTestsDocument>(x => x.Id == document.Id);
// Assert
Assert.IsNotNull(result);
}
[Test]
public void GetOne()
{
// Arrange
var document = CreateTestDocument();
SUT.AddOne(document);
// Act
var result = SUT.GetOne<ReadTestsDocument>(x => x.Id == document.Id);
// Assert
Assert.IsNotNull(result);
}
private class ProjectClass
{
public string Content { get; set; }
}
[Test]
public void GetCursor()
{
// Arrange
var document = CreateTestDocument();
SUT.AddOne(document);
// Act
var cursor = SUT.GetCursor<ReadTestsDocument>(x => x.Id == document.Id);
var count = cursor.Count();
// Assert
Assert.AreEqual(1, count);
}
[Test]
public async Task AnyAsyncReturnsTrue()
{
// Arrange
var document = CreateTestDocument();
SUT.AddOne(document);
// Act
var result = await SUT.AnyAsync<ReadTestsDocument>(x => x.Id == document.Id);
// Assert
Assert.AreEqual(true, result);
}
[Test]
public async Task AnyAsyncReturnsFalse()
{
// Arrange
var document = CreateTestDocument();
SUT.AddOne(document);
// Act
var result = await SUT.AnyAsync<ReadTestsDocument>(x => x.Id == Guid.NewGuid());
// Assert
Assert.AreEqual(false, result);
}
[Test]
public void AnyReturnsTrue()
{
// Arrange
var document = CreateTestDocument();
SUT.AddOne(document);
// Act
var result = SUT.Any<ReadTestsDocument>(x => x.Id == document.Id);
// Assert
Assert.AreEqual(true, result);
}
[Test]
public void AnyReturnsFalse()
{
// Arrange
var document = CreateTestDocument();
SUT.AddOne(document);
// Act
var result = SUT.Any<ReadTestsDocument>(x => x.Id == Guid.NewGuid());
// Assert
Assert.AreEqual(false, result);
}
[Test]
public async Task GetAllAsync()
{
// Arrange
var documents = CreateTestDocuments(5);
documents.ForEach(e => e.SomeContent = "GetAllAsyncContent");
SUT.AddMany(documents);
// Act
var result = await SUT.GetAllAsync<ReadTestsDocument>(x => x.SomeContent == "GetAllAsyncContent");
// Assert
Assert.AreEqual(5, result.Count);
}
[Test]
public void GetAll()
{
// Arrange
var documents = CreateTestDocuments(5);
documents.ForEach(e => e.SomeContent = "GetAllContent");
SUT.AddMany(documents);
// Act
var result = SUT.GetAll<ReadTestsDocument>(x => x.SomeContent == "GetAllContent");
// Assert
Assert.AreEqual(5, result.Count);
}
} }
} }
+15 -11
View File
@@ -205,11 +205,15 @@ namespace MongoDbGenericRepository
/// <param name="document">The document you want to add.</param> /// <param name="document">The document you want to add.</param>
public void AddMany<TDocument>(IEnumerable<TDocument> documents) where TDocument : IDocument public void AddMany<TDocument>(IEnumerable<TDocument> documents) where TDocument : IDocument
{ {
if (!documents.Any())
{
return;
}
foreach (var document in documents) foreach (var document in documents)
{ {
FormatDocument(document); FormatDocument(document);
} }
HandlePartitioned(documents.FirstOrDefault()).InsertMany(documents); HandlePartitioned(documents.FirstOrDefault()).InsertMany(documents.ToList());
} }
#endregion Create #endregion Create
@@ -236,7 +240,7 @@ namespace MongoDbGenericRepository
/// <param name="partitionKey">An optional partition key.</param> /// <param name="partitionKey">An optional partition key.</param>
public async Task<TDocument> GetOneAsync<TDocument>(Expression<Func<TDocument, bool>> filter, string partitionKey = null) where TDocument : IDocument public async Task<TDocument> GetOneAsync<TDocument>(Expression<Func<TDocument, bool>> filter, string partitionKey = null) where TDocument : IDocument
{ {
return await GetCollection<TDocument>().Find(filter).FirstOrDefaultAsync(); return await HandlePartitioned<TDocument>(partitionKey).Find(filter).FirstOrDefaultAsync();
} }
/// <summary> /// <summary>
@@ -247,7 +251,7 @@ namespace MongoDbGenericRepository
/// <param name="partitionKey">An optional partition key.</param> /// <param name="partitionKey">An optional partition key.</param>
public TDocument GetOne<TDocument>(Expression<Func<TDocument, bool>> filter, string partitionKey = null) where TDocument : IDocument public TDocument GetOne<TDocument>(Expression<Func<TDocument, bool>> filter, string partitionKey = null) where TDocument : IDocument
{ {
return GetCollection<TDocument>().Find(filter).FirstOrDefault(); return HandlePartitioned<TDocument>(partitionKey).Find(filter).FirstOrDefault();
} }
/// <summary> /// <summary>
@@ -258,7 +262,7 @@ namespace MongoDbGenericRepository
/// <param name="partitionKey">An optional partition key.</param> /// <param name="partitionKey">An optional partition key.</param>
public IFindFluent<TDocument, TDocument> GetCursor<TDocument>(Expression<Func<TDocument, bool>> filter, string partitionKey = null) where TDocument : IDocument public IFindFluent<TDocument, TDocument> GetCursor<TDocument>(Expression<Func<TDocument, bool>> filter, string partitionKey = null) where TDocument : IDocument
{ {
return GetCollection<TDocument>().Find(filter); return HandlePartitioned<TDocument>(partitionKey).Find(filter);
} }
/// <summary> /// <summary>
@@ -269,7 +273,7 @@ namespace MongoDbGenericRepository
/// <param name="partitionKey">An optional partition key.</param> /// <param name="partitionKey">An optional partition key.</param>
public async Task<bool> AnyAsync<TDocument>(Expression<Func<TDocument, bool>> filter, string partitionKey = null) where TDocument : IDocument public async Task<bool> AnyAsync<TDocument>(Expression<Func<TDocument, bool>> filter, string partitionKey = null) where TDocument : IDocument
{ {
var count = await GetCollection<TDocument>().CountAsync(filter); var count = await HandlePartitioned<TDocument>(partitionKey).CountAsync(filter);
return (count > 0); return (count > 0);
} }
@@ -281,7 +285,7 @@ namespace MongoDbGenericRepository
/// <param name="partitionKey">An optional partition key.</param> /// <param name="partitionKey">An optional partition key.</param>
public bool Any<TDocument>(Expression<Func<TDocument, bool>> filter, string partitionKey = null) where TDocument : IDocument public bool Any<TDocument>(Expression<Func<TDocument, bool>> filter, string partitionKey = null) where TDocument : IDocument
{ {
var count = GetCollection<TDocument>().Count(filter); var count = HandlePartitioned<TDocument>(partitionKey).Count(filter);
return (count > 0); return (count > 0);
} }
@@ -293,7 +297,7 @@ namespace MongoDbGenericRepository
/// <param name="partitionKey">An optional partition key.</param> /// <param name="partitionKey">An optional partition key.</param>
public async Task<List<TDocument>> GetAllAsync<TDocument>(Expression<Func<TDocument, bool>> filter, string partitionKey = null) where TDocument : IDocument public async Task<List<TDocument>> GetAllAsync<TDocument>(Expression<Func<TDocument, bool>> filter, string partitionKey = null) where TDocument : IDocument
{ {
return await GetCollection<TDocument>().Find(filter).ToListAsync(); return await HandlePartitioned<TDocument>(partitionKey).Find(filter).ToListAsync();
} }
/// <summary> /// <summary>
@@ -304,7 +308,7 @@ namespace MongoDbGenericRepository
/// <param name="partitionKey">An optional partition key.</param> /// <param name="partitionKey">An optional partition key.</param>
public List<TDocument> GetAll<TDocument>(Expression<Func<TDocument, bool>> filter, string partitionKey = null) where TDocument : IDocument public List<TDocument> GetAll<TDocument>(Expression<Func<TDocument, bool>> filter, string partitionKey = null) where TDocument : IDocument
{ {
return GetCollection<TDocument>().Find(filter).ToList(); return HandlePartitioned<TDocument>(partitionKey).Find(filter).ToList();
} }
/// <summary> /// <summary>
@@ -315,7 +319,7 @@ namespace MongoDbGenericRepository
/// <param name="partitionKey">An optional partitionKey</param> /// <param name="partitionKey">An optional partitionKey</param>
public async Task<long> CountAsync<TDocument>(Expression<Func<TDocument, bool>> filter, string partitionKey = null) where TDocument : IDocument public async Task<long> CountAsync<TDocument>(Expression<Func<TDocument, bool>> filter, string partitionKey = null) where TDocument : IDocument
{ {
return await GetCollection<TDocument>().CountAsync(filter); return await HandlePartitioned<TDocument>(partitionKey).CountAsync(filter);
} }
/// <summary> /// <summary>
@@ -339,7 +343,7 @@ namespace MongoDbGenericRepository
/// <param name="partitionKey">An optional partition key.</param> /// <param name="partitionKey">An optional partition key.</param>
public async Task<List<TDocument>> GetPaginatedAsync<TDocument>(Expression<Func<TDocument, bool>> filter, int skipNumber = 0, int takeNumber = 50, string partitionKey = null) where TDocument : IDocument public async Task<List<TDocument>> GetPaginatedAsync<TDocument>(Expression<Func<TDocument, bool>> filter, int skipNumber = 0, int takeNumber = 50, string partitionKey = null) where TDocument : IDocument
{ {
return await GetCollection<TDocument>().Find(filter).Skip(skipNumber).Limit(takeNumber).ToListAsync(); return await HandlePartitioned<TDocument>(partitionKey).Find(filter).Skip(skipNumber).Limit(takeNumber).ToListAsync();
} }
@@ -353,7 +357,7 @@ namespace MongoDbGenericRepository
where TDocument : IDocument where TDocument : IDocument
where TProjection : class, new() where TProjection : class, new()
{ {
return await GetCollection<TDocument>().Find(Builders<TDocument>.Filter.Where(filter)) return await HandlePartitioned<TDocument>(partitionKey).Find(filter)
.Project(projection) .Project(projection)
.FirstOrDefaultAsync(); .FirstOrDefaultAsync();
} }