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 { public class UpdateTestsPartitionedTKeyDocument : IDocument, IPartitionedDocument { [BsonId] public Guid Id { get; set; } public int Version { get; set; } public UpdateTestsPartitionedTKeyDocument() { Id = Guid.NewGuid(); Version = 2; PartitionKey = "TestPartitionKey"; Children = new List(); } public string PartitionKey { get; set; } public string SomeContent { get; set; } public List Children { get; set; } } [TestFixture] public class UpdatePartitionedTKeyTests : BaseMongoDbRepositoryTests { [Test] public void PartitionedUpdateOne() { // Arrange var document = CreateTestDocument(); SUT.AddOne(document); document.SomeContent = "UpdateOneContent"; // Act var result = SUT.UpdateOne(document); // Assert Assert.IsTrue(result); var updatedDocument = SUT.GetById(document.Id, PartitionKey); Assert.IsNotNull(updatedDocument); Assert.AreEqual("UpdateOneContent", updatedDocument.SomeContent); } [Test] public async Task PartitionedUpdateOneAsync() { // Arrange var document = CreateTestDocument(); SUT.AddOne(document); document.SomeContent = "UpdateOneAsyncContent"; // Act var result = await SUT.UpdateOneAsync(document); // Assert Assert.IsTrue(result); var updatedDocument = SUT.GetById(document.Id, PartitionKey); Assert.IsNotNull(updatedDocument); Assert.AreEqual("UpdateOneAsyncContent", updatedDocument.SomeContent); } [Test] public async Task UpdateOneAsyncWithUpdateDefinition() { // Arrange var document = CreateTestDocument(); SUT.AddOne(document); var childrenToAdd = new List { new Child("testType1", "testValue1"), new Child("testType2", "testValue2") }; var updateDef = Builders.Update.AddToSetEach(p => p.Children, childrenToAdd); // Act var result = await SUT.UpdateOneAsync(document, updateDef); // Assert Assert.IsTrue(result); var updatedDocument = SUT.GetById(document.Id, document.PartitionKey); 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(document); var childrenToAdd = new List { new Child("testType1", "testValue1"), new Child("testType2", "testValue2") }; var updateDef = Builders.Update.AddToSetEach(p => p.Children, childrenToAdd); // Act var result = SUT.UpdateOne(document, updateDef); // Assert Assert.IsTrue(result); var updatedDocument = SUT.GetById(document.Id, document.PartitionKey); 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); } } }