public void CommitRemovedObject() { int callCount = 0; int exptectedCallCount = 1; var organisationService = new Microsoft.Xrm.Sdk.Fakes.StubIOrganizationService(); organisationService.ExecuteOrganizationRequest = (request) => { callCount++; var results = new OrganizationResponse(); return(results); }; var crmUnitOfWork = new CrmUnitOfWork(organisationService); var contactRepository = new Xrm.Infrastructure.DataAccess.Crm.Fakes.StubContactRepository(organisationService, crmUnitOfWork); contactRepository.PersistRemovedEntityBase = (contact) => { var deleteRequest = new DeleteRequest() { Target = new EntityReference(Contact.EntityLogicalName, Guid.NewGuid()) }; crmUnitOfWork.Requests.Add(deleteRequest); }; contactRepository.Remove(new Xrm.Domain.Contact.Contact()); crmUnitOfWork.Commit(); Assert.AreEqual(exptectedCallCount, callCount); }
public void CommitModifiedObject() { int callCount = 0; int exptectedCallCount = 1; var organisationService = new Microsoft.Xrm.Sdk.Fakes.StubIOrganizationService(); organisationService.ExecuteOrganizationRequest = (request) => { callCount++; var results = new OrganizationResponse(); return results; }; var crmUnitOfWork = new CrmUnitOfWork(organisationService); var contactRepository = new Xrm.Infrastructure.DataAccess.Crm.Fakes.StubContactRepository(organisationService, crmUnitOfWork); contactRepository.PersistUpdatedEntityBase = (contact) => { var sdkContact = new Contact(); sdkContact.ContactId = contact.Id; sdkContact.FirstName = "test"; var updateRequest = new UpdateRequest() { Target = sdkContact }; crmUnitOfWork.Requests.Add(updateRequest); }; contactRepository.Update(new Xrm.Domain.Contact.Contact()); crmUnitOfWork.Commit(); Assert.AreEqual(exptectedCallCount, callCount); }
public void RetrieveAccountsByNameTest() { // // Arrange // var entity1 = new Microsoft.Xrm.Sdk.Entity("account"); entity1.Id = Guid.NewGuid(); entity1["name"] = "abcabcabc"; var entity2 = new Microsoft.Xrm.Sdk.Entity("account"); entity2.Id = Guid.NewGuid(); entity2["name"] = "123123123"; var entity3 = new Microsoft.Xrm.Sdk.Entity("account"); entity3.Id = Guid.NewGuid(); entity3["name"] = "a1b2c3a1b2c3"; var service = new Microsoft.Xrm.Sdk.Fakes.StubIOrganizationService(); service.ExecuteOrganizationRequest = r => { List <Entity> entities = new List <Entity> { entity1, entity2 }; var response = new RetrieveMultipleResponse { Results = new ParameterCollection { { "EntityCollection", new EntityCollection(entities) } } }; return(response); }; string accountName = "abcabcabc"; IEnumerable <Microsoft.Xrm.Sdk.Entity> actual; LINQToCRM2 target = new LINQToCRM2(service); // // Act // actual = target.RetrieveAccountsByName(accountName); // // Assert // Assert.AreEqual(2, actual.Count()); Assert.AreEqual(entity1, actual.ElementAt(0)); Assert.AreEqual(entity2, actual.ElementAt(1)); }
public void GetByEmailTest() { Contact actual; string email = "*****@*****.**"; var entity1 = new CrmEntities.Contact(); entity1.Id = Guid.NewGuid(); entity1.FirstName = "Kate"; entity1.LastName = "O'conor"; entity1.EMailAddress1 = "*****@*****.**"; var entity2 = new CrmEntities.Contact(); entity2.Id = Guid.NewGuid(); entity2.FirstName = "John"; entity2.LastName = "Smith"; entity2.EMailAddress1 = "*****@*****.**"; var organisationService = new Microsoft.Xrm.Sdk.Fakes.StubIOrganizationService(); organisationService.ExecuteOrganizationRequest = r => { List <Entity> entities = new List <Entity> { entity2 }; var response = new RetrieveMultipleResponse { Results = new ParameterCollection { { "EntityCollection", new EntityCollection(entities) } } }; return(response); }; var crmUnitOfWork = new Xrm.Infrastructure.DataAccess.Crm.Fakes.StubCrmUnitOfWork(organisationService, 10); var target = new ContactRepository(organisationService, crmUnitOfWork); // // Act // actual = target.GetByEmail(email); // // Assert // Assert.IsNotNull(actual); Assert.AreEqual(entity2.EMailAddress1, actual.EmailAddress1); }
public void GetByEmailTest() { Contact actual; string email = "*****@*****.**"; var entity1 = new CrmEntities.Contact(); entity1.Id = Guid.NewGuid(); entity1.FirstName = "Kate"; entity1.LastName = "O'conor"; entity1.EMailAddress1 = "*****@*****.**"; var entity2 = new CrmEntities.Contact(); entity2.Id = Guid.NewGuid(); entity2.FirstName = "John"; entity2.LastName = "Smith"; entity2.EMailAddress1 = "*****@*****.**"; var organisationService = new Microsoft.Xrm.Sdk.Fakes.StubIOrganizationService(); organisationService.ExecuteOrganizationRequest = r => { List<Entity> entities = new List<Entity> { entity2 }; var response = new RetrieveMultipleResponse { Results = new ParameterCollection { { "EntityCollection", new EntityCollection(entities) } } }; return response; }; var crmUnitOfWork = new Xrm.Infrastructure.DataAccess.Crm.Fakes.StubCrmUnitOfWork(organisationService, 10); var target = new ContactRepository(organisationService, crmUnitOfWork); // // Act // actual = target.GetByEmail(email); // // Assert // Assert.IsNotNull(actual); Assert.AreEqual(entity2.EMailAddress1, actual.EmailAddress1); }
public void CreateAccountTest() { // // Arrange // string accountName = "abcabcabc"; Guid actual; Guid expected = Guid.Empty; int callCount = 0; Entity entity = null; var service = new Microsoft.Xrm.Sdk.Fakes.StubIOrganizationService(); service.ExecuteOrganizationRequest = r => { callCount++; var request = r as CreateRequest; entity = request.Target; expected = entity.Id; return(new CreateResponse { Results = new ParameterCollection { { "id", expected } } }); }; ContextMethods2 target = new ContextMethods2(service); // // Act // actual = target.CreateAccount(accountName); // // Assert // Assert.AreEqual(callCount, 1); // verify OrganizationServiceContext.AddObject is called once Assert.IsNotNull(entity); // verify OrganizationServiceContext.AddObject is called with not null object Assert.AreEqual(entity.LogicalName, "account"); // verify OrganizationServiceContext.AddObject is called with entity with proper entity name Assert.AreEqual(entity.GetAttributeValue <string>("name"), accountName); // verify OrganizationServiceContext.AddObject is called with entity with proper value set on name attribute Assert.AreEqual(expected, actual); }
public void RetrieveAccountsByIdTest() { // // Arrange // Guid id = Guid.NewGuid(); Microsoft.Xrm.Sdk.Entity expected = new Microsoft.Xrm.Sdk.Entity { Id = id }; var service = new Microsoft.Xrm.Sdk.Fakes.StubIOrganizationService(); service.ExecuteOrganizationRequest = r => { List <Entity> entities = new List <Entity> { expected }; var response = new RetrieveMultipleResponse { Results = new ParameterCollection { { "EntityCollection", new EntityCollection(entities) } } }; return(response); }; Microsoft.Xrm.Sdk.Entity actual; LINQToCRM2 target = new LINQToCRM2(service); // // Act // actual = target.RetrieveAccountsById(id); // // Assert // Assert.AreEqual(expected, actual); }
public void IsMemberInTeamTest() { // // Arrange // Guid userId = Guid.NewGuid(); Guid teamId = Guid.NewGuid(); bool expected = true; AddMemberTeamActivity target = new AddMemberTeamActivity(); // IOrganizationService var service = new Microsoft.Xrm.Sdk.Fakes.StubIOrganizationService(); service.ExecuteOrganizationRequest = r => { List <Entity> entities = new List <Entity> { new Entity() }; var response = new RetrieveMultipleResponse { Results = new ParameterCollection { { "EntityCollection", new EntityCollection(entities) } } }; return(response); }; // // Act // var actual = target.IsMemberInTeam(service, teamId, userId); // // Assert // Assert.AreEqual(expected, actual); }
public void PersistAddedTest() { var contact = new Contact(); contact.Id = Guid.NewGuid(); contact.Firstname = "Kate"; contact.Lastname = "Smith"; var organisationService = new Microsoft.Xrm.Sdk.Fakes.StubIOrganizationService(); var crmUnitOfWork = new Xrm.Infrastructure.DataAccess.Crm.Fakes.StubCrmUnitOfWork(organisationService, 10); var target = new ContactRepository(organisationService, crmUnitOfWork); // // Act // target.PersistAdded(contact); // // Assert // Assert.AreEqual(1, crmUnitOfWork.Requests.Count); }
public void RetrieveAccountIdByNameTest() { // // Arrange // IEnumerable<Guid> actual; IEnumerable<Guid> expected = new List<Guid> { Guid.NewGuid(), Guid.NewGuid() }; int callCount = 0; var service = new Microsoft.Xrm.Sdk.Fakes.StubIOrganizationService(); service.RetrieveMultipleQueryBase = (query) => { callCount++; var results = new EntityCollection(); results.Entities.AddRange( new Entity("account") { Attributes = { { "accountid", expected.ElementAt(0) } } }, new Entity("account") { Attributes = { { "accountid", expected.ElementAt(1) } } }); return results; }; OrganizationServiceMethods target = new OrganizationServiceMethods(service); // // Act // actual = target.RetrieveAccountIdByName("TestName"); // // Assert // Assert.AreEqual(callCount, 1); // verify OrganizationServiceContext.RetrieveVersion is called once Assert.AreEqual(expected.Count(), actual.Count()); Assert.AreEqual(expected.ElementAt(0), actual.ElementAt(0)); Assert.AreEqual(expected.ElementAt(1), actual.ElementAt(1)); }
public void PersistUpdatedTest() { var contact = new Contact(); contact.Id = Guid.NewGuid(); contact.Firstname = "Kate"; contact.Lastname = "O'conor"; var organisationService = new Microsoft.Xrm.Sdk.Fakes.StubIOrganizationService(); var crmUnitOfWork = new Xrm.Infrastructure.DataAccess.Crm.Fakes.StubCrmUnitOfWork(organisationService, 10); var target = new ContactRepository(organisationService, crmUnitOfWork); // // Act // target.PersistUpdated(contact); // // Assert // Assert.AreEqual(1, crmUnitOfWork.Requests.Count); }
public void RetrieveVersionTest() { // // Arrange // string actual; string expected = "5.0.9690.2243"; int callCount = 0; var service = new Microsoft.Xrm.Sdk.Fakes.StubIOrganizationService(); service.ExecuteOrganizationRequest = r => { callCount++; return(new RetrieveVersionResponse { Results = new ParameterCollection { { "Version", expected } } }); }; CrmContextMethods2 target = new CrmContextMethods2(service); // // Act // actual = target.RetrieveVersion(); // // Assert // Assert.AreEqual(callCount, 1); // verify OrganizationServiceContext.RetrieveVersion is called once Assert.AreEqual(expected, actual); }
public void CreateAccountTest() { // // Arrange // string accountName = "abcabcabc"; Guid actual; Guid expected = Guid.NewGuid(); int callCount = 0; Entity entity = null; var service = new Microsoft.Xrm.Sdk.Fakes.StubIOrganizationService(); service.CreateEntity = e => { callCount++; entity = e; return(expected); }; CrmContextMethods2 target = new CrmContextMethods2(service); // // Act // actual = target.CreateAccount(accountName); // // Assert // Assert.AreEqual(callCount, 1); // verify OrganizationServiceContext.Create is called once Assert.IsNotNull(entity); // verify OrganizationServiceContext.Create is called with not null object Assert.AreEqual(entity.LogicalName, "account"); // verify OrganizationServiceContext.Create is called with entity with proper entity name Assert.AreEqual(entity.GetAttributeValue <string>("name"), accountName); // verify OrganizationServiceContext.Create is called with entity with proper value set on name attribute Assert.AreEqual(expected, actual); }
public void CommitModifiedObject() { int callCount = 0; int exptectedCallCount = 1; var organisationService = new Microsoft.Xrm.Sdk.Fakes.StubIOrganizationService(); organisationService.ExecuteOrganizationRequest = (request) => { callCount++; var results = new OrganizationResponse(); return(results); }; var crmUnitOfWork = new CrmUnitOfWork(organisationService); var contactRepository = new Xrm.Infrastructure.DataAccess.Crm.Fakes.StubContactRepository(organisationService, crmUnitOfWork); contactRepository.PersistUpdatedEntityBase = (contact) => { var sdkContact = new Contact(); sdkContact.ContactId = contact.Id; sdkContact.FirstName = "test"; var updateRequest = new UpdateRequest() { Target = sdkContact }; crmUnitOfWork.Requests.Add(updateRequest); }; contactRepository.Update(new Xrm.Domain.Contact.Contact()); crmUnitOfWork.Commit(); Assert.AreEqual(exptectedCallCount, callCount); }
public void ExecuteTest() { // // Arrange // Guid actualUserId = Guid.NewGuid(); Guid actualTeamId = Guid.NewGuid(); var workflowUserId = Guid.NewGuid(); var workflowCorrelationId = Guid.NewGuid(); var workflowInitiatingUserId = Guid.NewGuid(); // IOrganizationService var service = new Microsoft.Xrm.Sdk.Fakes.StubIOrganizationService(); service.ExecuteOrganizationRequest = r => { AddMembersTeamRequest request = r as AddMembersTeamRequest; actualUserId = request.MemberIds[0]; actualTeamId = request.TeamId; return(new AddMembersTeamResponse()); }; // IWorkflowContext var workflowContext = new Microsoft.Xrm.Sdk.Workflow.Fakes.StubIWorkflowContext(); workflowContext.UserIdGet = () => { return(workflowUserId); }; workflowContext.CorrelationIdGet = () => { return(workflowCorrelationId); }; workflowContext.InitiatingUserIdGet = () => { return(workflowInitiatingUserId); }; // ITracingService var tracingService = new Microsoft.Xrm.Sdk.Fakes.StubITracingService(); tracingService.TraceStringObjectArray = (f, o) => { Debug.WriteLine(f, o); }; // IOrganizationServiceFactory var factory = new Microsoft.Xrm.Sdk.Fakes.StubIOrganizationServiceFactory(); factory.CreateOrganizationServiceNullableOfGuid = id => { return(service); }; var expectedUserId = Guid.NewGuid(); var expectedTeamId = Guid.NewGuid(); AddMemberTeamActivity target = new AddMemberTeamActivity(); using (ShimsContext.Create()) { var fakeTarget = new DynamicsCRMUnitTest.Workflow.Fakes.ShimAddMemberTeamActivity(target); fakeTarget.IsMemberInTeamIOrganizationServiceGuidGuid = (svc, teamId, memberId) => { return(false); }; var invoker = new WorkflowInvoker(target); invoker.Extensions.Add <ITracingService>(() => tracingService); invoker.Extensions.Add <IWorkflowContext>(() => workflowContext); invoker.Extensions.Add <IOrganizationServiceFactory>(() => factory); var inputs = new Dictionary <string, object> { { "User", new EntityReference("systemuser", expectedUserId) }, { "Team", new EntityReference("team", expectedTeamId) } }; // // Act // var outputs = invoker.Invoke(inputs); } // // Assert // Assert.AreEqual(expectedUserId, actualUserId); Assert.AreEqual(expectedTeamId, actualTeamId); }
public void CommitRemovedObject() { int callCount = 0; int exptectedCallCount = 1; var organisationService = new Microsoft.Xrm.Sdk.Fakes.StubIOrganizationService(); organisationService.ExecuteOrganizationRequest = (request) => { callCount++; var results = new OrganizationResponse(); return results; }; var crmUnitOfWork = new CrmUnitOfWork(organisationService); var contactRepository = new Xrm.Infrastructure.DataAccess.Crm.Fakes.StubContactRepository(organisationService, crmUnitOfWork); contactRepository.PersistRemovedEntityBase = (contact) => { var deleteRequest = new DeleteRequest() { Target = new EntityReference(Contact.EntityLogicalName, Guid.NewGuid()) }; crmUnitOfWork.Requests.Add(deleteRequest); }; contactRepository.Remove(new Xrm.Domain.Contact.Contact()); crmUnitOfWork.Commit(); Assert.AreEqual(exptectedCallCount, callCount); }
public void ExecuteTest() { // // Arrange // string unsecure = "unsecure"; string secure = "secure"; Plugin target = new Plugin(unsecure, secure); var accountId = Guid.NewGuid(); var previousNumber = 3; var expected = 4; var actual = 0; // IOrganizationService var service = new Microsoft.Xrm.Sdk.Fakes.StubIOrganizationService(); service.RetrieveStringGuidColumnSet = (entityName, id, columns) => { return(new Microsoft.Xrm.Sdk.Entity("account") { Id = accountId, Attributes = { { "numberofemployees", previousNumber } } }); }; service.UpdateEntity = (entity) => { actual = entity.GetAttributeValue <int>("numberofemployees"); }; // IPluginExecutionContext var pluginExecutionContext = new Microsoft.Xrm.Sdk.Fakes.StubIPluginExecutionContext(); pluginExecutionContext.StageGet = () => { return(40); }; pluginExecutionContext.MessageNameGet = () => { return("Create"); }; pluginExecutionContext.PrimaryEntityNameGet = () => { return("contact"); }; pluginExecutionContext.PostEntityImagesGet = () => { return(new EntityImageCollection { { "PostCreateImage", new Microsoft.Xrm.Sdk.Entity("contact") { Attributes = { { "parentcustomerid", new EntityReference("account", accountId) } } } } }); }; // ITracingService var tracingService = new Microsoft.Xrm.Sdk.Fakes.StubITracingService(); tracingService.TraceStringObjectArray = (f, o) => { Debug.WriteLine(f, o); }; // IOrganizationServiceFactory var factory = new Microsoft.Xrm.Sdk.Fakes.StubIOrganizationServiceFactory(); factory.CreateOrganizationServiceNullableOfGuid = id => { return(service); }; // IServiceProvider var serviceProvider = new System.Fakes.StubIServiceProvider(); serviceProvider.GetServiceType = t => { if (t == typeof(IPluginExecutionContext)) { return(pluginExecutionContext); } else if (t == typeof(ITracingService)) { return(tracingService); } else if (t == typeof(IOrganizationServiceFactory)) { return(factory); } return(null); }; // // Act // target.Execute(serviceProvider); // // Assert // Assert.AreEqual(expected, actual); }
public void RegisterPluginCode() { // Assemble using (ShimsContext.Create()) { #region Arrange Fakes.ShimQueries.GetPluginStepsOrganizationServiceContextString = (OrganizationServiceContext context, string name) => { // Return no existing steps return(new List <SdkMessageProcessingStep>()); }; var trace = new TraceLogger(); List <Entity> created = new List <Entity>(); IOrganizationService service = new Microsoft.Xrm.Sdk.Fakes.StubIOrganizationService() { CreateEntity = delegate(Entity entity) { created.Add(entity); return(Guid.NewGuid()); }, ExecuteOrganizationRequest = delegate(OrganizationRequest request) { if (request.GetType() == typeof(RetrieveMultipleRequest)) { var query = request as RetrieveMultipleRequest; var queryExpression = query.Query as QueryExpression; var results = new List <Entity>(); switch (queryExpression.EntityName) { case SdkMessageFilter.EntityLogicalName: results.Add(new SdkMessageFilter() { SdkMessageFilterId = Guid.NewGuid(), SdkMessageId = new EntityReference(SdkMessage.EntityLogicalName, Guid.NewGuid()) }); break; } return(new Microsoft.Xrm.Sdk.Messages.Fakes.ShimRetrieveMultipleResponse() { EntityCollectionGet = delegate() { return new EntityCollection(results); } }); } else { throw new Exception("Unexpected Call"); } } }; #endregion #region Act using (var ctx = new OrganizationServiceContext(service)) { var pluginRegistration = new PluginRegistraton(service, ctx, trace); pluginRegistration.RegisterPlugin(@"..\..\..\TestPlugin\bin\Debug\TestPlugin.dll"); } #endregion #region Assert Assert.AreEqual(1, created.Where(a => a.GetType() == typeof(PluginAssembly)).Count(), "1 Assembly"); Assert.AreEqual(1, created.Where(a => a.GetType() == typeof(PluginType)).Count(), "1 Type"); Assert.AreEqual(2, created.Where(a => a.GetType() == typeof(SdkMessageProcessingStep)).Count(), "2 Steps"); var step1 = created.Where(a => a.GetType() == typeof(SdkMessageProcessingStep)).FirstOrDefault().ToEntity <SdkMessageProcessingStep>(); Assert.AreEqual(step1.Name, "Create Step", "Name check"); #endregion } }
public void DeployHtmlJSWebresources() { using (ShimsContext.Create()) { #region Arrange Fakes.ShimQueries.GetPluginStepsOrganizationServiceContextString = (OrganizationServiceContext context, string name) => { // Return no existing steps return(new List <SdkMessageProcessingStep>()); }; var trace = new TraceLogger(); List <Entity> created = new List <Entity>(); int publishCount = 0; IOrganizationService service = new Microsoft.Xrm.Sdk.Fakes.StubIOrganizationService() { CreateEntity = delegate(Entity entity) { created.Add(entity); return(Guid.NewGuid()); }, ExecuteOrganizationRequest = delegate(OrganizationRequest request) { if (request.GetType() == typeof(RetrieveMultipleRequest)) { var query = request as RetrieveMultipleRequest; var queryExpression = query.Query as QueryExpression; var results = new List <Entity>(); switch (queryExpression.EntityName) { case WebResource.EntityLogicalName: break; } return(new Microsoft.Xrm.Sdk.Messages.Fakes.ShimRetrieveMultipleResponse() { EntityCollectionGet = delegate() { return new EntityCollection(results); } }); } else if (request.GetType() == typeof(PublishXmlRequest)) { publishCount++; return(new PublishXmlResponse()); } else { throw new Exception("Unexpected Call"); } } }; #endregion #region Act var config = new ConfigFile(); Guid id = Guid.NewGuid(); var tempFolder = Path.Combine(Path.GetTempPath(), id.ToString()); Directory.CreateDirectory(tempFolder); config.filePath = tempFolder; Directory.CreateDirectory(Path.Combine(tempFolder, @"new_")); // Create an html webresorce File.WriteAllText(Path.Combine(tempFolder, @"new_\page.htm"), @"<html><body>test</body></html>"); /// Create a js webresource File.WriteAllText(Path.Combine(tempFolder, @"new_\script.js"), @"<html><body>test</body></html>"); config.webresources = new List <WebresourceDeployConfig>(); config.webresources.Add(new WebresourceDeployConfig { files = new List <WebResourceFile>() }); config.webresources[0].files.Add(new WebResourceFile() { file = @"new_\page.htm", displayname = @"new_/page.htm" }); config.webresources[0].files.Add(new WebResourceFile() { file = @"new_\script.js", displayname = @"new_/script.js" }); using (var ctx = new OrganizationServiceContext(service)) { var webresourceDeploy = new DeployWebResourcesTask(service, trace); var guids = webresourceDeploy.DeployWebresources(ctx, config, config.webresources[0]); webresourceDeploy.PublishWebresources(guids); } #endregion #region Assert Assert.AreEqual(2, created.Where(a => a.GetType() == typeof(WebResource)).Count(), "2 Webresources created"); Assert.AreEqual((int)WebResourceWebResourceType.Webpage_HTML, created[0].ToEntity <WebResource>().WebResourceType.Value, "html file"); Assert.AreEqual(@"new_/page.htm", created[0].ToEntity <WebResource>().DisplayName, "html display name"); Assert.AreEqual(@"new_/page.htm", created[0].ToEntity <WebResource>().Name, "html name"); Assert.AreEqual((int)WebResourceWebResourceType.Script_JScript, created[1].ToEntity <WebResource>().WebResourceType.Value, "javascript file"); Assert.AreEqual(@"new_/script.js", created[1].ToEntity <WebResource>().DisplayName, "javascript display name"); Assert.AreEqual(@"new_/script.js", created[1].ToEntity <WebResource>().Name, "javascript name"); Assert.AreEqual(1, publishCount, "files published"); #endregion } }
/// <summary> /// Workflows the tester. /// </summary> static void WorkflowTester() { FrameworkInitializer fi = new FrameworkInitializer(); try { //DetailedLog.CreateLog("ContactCheckTester " + type.ToString()); var workflowUserId = Guid.NewGuid(); var workflowCorrelationId = Guid.NewGuid(); var workflowInitiatingUserId = Guid.NewGuid(); var service = new Microsoft.Xrm.Sdk.Fakes.StubIOrganizationService(); var workflowContext = new Microsoft.Xrm.Sdk.Workflow.Fakes.StubIWorkflowContext(); workflowContext.PrimaryEntityIdGet = () => { return(new Guid("13066B14-0B40-E511-8123-C4346BACFFD0")); }; workflowContext.UserIdGet = () => { return(workflowUserId); }; workflowContext.CorrelationIdGet = () => { return(workflowCorrelationId); }; workflowContext.InitiatingUserIdGet = () => { return(workflowInitiatingUserId); }; // ITracingService var tracingService = new Microsoft.Xrm.Sdk.Fakes.StubITracingService(); tracingService.TraceStringObjectArray = (f, o) => { Debug.WriteLine(f, o); }; // IOrganizationServiceFactory var factory = new Microsoft.Xrm.Sdk.Fakes.StubIOrganizationServiceFactory(); factory.CreateOrganizationServiceNullableOfGuid = id => { return(fi.cube.XrmService); }; Dictionary <string, object> arguments = new Dictionary <string, object>(); arguments.Add("parameter", "test"); Activity target = (Activity) new WorkflowSample(); var invoker = new WorkflowInvoker(target); invoker.Extensions.Add <ITracingService>(() => tracingService); invoker.Extensions.Add <IWorkflowContext>(() => workflowContext); invoker.Extensions.Add <IOrganizationServiceFactory>(() => factory); IDictionary <string, object> outputs = invoker.Invoke(arguments); //Console.WriteLine("SendEmail : {0}, DuplicateContact : {1}, NumberOfDupes : {2}", // outputs["SendEmail"], outputs["DuplicateContact"], outputs["NumberOfDupes"]); } catch (Exception ex) { fi.cube.LogSystem.CreateLog(ex.Message); } finally { fi.cube.LogSystem.CreateLog("----------------"); } }