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