public void Initialize()
 {
     trace                            = A.Fake <ITracingService>();
     service                          = A.Fake <IOrganizationService>();
     entityMergeFactory               = A.Fake <IEntityMergeFactory>();
     pluginExecutionContext           = A.Fake <IPluginExecutionContext>();
     entityCacheMessageOutcomeService = new EntityCacheMessageOutcomeService(trace, service, entityMergeFactory);
     entityMerge                      = A.Fake <EntityMerge>();
 }
        public void Execute(IServiceProvider serviceProvider)
        {
            var trace      = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
            var context    = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
            var factory    = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
            var orgService = factory.CreateOrganizationService(context.UserId);

            try
            {
                trace.Trace("Begin - UpdateResultingCustomerRecord");
                if (!IsContextValid(context))
                {
                    trace.Trace("Context is invalid");
                    return;
                }

                var service = new EntityCacheMessageOutcomeService(trace, orgService, new EntityMergeFactory());
                service.Run(context);
                trace.Trace("End - UpdateResultingCustomerRecord");
            }
            catch (FaultException <OrganizationServiceFault> exception)
            {
                trace.Trace(exception.ToString());
                throw new InvalidPluginExecutionException(exception.ToString());
            }
            catch (TimeoutException exception)
            {
                trace.Trace(exception.ToString());
                throw new InvalidPluginExecutionException(exception.ToString());
            }
            catch (Exception exception)
            {
                trace.Trace(exception.ToString());
                throw new InvalidPluginExecutionException(exception.ToString());
            }
        }