From 04752d3a70f89849d6a3ce63f9b064fc2701a154 Mon Sep 17 00:00:00 2001 From: Marcel Kummerow Date: Thu, 17 Apr 2025 14:26:44 +0200 Subject: [PATCH 1/3] feat: expose of FakeDataverse in FakeDataverseBuilder --- .../Extensions/FakedDataverseBuilderExtensions.cs | 13 +++++++++++++ .../PluginExecutionContextBuilderTests.cs | 12 ++++++++++++ 2 files changed, 25 insertions(+) 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/tests/Digitall.Testing.Tests/PluginExecutionContextBuilderTests.cs b/tests/Digitall.Testing.Tests/PluginExecutionContextBuilderTests.cs index f4daf52..b33b652 100644 --- a/tests/Digitall.Testing.Tests/PluginExecutionContextBuilderTests.cs +++ b/tests/Digitall.Testing.Tests/PluginExecutionContextBuilderTests.cs @@ -176,4 +176,16 @@ public void TestPlugin_Durchstich() tracingService.Received().Trace("TestPlugin: Execute"); } + + [TestMethod] + public void GetFakedDataverse_Should_Return_FakedDataverse() + { + var entity = new Entity("unittest", Guid.NewGuid()); + + var serviceProvider = new FakedDataverseBuilder() + .GetFakedDataverse(out var service) + .BuildServiceProvider(); + + service.Should().NotBeNull().And.BeOfType(); + } } From 110de947d7c235aff38137d4afb4b04d582e45b7 Mon Sep 17 00:00:00 2001 From: Marcel Kummerow Date: Thu, 17 Apr 2025 15:04:56 +0200 Subject: [PATCH 2/3] chore: mitigate access issue --- src/Digitall.Testing/FakedDataverseBuilder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Digitall.Testing/FakedDataverseBuilder.cs b/src/Digitall.Testing/FakedDataverseBuilder.cs index 4a2b1f7..9d6a22a 100644 --- a/src/Digitall.Testing/FakedDataverseBuilder.cs +++ b/src/Digitall.Testing/FakedDataverseBuilder.cs @@ -16,6 +16,6 @@ public FakedDataverseBuilder() public new FakedDataverse OrganizationService { get => base.OrganizationService as FakedDataverse ?? throw new InvalidOperationException(@"¯\_(ツ)_/¯"); - set { base.OrganizationService = value; } + private set { base.OrganizationService = value; } } } From 3779875e90d8d4fcb4ba93881613974f18c3471e Mon Sep 17 00:00:00 2001 From: Marcel Kummerow Date: Thu, 17 Apr 2025 15:21:14 +0200 Subject: [PATCH 3/3] feat: allow TimeProvider in FakedDataverseBuilder ctors --- src/Digitall.Testing/FakedDataverseBuilder.cs | 26 +++++++++++++++++++ .../PluginExecutionContextBuilderTests.cs | 26 +++++++++++++++++-- 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/src/Digitall.Testing/FakedDataverseBuilder.cs b/src/Digitall.Testing/FakedDataverseBuilder.cs index 9d6a22a..2599b3d 100644 --- a/src/Digitall.Testing/FakedDataverseBuilder.cs +++ b/src/Digitall.Testing/FakedDataverseBuilder.cs @@ -7,12 +7,38 @@ 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(@"¯\_(ツ)_/¯"); diff --git a/tests/Digitall.Testing.Tests/PluginExecutionContextBuilderTests.cs b/tests/Digitall.Testing.Tests/PluginExecutionContextBuilderTests.cs index b33b652..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; @@ -180,12 +181,33 @@ public void TestPlugin_Durchstich() [TestMethod] public void GetFakedDataverse_Should_Return_FakedDataverse() { - var entity = new Entity("unittest", Guid.NewGuid()); - 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); + } }