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()