public void When_the_followup_plugin_is_executed_for_an_account_after_create_it_should_create_a_new_task_with_a_regardingid()
        {
            var fakedContext = new XrmFakedContext();
            fakedContext.ProxyTypesAssembly = Assembly.GetExecutingAssembly(); //Needed to be able to return early bound entities

            var guid1 = Guid.NewGuid();
            var target = new Entity("account") { Id = guid1 };

            ParameterCollection inputParameters = new ParameterCollection();
            inputParameters.Add("Target", target);

            ParameterCollection outputParameters = new ParameterCollection();
            outputParameters.Add("id", guid1);

            fakedContext.ExecutePluginWith<FollowupPlugin>(inputParameters, outputParameters, null, null);

            //The plugin creates a followup activity, check that that one exists
            var tasks = (from t in fakedContext.CreateQuery<Task>()
                         select t).ToList();

            Assert.True(tasks.Count == 1);
            Assert.True(tasks[0].Subject.Equals("Send e-mail to the new customer."));
            Assert.True(tasks[0].RegardingObjectId != null && tasks[0].RegardingObjectId.Id.Equals(guid1));
        }
        public void When_getting_a_default_context_shared_variables_can_be_accessed_from_a_plugin()
        {
            var context = new XrmFakedContext();

            var pluginContext = context.GetDefaultPluginContext();
            pluginContext.SharedVariables.Add("key", "somevalue");

            Assert.DoesNotThrow(() =>context.ExecutePluginWith<TestSharedVariablesPropertyPlugin>(pluginContext));
        }
        public void When_Passing_In_No_Properties_Plugins_Only_Get_Default_Values()
        {
            var context = new XrmFakedContext();

            ParameterCollection inputParameters = new ParameterCollection();
            inputParameters.Add("Target", new Entity());

            var pluginContext = new XrmFakedPluginExecutionContext()
            {
                InputParameters = inputParameters,
                UserId = Guid.NewGuid(),
                InitiatingUserId = Guid.NewGuid()
            };

            //Parameters are defaulted now...
            Assert.DoesNotThrow(() => context.ExecutePluginWith<TestContextPlugin>(pluginContext));

            pluginContext = new XrmFakedPluginExecutionContext()
            {
                InputParameters = inputParameters,
                MessageName = "Create",
                InitiatingUserId = Guid.NewGuid()
            };


            Assert.DoesNotThrow(() => context.ExecutePluginWith<TestContextPlugin>(pluginContext));

            pluginContext = new XrmFakedPluginExecutionContext()
            {
                InputParameters = inputParameters,
                MessageName = "Update",
                UserId = Guid.NewGuid()
            };

            Assert.DoesNotThrow(() => context.ExecutePluginWith<TestContextPlugin>(pluginContext));
        }
        public void When_executing_a_plugin_primaryentityname_exists_in_the_context()
        {
            var context = new XrmFakedContext();

            var pluginContext = context.GetDefaultPluginContext();
            pluginContext.PrimaryEntityName = "Account";
            pluginContext.MessageName = "Create";
            pluginContext.Stage = 20;

            var entity = new Entity();
            context.ExecutePluginWith<PreAccountCreate>(pluginContext);

            Assert.True(true);
        }
        public void When_initializing_the_context_with_Properties_Plugins_Can_Access_It()
        {
            var context = new XrmFakedContext();

            ParameterCollection inputParameters = new ParameterCollection();
            inputParameters.Add("Target", new Entity());

            var plugCtx = context.GetDefaultPluginContext();
            plugCtx.MessageName = "Create";
            plugCtx.InputParameters = inputParameters;

            Assert.DoesNotThrow(() => context.ExecutePluginWith<TestContextPlugin>(plugCtx));
        }