Added grouping functionality and tests.

This commit is contained in:
alexandre-spieser
2017-10-01 22:30:30 +00:00
parent 76862b2caa
commit c07b1a5d7b
10 changed files with 1320 additions and 14 deletions
+136
View File
@@ -1,8 +1,10 @@
using IntegrationTests.Infrastructure;
using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Driver;
using MongoDbGenericRepository.Models;
using NUnit.Framework;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace IntegrationTests
@@ -17,8 +19,10 @@ namespace IntegrationTests
{
Id = Guid.NewGuid();
Version = 2;
Children = new List<Child>();
}
public string SomeContent { get; set; }
public List<Child> Children { get; set; }
}
[TestFixture]
@@ -55,5 +59,137 @@ namespace IntegrationTests
Assert.IsNotNull(updatedDocument);
Assert.AreEqual("UpdateOneAsyncContent", updatedDocument.SomeContent);
}
[Test]
public async Task UpdateOneAsyncWithUpdateDefinition()
{
// Arrange
var document = CreateTestDocument();
SUT.AddOne<UpdateTestsTKeyDocument, Guid>(document);
var childrenToAdd = new List<Child>
{
new Child("testType1", "testValue1"),
new Child("testType2", "testValue2")
};
var updateDef = Builders<UpdateTestsTKeyDocument>.Update.AddToSetEach(p => p.Children, childrenToAdd);
// Act
var result = await SUT.UpdateOneAsync<UpdateTestsTKeyDocument, Guid>(document, updateDef);
// Assert
Assert.IsTrue(result);
var updatedDocument = SUT.GetById<UpdateTestsTKeyDocument, Guid>(document.Id);
Assert.IsNotNull(updatedDocument);
Assert.AreEqual(childrenToAdd[0].Type, updatedDocument.Children[0].Type);
Assert.AreEqual(childrenToAdd[0].Value, updatedDocument.Children[0].Value);
Assert.AreEqual(childrenToAdd[1].Type, updatedDocument.Children[1].Type);
Assert.AreEqual(childrenToAdd[1].Value, updatedDocument.Children[1].Value);
}
[Test]
public void UpdateOneWithUpdateDefinition()
{
// Arrange
var document = CreateTestDocument();
SUT.AddOne<UpdateTestsTKeyDocument, Guid>(document);
var childrenToAdd = new List<Child>
{
new Child("testType1", "testValue1"),
new Child("testType2", "testValue2")
};
var updateDef = Builders<UpdateTestsTKeyDocument>.Update.AddToSetEach(p => p.Children, childrenToAdd);
// Act
var result = SUT.UpdateOne<UpdateTestsTKeyDocument, Guid>(document, updateDef);
// Assert
Assert.IsTrue(result);
var updatedDocument = SUT.GetById<UpdateTestsTKeyDocument, Guid>(document.Id);
Assert.IsNotNull(updatedDocument);
Assert.AreEqual(childrenToAdd[0].Type, updatedDocument.Children[0].Type);
Assert.AreEqual(childrenToAdd[0].Value, updatedDocument.Children[0].Value);
Assert.AreEqual(childrenToAdd[1].Type, updatedDocument.Children[1].Type);
Assert.AreEqual(childrenToAdd[1].Value, updatedDocument.Children[1].Value);
}
[Test]
public void UpdateOneWithFieldSelector()
{
// Arrange
var document = CreateTestDocument();
SUT.AddOne<UpdateTestsTKeyDocument, Guid>(document);
var childrenToAdd = new List<Child>
{
new Child("testType1", "testValue1"),
new Child("testType2", "testValue2")
};
var filter = Builders<UpdateTestsTKeyDocument>.Filter.Eq("Id", document.Id);
// Act
var result = SUT.UpdateOne<UpdateTestsTKeyDocument, Guid, List<Child>>(document, x => x.Children, childrenToAdd);
// Assert
Assert.IsTrue(result);
var updatedDocument = SUT.GetById<UpdateTestsTKeyDocument, Guid>(document.Id);
Assert.IsNotNull(updatedDocument);
Assert.AreEqual(childrenToAdd[0].Type, updatedDocument.Children[0].Type);
Assert.AreEqual(childrenToAdd[0].Value, updatedDocument.Children[0].Value);
Assert.AreEqual(childrenToAdd[1].Type, updatedDocument.Children[1].Type);
Assert.AreEqual(childrenToAdd[1].Value, updatedDocument.Children[1].Value);
}
[Test]
public async Task UpdateOneAsyncWithFieldSelector()
{
// Arrange
var document = CreateTestDocument();
SUT.AddOne<UpdateTestsTKeyDocument, Guid>(document);
var childrenToAdd = new List<Child>
{
new Child("testType1", "testValue1"),
new Child("testType2", "testValue2")
};
var filter = Builders<UpdateTestsTKeyDocument>.Filter.Eq("Id", document.Id);
// Act
var result = await SUT.UpdateOneAsync<UpdateTestsTKeyDocument, Guid, List<Child>>(document, x => x.Children, childrenToAdd);
// Assert
Assert.IsTrue(result);
var updatedDocument = SUT.GetById<UpdateTestsTKeyDocument, Guid>(document.Id);
Assert.IsNotNull(updatedDocument);
Assert.AreEqual(childrenToAdd[0].Type, updatedDocument.Children[0].Type);
Assert.AreEqual(childrenToAdd[0].Value, updatedDocument.Children[0].Value);
Assert.AreEqual(childrenToAdd[1].Type, updatedDocument.Children[1].Type);
Assert.AreEqual(childrenToAdd[1].Value, updatedDocument.Children[1].Value);
}
[Test]
public void UpdateOneWithFilterAndFieldSelector()
{
// Arrange
var document = CreateTestDocument();
SUT.AddOne<UpdateTestsTKeyDocument, Guid>(document);
var childrenToAdd = new List<Child>
{
new Child("testType1", "testValue1"),
new Child("testType2", "testValue2")
};
var filter = Builders<UpdateTestsTKeyDocument>.Filter.Eq("Id", document.Id);
// Act
var result = SUT.UpdateOne<UpdateTestsTKeyDocument, Guid, List<Child>>(filter, x => x.Children, childrenToAdd);
// Assert
Assert.IsTrue(result);
var updatedDocument = SUT.GetById<UpdateTestsTKeyDocument, Guid>(document.Id);
Assert.IsNotNull(updatedDocument);
Assert.AreEqual(childrenToAdd[0].Type, updatedDocument.Children[0].Type);
Assert.AreEqual(childrenToAdd[0].Value, updatedDocument.Children[0].Value);
Assert.AreEqual(childrenToAdd[1].Type, updatedDocument.Children[1].Type);
Assert.AreEqual(childrenToAdd[1].Value, updatedDocument.Children[1].Value);
}
}
}