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); + } }