diff --git a/CHANGELOG.md b/CHANGELOG.md index 995690c..f5e61f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,8 @@ ## [Unreleased] -### Fixed +### Changed -Populate default PrimaryEntityId in plugin execution context DynamicsValue/fake-xrm-easy#8 +Populate OwningExtension in plugin execution context from default fake plugin context DynamicsValue/fake-xrm-easy#17 +Populate PrimaryEntityId in plugin execution context from default fake plugin context DynamicsValue/fake-xrm-easy#8 ## [2.0.1-rc1] - Initial release \ No newline at end of file diff --git a/src/FakeXrmEasy.Plugins/XrmFakedPluginContextProperties.cs b/src/FakeXrmEasy.Plugins/XrmFakedPluginContextProperties.cs index 1746232..740035c 100644 --- a/src/FakeXrmEasy.Plugins/XrmFakedPluginContextProperties.cs +++ b/src/FakeXrmEasy.Plugins/XrmFakedPluginContextProperties.cs @@ -127,32 +127,38 @@ protected IExecutionContext GetFakedExecutionContext(XrmFakedPluginExecutionCont return context; } + /// + /// Populates plugin context properties from a given fake plugin context + /// + /// + /// protected void PopulateExecutionContextPropertiesFromFakedContext(IExecutionContext context, XrmFakedPluginExecutionContext ctx) { var newUserId = Guid.NewGuid(); + A.CallTo(() => context.BusinessUnitId).ReturnsLazily(() => ctx.BusinessUnitId); + A.CallTo(() => context.CorrelationId).ReturnsLazily(() => ctx.CorrelationId); A.CallTo(() => context.Depth).ReturnsLazily(() => ctx.Depth <= 0 ? 1 : ctx.Depth); - A.CallTo(() => context.IsExecutingOffline).ReturnsLazily(() => ctx.IsExecutingOffline); + A.CallTo(() => context.InitiatingUserId).ReturnsLazily(() => ctx.InitiatingUserId == Guid.Empty ? newUserId : ctx.InitiatingUserId); A.CallTo(() => context.InputParameters).ReturnsLazily(() => ctx.InputParameters); - A.CallTo(() => context.OutputParameters).ReturnsLazily(() => ctx.OutputParameters); - A.CallTo(() => context.PreEntityImages).ReturnsLazily(() => ctx.PreEntityImages); - A.CallTo(() => context.PostEntityImages).ReturnsLazily(() => ctx.PostEntityImages); + A.CallTo(() => context.IsExecutingOffline).ReturnsLazily(() => ctx.IsExecutingOffline); + A.CallTo(() => context.IsInTransaction).ReturnsLazily(() => ctx.IsInTransaction); + A.CallTo(() => context.IsolationMode).ReturnsLazily(() => ctx.IsolationMode); A.CallTo(() => context.MessageName).ReturnsLazily(() => ctx.MessageName); A.CallTo(() => context.Mode).ReturnsLazily(() => ctx.Mode); - A.CallTo(() => context.OrganizationName).ReturnsLazily(() => ctx.OrganizationName); + A.CallTo(() => context.OperationCreatedOn).ReturnsLazily(() => ctx.OperationCreatedOn); A.CallTo(() => context.OrganizationId).ReturnsLazily(() => ctx.OrganizationId); - A.CallTo(() => context.InitiatingUserId).ReturnsLazily(() => ctx.InitiatingUserId == Guid.Empty ? newUserId : ctx.InitiatingUserId); - A.CallTo(() => context.UserId).ReturnsLazily(() => ctx.UserId == Guid.Empty ? newUserId : ctx.UserId); + A.CallTo(() => context.OrganizationName).ReturnsLazily(() => ctx.OrganizationName); + A.CallTo(() => context.OutputParameters).ReturnsLazily(() => ctx.OutputParameters); + A.CallTo(() => context.OwningExtension).ReturnsLazily(() => ctx.OwningExtension); + A.CallTo(() => context.PostEntityImages).ReturnsLazily(() => ctx.PostEntityImages); + A.CallTo(() => context.PreEntityImages).ReturnsLazily(() => ctx.PreEntityImages); A.CallTo(() => context.PrimaryEntityId).ReturnsLazily(() => ctx.PrimaryEntityId); A.CallTo(() => context.PrimaryEntityName).ReturnsLazily(() => ctx.PrimaryEntityName); A.CallTo(() => context.SecondaryEntityName).ReturnsLazily(() => ctx.SecondaryEntityName); A.CallTo(() => context.SharedVariables).ReturnsLazily(() => ctx.SharedVariables); - A.CallTo(() => context.BusinessUnitId).ReturnsLazily(() => ctx.BusinessUnitId); - A.CallTo(() => context.CorrelationId).ReturnsLazily(() => ctx.CorrelationId); - A.CallTo(() => context.OperationCreatedOn).ReturnsLazily(() => ctx.OperationCreatedOn); - A.CallTo(() => context.IsolationMode).ReturnsLazily(() => ctx.IsolationMode); - A.CallTo(() => context.IsInTransaction).ReturnsLazily(() => ctx.IsInTransaction); - + A.CallTo(() => context.UserId).ReturnsLazily(() => ctx.UserId == Guid.Empty ? newUserId : ctx.UserId); + // Create message will pass an Entity as the target but this is not always true // For instance, a Delete request will receive an EntityReference if (ctx.InputParameters != null && ctx.InputParameters.ContainsKey("Target")) diff --git a/tests/FakeXrmEasy.Plugins.Tests/IXrmFakedContextPluginExtensions/ExecutePluginWithTests.cs b/tests/FakeXrmEasy.Plugins.Tests/IXrmFakedContextPluginExtensions/ExecutePluginWithTests.cs index 4f1f379..22c03d2 100644 --- a/tests/FakeXrmEasy.Plugins.Tests/IXrmFakedContextPluginExtensions/ExecutePluginWithTests.cs +++ b/tests/FakeXrmEasy.Plugins.Tests/IXrmFakedContextPluginExtensions/ExecutePluginWithTests.cs @@ -173,6 +173,7 @@ public void Should_populate_plugin_execution_context_properties_from_default_plu pluginContext.PostEntityImages = new EntityImageCollection(); pluginContext.OrganizationId = Guid.NewGuid(); pluginContext.OrganizationName = "SomeOrg"; + pluginContext.OwningExtension = new EntityReference(SdkMessageProcessingStep.EntityLogicalName, Guid.NewGuid()); pluginContext.InitiatingUserId = Guid.NewGuid(); pluginContext.UserId = Guid.NewGuid(); pluginContext.SecondaryEntityName = "none"; @@ -200,6 +201,8 @@ public void Should_populate_plugin_execution_context_properties_from_default_plu Assert.Equal(pluginContext.PostEntityImages, executionContext.PostEntityImages); Assert.Equal(pluginContext.OrganizationId, executionContext.OrganizationId); Assert.Equal(pluginContext.OrganizationName, executionContext.OrganizationName); + Assert.Equal(pluginContext.OwningExtension.Id, executionContext.OwningExtension.Id); + Assert.Equal(pluginContext.OwningExtension.LogicalName, executionContext.OwningExtension.LogicalName); Assert.Equal(pluginContext.InitiatingUserId, executionContext.InitiatingUserId); Assert.Equal(pluginContext.UserId, executionContext.UserId); Assert.Equal(pluginContext.SecondaryEntityName, executionContext.SecondaryEntityName);