diff --git a/src/Digitall.Testing/Extensions/FakedDataverseBuilderExtensions.cs b/src/Digitall.Testing/Extensions/FakedDataverseBuilderExtensions.cs
index 7801d90..5a8a69e 100644
--- a/src/Digitall.Testing/Extensions/FakedDataverseBuilderExtensions.cs
+++ b/src/Digitall.Testing/Extensions/FakedDataverseBuilderExtensions.cs
@@ -32,4 +32,17 @@ public static FakedDataverseBuilder AddOrganizationRequests(this FakedDataverseB
builder.OrganizationService.AddRequests(requests);
return builder;
}
+
+ ///
+ /// Retrieves the underlying FakedDataverse service from the FakedDataverseBuilder at call time.
+ ///
+ /// The FakedDataverseBuilder instance.
+ /// The output parameter for the FakedDataverse service.
+ /// The same FakedDataverseBuilder instance for method chaining.
+ public static FakedDataverseBuilder GetFakedDataverse(this FakedDataverseBuilder builder, out FakedDataverse service)
+ {
+ // Assign the OrganizationService from the builder to the output parameter
+ service = builder.OrganizationService;
+ return builder;
+ }
}
diff --git a/src/Digitall.Testing/FakedDataverseBuilder.cs b/src/Digitall.Testing/FakedDataverseBuilder.cs
index 4a2b1f7..2599b3d 100644
--- a/src/Digitall.Testing/FakedDataverseBuilder.cs
+++ b/src/Digitall.Testing/FakedDataverseBuilder.cs
@@ -7,15 +7,41 @@ namespace Digitall.Testing;
public class FakedDataverseBuilder : PluginExecutionContextBuilder
{
+ ///
+ /// Creates a new instance of with a default instance of .
+ ///
public FakedDataverseBuilder()
{
OrganizationService = new FakedDataverse();
OrganizationService.AddDefaultRequests();
}
+ ///
+ /// Creates a new instance of with an instance of
+ /// that uses the given .
+ ///
+ public FakedDataverseBuilder(TimeProvider timeProvider)
+ {
+ // Create a new FakedDataverse instance with the given TimeProvider
+ OrganizationService = new FakedDataverse(timeProvider);
+
+ // Add all default requests to the OrganizationService
+ OrganizationService.AddDefaultRequests();
+ }
+
+ ///
+ /// Creates a new instance of with the provided instance.
+ ///
+ /// An existing instance of to use as the organization service.
+ public FakedDataverseBuilder(FakedDataverse fakedDataverse)
+ {
+ // Assign the provided FakedDataverse instance to the OrganizationService
+ OrganizationService = fakedDataverse;
+ }
+
public new FakedDataverse OrganizationService
{
get => base.OrganizationService as FakedDataverse ?? throw new InvalidOperationException(@"¯\_(ツ)_/¯");
- set { base.OrganizationService = value; }
+ private set { base.OrganizationService = value; }
}
}
diff --git a/tests/Digitall.Testing.Tests/PluginExecutionContextBuilderTests.cs b/tests/Digitall.Testing.Tests/PluginExecutionContextBuilderTests.cs
index f4daf52..2e83f8a 100644
--- a/tests/Digitall.Testing.Tests/PluginExecutionContextBuilderTests.cs
+++ b/tests/Digitall.Testing.Tests/PluginExecutionContextBuilderTests.cs
@@ -3,6 +3,7 @@
using Digitall.Testing.Tests.Fixtures;
using Digitall.Testing.Tests.Fixtures.SamplePlugin;
using FluentAssertions;
+using Microsoft.Extensions.Time.Testing;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using NSubstitute;
@@ -176,4 +177,37 @@ public void TestPlugin_Durchstich()
tracingService.Received().Trace("TestPlugin: Execute");
}
+
+ [TestMethod]
+ public void GetFakedDataverse_Should_Return_FakedDataverse()
+ {
+ var serviceProvider = new FakedDataverseBuilder()
+ .GetFakedDataverse(out var service)
+ .BuildServiceProvider();
+
+ service.Should().NotBeNull().And.BeOfType();
+ }
+
+ [TestMethod]
+ public void FakedDataverseBuilder_With_Custom_TimeProvider()
+ {
+ var serviceProvider = new FakedDataverseBuilder(new FakeTimeProvider(new DateTimeOffset(2000, 1, 1, 0, 0, 0, TimeSpan.Zero)))
+ .GetFakedDataverse(out var service)
+ .BuildServiceProvider();
+
+ service.Should().NotBeNull().And.BeOfType();
+ service.TimeProvider.GetUtcNow().Year.Should().Be(2000);
+ }
+
+ [TestMethod]
+ public void FakedDataverseBuilder_With_Custom_FakeDataverse()
+ {
+ var fakeDataverse = new FakedDataverse(new FakeTimeProvider(new DateTimeOffset(2000, 1, 1, 0, 0, 0, TimeSpan.Zero)));
+ var serviceProvider = new FakedDataverseBuilder(fakeDataverse)
+ .GetFakedDataverse(out var service)
+ .BuildServiceProvider();
+
+ service.Should().NotBeNull().And.BeOfType();
+ service.TimeProvider.GetUtcNow().Year.Should().Be(2000);
+ }
}