Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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));
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
        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);
        }
Beispiel #8
0
        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);
        }
Beispiel #9
0
        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);
        }
Beispiel #10
0
        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));
        }
Beispiel #11
0
        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);
        }
Beispiel #12
0
        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);
        }
Beispiel #13
0
        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);
        }
Beispiel #14
0
        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);
        }
Beispiel #15
0
        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);
        }
Beispiel #16
0
        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);
        }
Beispiel #17
0
        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);
        }
Beispiel #18
0
        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
            }
        }
Beispiel #19
0
        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("----------------");
            }
        }