diff --git a/IntegrationTests/IntegrationTests.csproj b/IntegrationTests/IntegrationTests.csproj index 81ca024..3b39e6a 100644 --- a/IntegrationTests/IntegrationTests.csproj +++ b/IntegrationTests/IntegrationTests.csproj @@ -63,6 +63,7 @@ + diff --git a/IntegrationTests/ProjectPartitionedTests.cs b/IntegrationTests/ProjectPartitionedTests.cs new file mode 100644 index 0000000..11c3a69 --- /dev/null +++ b/IntegrationTests/ProjectPartitionedTests.cs @@ -0,0 +1,140 @@ +using IntegrationTests.Infrastructure; +using MongoDbGenericRepository.Models; +using NUnit.Framework; +using System; +using System.Linq; +using System.Threading.Tasks; + +namespace IntegrationTests +{ + public class ProjectTestsPartitionedDocument : PartitionedDocument + { + public ProjectTestsPartitionedDocument() : base("TestPartitionKey") + { + Version = 2; + Nested = new Nested + { + SomeDate = DateTime.UtcNow + }; + } + + public string SomeContent { get; set; } + + public Nested Nested { get; set; } + } + + public class ProjectPartitionedTests : BaseMongoDbRepositoryTests + { + [Test] + public async Task PartitionedProjectOneAsync() + { + // Arrange + const string someContent = "ProjectOneAsyncContent"; + var someDate = DateTime.UtcNow; + var document = CreateTestDocument(); + document.SomeContent = someContent; + document.Nested.SomeDate = someDate; + SUT.AddOne(document); + // Act + var result = await SUT.ProjectOneAsync( + x => x.Id == document.Id, + x => new MyProjection + { + SomeContent = x.SomeContent, + SomeDate = x.Nested.SomeDate + }, + PartitionKey); + // Assert + Assert.IsNotNull(result); + Assert.AreEqual(someContent, result.SomeContent); + Assert.AreEqual(someDate.Minute, result.SomeDate.Minute); + Assert.AreEqual(someDate.Second, result.SomeDate.Second); + } + + [Test] + public void PartitionedProjectOne() + { + // Arrange + const string someContent = "ProjectOneContent"; + var someDate = DateTime.UtcNow; + var document = CreateTestDocument(); + document.SomeContent = someContent; + document.Nested.SomeDate = someDate; + SUT.AddOne(document); + // Act + var result = SUT.ProjectOne( + x => x.Id == document.Id, + x => new MyProjection + { + SomeContent = x.SomeContent, + SomeDate = x.Nested.SomeDate + }, + PartitionKey); + // Assert + Assert.IsNotNull(result); + Assert.AreEqual(someContent, result.SomeContent); + Assert.AreEqual(someDate.Minute, result.SomeDate.Minute); + Assert.AreEqual(someDate.Second, result.SomeDate.Second); + } + + [Test] + public async Task PartitionedProjectManyAsync() + { + // Arrange + const string someContent = "ProjectManyAsyncContent"; + var someDate = DateTime.UtcNow; + var document = CreateTestDocuments(5); + document.ForEach(e => + { + e.SomeContent = someContent; + e.Nested.SomeDate = someDate; + }); + + SUT.AddMany(document); + // Act + var result = await SUT.ProjectManyAsync( + x => x.SomeContent == someContent, + x => new MyProjection + { + SomeContent = x.SomeContent, + SomeDate = x.Nested.SomeDate + }, + PartitionKey); + // Assert + Assert.AreEqual(5, result.Count); + Assert.AreEqual(someContent, result.First().SomeContent); + Assert.AreEqual(someDate.Minute, result.First().SomeDate.Minute); + Assert.AreEqual(someDate.Second, result.First().SomeDate.Second); + } + + [Test] + public void PartitionedProjectMany() + { + // Arrange + const string someContent = "ProjectManyContent"; + var someDate = DateTime.UtcNow; + var document = CreateTestDocuments(5); + document.ForEach(e => + { + e.SomeContent = someContent; + e.Nested.SomeDate = someDate; + }); + + SUT.AddMany(document); + // Act + var result = SUT.ProjectMany( + x => x.SomeContent == someContent, + x => new MyProjection + { + SomeContent = x.SomeContent, + SomeDate = x.Nested.SomeDate + }, + PartitionKey); + // Assert + Assert.AreEqual(5, result.Count); + Assert.AreEqual(someContent, result.First().SomeContent); + Assert.AreEqual(someDate.Minute, result.First().SomeDate.Minute); + Assert.AreEqual(someDate.Second, result.First().SomeDate.Second); + } + } +} diff --git a/IntegrationTests/ProjectTests.cs b/IntegrationTests/ProjectTests.cs index 971fd22..8189a31 100644 --- a/IntegrationTests/ProjectTests.cs +++ b/IntegrationTests/ProjectTests.cs @@ -10,7 +10,12 @@ namespace IntegrationTests public class Nested { public DateTime SomeDate { get; set; } + } + public class MyProjection + { + public DateTime SomeDate { get; set; } + public string SomeContent { get; set; } } public class ProjectTestsDocument : Document @@ -31,11 +36,7 @@ namespace IntegrationTests public class ProjectTests : BaseMongoDbRepositoryTests { - private class MyProjection - { - public DateTime SomeDate { get; set; } - public string SomeContent { get; set; } - } + [Test] public async Task ProjectOneAsync()