예제 #1
0
        public void When_OrganizationName_Set()
        {
            var fakedContext = new XrmFakedContext();
            var pluginCtx    = fakedContext.GetDefaultPluginContext();

            pluginCtx.OutputParameters = new ParameterCollection();
            pluginCtx.OrganizationName = "TestOrgName";
            fakedContext.ExecutePluginWith <TestContextOrgNamePlugin>(pluginCtx);

            Assert.True(pluginCtx.OutputParameters.ContainsKey("OrgName"));
            Assert.Equal("TestOrgName", pluginCtx.OutputParameters["OrgName"]);
        }
        public void _02_Check_PrimaryEntityName()
        {
            var context = new XrmFakedContext();
            var plugin  = context.GetDefaultPluginContext();

            plugin.Stage             = (int)StageEnum.PostOperation;
            plugin.PrimaryEntityName = "abcd";
            Assert.ThrowsException <InvalidPluginExecutionException>(() =>
            {
                context.ExecutePluginWith <PostNonedevkit_AjaxSynchronous>(plugin);
            }, $"PrimaryEntityName does not equals {PrimaryEntityName}");
        }
예제 #3
0
        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");

            var ex = Record.Exception(() => context.ExecutePluginWith <TestSharedVariablesPropertyPlugin>(pluginContext));

            Assert.Null(ex);
        }
예제 #4
0
        public void PostAccountDeleteAsynchronousTest_PrimaryEntityName_Does_Not_Equals_account()
        {
            var context = new XrmFakedContext();
            var plugin  = context.GetDefaultPluginContext();

            plugin.Stage             = (int)StageEnum.PostOperation;
            plugin.PrimaryEntityName = "abcd";
            Assert.ThrowsException <InvalidPluginExecutionException>(() =>
            {
                context.ExecutePluginWith <PostAccountDeleteAsynchronous>(plugin);
            }, "PrimaryEntityName does not equals account");
        }
예제 #5
0
            public void owner_team_should_be_disassociated_from_all_AAD_team_members()
            {
                // Arrange
                var  context = new XrmFakedContext();
                var  pluginContext = context.GetDefaultPluginContext();
                Guid targetAADTeamGuid, userGuid1, userGuid2, targetOwnerTeamGuid;

                context.Initialize(new[] {
                    new Entity("team", targetOwnerTeamGuid = Guid.NewGuid()),
                    new Entity("team", targetAADTeamGuid   = Guid.NewGuid()),
                    new Entity("systemuser", userGuid1     = Guid.NewGuid()),
                    new Entity("systemuser", userGuid2     = Guid.NewGuid()),
                    new TeamMembership {
                        Id = Guid.NewGuid(), ["teamid"] = targetAADTeamGuid, ["systemuserid"] = userGuid1
                    },
                    new TeamMembership {
                        Id = Guid.NewGuid(), ["teamid"] = targetAADTeamGuid, ["systemuserid"] = userGuid2
                    },
                    new TeamMembership {
                        Id = Guid.NewGuid(), ["teamid"] = targetOwnerTeamGuid, ["systemuserid"] = userGuid1
                    },
                    new TeamMembership {
                        Id = Guid.NewGuid(), ["teamid"] = targetOwnerTeamGuid, ["systemuserid"] = userGuid2
                    }
                });
                context.AddRelationship("teammembership_association", new XrmFakedRelationship("teammembership", "teamid", "systemuserid", "team", "systemuser"));

                pluginContext.MessageName     = PluginMessage.Disassociate;
                pluginContext.InputParameters = new ParameterCollection {
                    { "Target", new EntityReference("team", targetOwnerTeamGuid) },
                    { "Relationship", new Relationship("opc_teams_teams_owneraadassociation") },
                    { "RelatedEntities", new EntityReferenceCollection(new [] { new EntityReference("team", targetAADTeamGuid) }) }
                };;

                // Act
                context.ExecutePluginWith <OwnerTeamMemberShipPlugin>(pluginContext);

                // Assert
                context.GetOrganizationService().RetrieveMultiple(new QueryExpression("teammembership")
                {
                    Distinct  = false,
                    ColumnSet = new ColumnSet(false),
                    Criteria  =
                    {
                        Conditions =
                        {
                            new ConditionExpression("teamid",       ConditionOperator.In, targetOwnerTeamGuid),
                            new ConditionExpression("systemuserid", ConditionOperator.In, new [] { userGuid1,  userGuid2})
                        }
                    }
                }).Entities.Count.Should().Be(0);
            }
예제 #6
0
        public void TestEncryptionPluginRetrieveContactCols(bool mayDecrypt)
        {
            var context     = new XrmFakedContext();
            var stage       = 20; // pre-operation¬
            var messageName = "Retrieve";
            var userId      = Guid.NewGuid();

            var target = new Entity("contact")
            {
                Id = Guid.NewGuid(),
                ["deb_idnumber"] = "******",
                ["firstname"]    = "Bob",
                ["birthdate"]    = new DateTime(1900, 1, 1),
            };
            var mayDecryptTargets = fakedUser(userId, mayDecrypt);

            mayDecryptTargets.Add(target);
            context.Initialize(mayDecryptTargets);
            var defaultPluginContext = context.GetDefaultPluginContext();

            defaultPluginContext.InputParameters.Add("Target", target.ToEntityReference());
            var colset = new ColumnSet((from k in target.Attributes where k.Key != "Id" select k.Key).ToArray());

            defaultPluginContext.InputParameters.Add("ColumnSet", colset);
            defaultPluginContext.OutputParameters.Add("BusinessEntity", target);
            defaultPluginContext.MessageName = messageName;
            defaultPluginContext.UserId      = userId;
            defaultPluginContext.Stage       = stage;

            var plugin = new CRM.Plugins.PIIEncryption("", _key);

            // var pluginResult = context.ExecutePluginWithTargetReference( plugin, target.ToEntityReference(), messageName, stage);
            var pluginResult = context.ExecutePluginWith(defaultPluginContext, plugin);

            Assert.IsNotNull(pluginResult);

            Assert.IsTrue(defaultPluginContext.SharedVariables.ContainsKey("MayDecrypt"));
            if (mayDecrypt)
            {
                Assert.AreEqual(12, colset.Columns.Count);
                Assert.IsTrue(colset.Columns.Contains("deb_idnumber_encrypted"));
                Assert.IsTrue(colset.Columns.Contains("deb_birthdate_encrypted"));
                Assert.IsTrue((bool)defaultPluginContext.SharedVariables["MayDecrypt"]);
            }
            else
            {
                Assert.AreEqual(10, colset.Columns.Count);
                Assert.IsFalse(colset.Columns.Contains("deb_idnumber_encrypted"));
                Assert.IsFalse(colset.Columns.Contains("deb_birthdate_encrypted"));
                Assert.IsFalse((bool)defaultPluginContext.SharedVariables["MayDecrypt"]);
            }
        }
        public void PreOperationOneParentTwoChild()
        {
            // Arrange
            var fakedContext = new XrmFakedContext();
            var parentEntity = new Entity("new_parententity")
            {
                Id           = Guid.NewGuid(),
                ["new_name"] = "First Parent"
            };


            var childEntityFirst = new Entity("new_childentity")
            {
                Id                   = Guid.NewGuid(),
                ["new_name"]         = "First Child",
                ["new_parententity"] = parentEntity.ToEntityReference()
            };


            var childEntitySecond = new Entity("new_childentity")
            {
                Id                   = Guid.NewGuid(),
                ["new_name"]         = "Second Child",
                ["new_parententity"] = parentEntity.ToEntityReference()
            };


            fakedContext.Initialize(new List <Entity>
            {
                parentEntity,
                childEntityFirst,
                childEntitySecond
            });

            var inputParameters = new ParameterCollection();

            inputParameters.Add("Target", parentEntity.ToEntityReference());

            var plugCtx = fakedContext.GetDefaultPluginContext();

            plugCtx.MessageName     = "Delete";
            plugCtx.Stage           = 10;
            plugCtx.InputParameters = inputParameters;
            plugCtx.Depth           = 1;

            // Act
            fakedContext.ExecutePluginWith <Plugin.DeleteParentThenChildPlugin>(plugCtx);

            // Assert
            Assert.NotNull(plugCtx.SharedVariables["toDelete"]);
            Assert.That(((EntityCollection)plugCtx.SharedVariables["toDelete"]).Entities, Has.Count.EqualTo(2));
        }
예제 #8
0
        public void _04_Check_Mode()
        {
            var context = new XrmFakedContext();
            var plugin  = context.GetDefaultPluginContext();

            plugin.Stage             = (int)StageEnum.$stage_string$;
            plugin.PrimaryEntityName = PrimaryEntityName;
            plugin.MessageName       = MessageName;
            plugin.Mode = -1;
            Assert.ThrowsException <InvalidPluginExecutionException>(() => {
                context.ExecutePluginWith <$class$>(plugin);
            }, "Execution does not equals $execution$");
        }
        public void _03_Check_MessageName()
        {
            var context = new XrmFakedContext();
            var plugin  = context.GetDefaultPluginContext();

            plugin.Stage             = (int)StageEnum.PostOperation;
            plugin.PrimaryEntityName = PrimaryEntityName;
            plugin.MessageName       = "abcd";
            Assert.ThrowsException <InvalidPluginExecutionException>(() =>
            {
                context.ExecutePluginWith <PostContactMergeAsynchronous>(plugin);
            }, $"MessageName does not equals {MessageName}");
        }
예제 #10
0
        public void $class$Test_Mode_Does_Not_Equals_$execution$()
        {
            var context = new XrmFakedContext();
            var plugin  = context.GetDefaultPluginContext();

            plugin.Stage             = (int)StageEnum.$stage_string$;
            plugin.PrimaryEntityName = "$logicalname$";
            plugin.MessageName       = "$message$";
            plugin.Mode = -1;
            Assert.ThrowsException <InvalidPluginExecutionException>(() => {
                context.ExecutePluginWith <$class$>(plugin);
            }, "Execution does not equals $execution$");
        }
예제 #11
0
        public void PreAccountCreateSynchronousTest_MessageName_Does_Not_Equals_Create()
        {
            var context = new XrmFakedContext();
            var plugin  = context.GetDefaultPluginContext();

            plugin.Stage             = (int)StageEnum.PreOperation;
            plugin.PrimaryEntityName = "account";
            plugin.MessageName       = "abcd";
            Assert.ThrowsException <InvalidPluginExecutionException>(() =>
            {
                context.ExecutePluginWith <PreAccountCreateSynchronous>(plugin);
            }, "MessageName does not equals Create");
        }
        public static void ClassInit(TestContext context)
        {
            Context                   = new XrmFakedContext();
            PluginContext             = Context.GetDefaultPluginContext();
            PluginContext.MessageName = "Create";
            PluginContext.Stage       = (int)StageEnum.PostOperation;
            PluginContext.Mode        = (int)ExecutionModeEnum.Synchronous;
            var target = new Shared.Entities.Account()
            {
            };

            PluginContext.InputParameters["Target"] = target.Entity;
        }
예제 #13
0
        public IPluginExecutionContext PostOperationTest()
        {
            var fakedContext = new XrmFakedContext();
            var wfContext    = fakedContext.GetDefaultPluginContext();

            wfContext.MessageName   = "Create";
            wfContext.Stage         = 40;
            wfContext.CorrelationId = new Guid();

            return(wfContext);

            throw new NotImplementedException();
        }
예제 #14
0
        public static void ClassInit(TestContext context)
        {
            Context                   = new XrmFakedContext();
            PluginContext             = Context.GetDefaultPluginContext();
            PluginContext.MessageName = "$message$";
            PluginContext.Stage       = (int)StageEnum.$stage_string$;
            PluginContext.Mode        = (int)ExecutionModeEnum.$execution$;
            var target = new Shared.Entities.$entityname$()
            {
            };

            PluginContext.InputParameters["Target"] = target.Entity;
        }
        public void _03_MessageName_Does_Not_Equals_GrantAccess()
        {
            var context = new XrmFakedContext();
            var plugin  = context.GetDefaultPluginContext();

            plugin.Stage             = (int)StageEnum.PostOperation;
            plugin.PrimaryEntityName = "account";
            plugin.MessageName       = "abcd";
            Assert.ThrowsException <InvalidPluginExecutionException>(() =>
            {
                context.ExecutePluginWith <PostAccountGrantAccessAsynchronous>(plugin);
            }, "MessageName does not equals GrantAccess");
        }
예제 #16
0
            public void owner_teams_should_not_be_associated_to_users_who_are_member_through_another_AAD_team()
            {
                // Arrange
                var  context = new XrmFakedContext();
                var  pluginContext = context.GetDefaultPluginContext();
                Guid targetAADTeamGuid, targetUserGuid, ownerTeamGuid, startingAADTeamGuid;

                context.Initialize(new[] {
                    new Entity("systemuser", targetUserGuid = Guid.NewGuid()),
                    new Entity("team", ownerTeamGuid        = Guid.NewGuid()),
                    new Entity("team", targetAADTeamGuid    = Guid.NewGuid()),
                    new Entity("team", startingAADTeamGuid  = Guid.NewGuid()),
                    new opc_teams_teams {
                        Id = Guid.NewGuid(), ["teamidone"] = ownerTeamGuid, ["teamidtwo"] = targetAADTeamGuid
                    },
                    new opc_teams_teams {
                        Id = Guid.NewGuid(), ["teamidone"] = ownerTeamGuid, ["teamidtwo"] = startingAADTeamGuid
                    },
                    new TeamMembership {
                        Id = Guid.NewGuid(), ["teamid"] = ownerTeamGuid, ["systemuserid"] = targetUserGuid
                    },
                    new TeamMembership {
                        Id = Guid.NewGuid(), ["teamid"] = startingAADTeamGuid, ["systemuserid"] = targetUserGuid
                    }
                });
                context.AddRelationship("teammembership_association", new XrmFakedRelationship("teammembership", "teamid", "systemuserid", "team", "systemuser"));

                pluginContext.MessageName     = PluginMessage.Associate;
                pluginContext.InputParameters = new ParameterCollection {
                    { "Target", new EntityReference("team", targetAADTeamGuid) },
                    { "Relationship", new Relationship("teammembership_association") },
                    { "RelatedEntities", new EntityReferenceCollection(new [] { new EntityReference("systemuser", targetUserGuid) }) }
                };

                // Act
                context.ExecutePluginWith <OwnerTeamMemberShipPlugin>(pluginContext);

                // Assert
                context.GetOrganizationService().RetrieveMultiple(new QueryExpression("teammembership")
                {
                    ColumnSet = new ColumnSet(false),
                    Criteria  =
                    {
                        Conditions =
                        {
                            new ConditionExpression("teamid",       ConditionOperator.In, ownerTeamGuid),
                            new ConditionExpression("systemuserid", ConditionOperator.In, targetUserGuid)
                        }
                    }
                }).Entities.Count.Should().Be(1);
            }
예제 #17
0
        public void It_Should_Not_Create_Notification_If_Xtl_Condition_False()
        {
            var context = new XrmFakedContext();
            var service = context.GetOrganizationService();

            var userId = Guid.NewGuid();

            var incident = new Entity
            {
                LogicalName       = "incident",
                Id                = Guid.NewGuid(),
                ["description"]   = "NaNaNaNaNaNaNaNa Batman",
                ["test"]          = "This should be filtered out",
                ["oss_condition"] = 0
            };

            var subscription = new Entity
            {
                LogicalName        = "oss_subscription",
                Id                 = Guid.NewGuid(),
                ["oss_incidentid"] = incident.ToEntityReference(),
                ["statecode"]      = new OptionSetValue(0),
                ["ownerid"]        = new EntityReference("systemuser", userId)
            };

            context.Initialize(new Entity[] { incident, subscription });

            var pluginCtx = context.GetDefaultPluginContext();

            pluginCtx.UserId          = userId;
            pluginCtx.InputParameters = new ParameterCollection
            {
                ["Target"] = incident
            };
            pluginCtx.MessageName = "Update";

            var config = new CreateNotificationConfig
            {
                CapturedFields = new List <string> {
                    "description"
                },
                NotificationLookupName = "oss_incidentid",
                NotifyCurrentUser      = true,
                SubscriptionLookupName = "oss_incidentid",
                XtlCondition           = "IsEqual(Value('oss_condition'), 1)"
            };

            Assert.That(() => context.ExecutePluginWithConfigurations <CreateNotification>(pluginCtx, JsonSerializer.Serialize(config), string.Empty), Throws.Nothing);

            Assert.That(context.Data, !Contains.Key("oss_notification"));
        }
예제 #18
0
        public void _04_Mode_Does_Not_Equals_Synchronous()
        {
            var context = new XrmFakedContext();
            var plugin  = context.GetDefaultPluginContext();

            plugin.Stage             = (int)StageEnum.PreOperation;
            plugin.PrimaryEntityName = "account";
            plugin.MessageName       = "RetrieveMultiple";
            plugin.Mode = -1;
            Assert.ThrowsException <InvalidPluginExecutionException>(() =>
            {
                context.ExecutePluginWith <PreAccountRetrieveMultipleSynchronous>(plugin);
            }, "Execution does not equals Synchronous");
        }
예제 #19
0
        public void TestRetrieveMultipleColsetWithFetchExpression()
        {
            var context     = new XrmFakedContext();
            var stage       = 20; // pre-operation¬
            var messageName = "RetrieveMultiple";

            var target = new Entity("contact")
            {
                Id = Guid.NewGuid(),
                ["deb_idnumber"] = "******",
                ["firstname"]    = "Bob",
                ["birthdate"]    = new DateTime(1900, 1, 1),
            };

            context.Initialize(target);

            var fetchQuery = new FetchExpression(@"<fetch top=""50"" >
  <entity name=""contact"" >
    <attribute name=""deb_idnumber"" alias=""deb_idnumber"" />
    <attribute name=""birthdate"" alias=""birthdate"" />
    <attribute name=""firstname"" alias=""firstname"" />
    <filter type=""and"" >
      <condition attribute=""firstname"" operator=""eq"" value=""Bob"" />
    </filter>
  </entity>
</fetch>");


            var defaultPluginContext = context.GetDefaultPluginContext();

            defaultPluginContext.InputParameters.Add("Query", fetchQuery);
            defaultPluginContext.OutputParameters.Add("BusinessEntityCollection", target);
            defaultPluginContext.MessageName = messageName;
            defaultPluginContext.Stage       = stage;


            var plugin = new CRM.Plugins.PIIEncryption("", _key);

            // var pluginResult = context.ExecutePluginWithTargetReference( plugin, target.ToEntityReference(), messageName, stage);
            var pluginResult = context.ExecutePluginWith(defaultPluginContext, plugin);

            Assert.IsNotNull(pluginResult);

            Debugger.Break();
            //var colset = fetchQuery. query.ColumnSet;
            //Assert.AreEqual(5, colset.Columns.Count);

            //Assert.IsTrue(colset.Columns.Contains("deb_idnumber_encrypted"));
            //Assert.IsTrue(colset.Columns.Contains("deb_birthdate_encrypted"));
        }
예제 #20
0
        public void PostAccountUpdateAsynchronousTest_Mode_Does_Not_Equals_Asynchronous()
        {
            var context = new XrmFakedContext();
            var plugin  = context.GetDefaultPluginContext();

            plugin.Stage             = (int)StageEnum.PostOperation;
            plugin.PrimaryEntityName = "account";
            plugin.MessageName       = "Update";
            plugin.Mode = -1;
            Assert.ThrowsException <InvalidPluginExecutionException>(() =>
            {
                context.ExecutePluginWith <PostAccountUpdateAsynchronous>(plugin);
            }, "Execution does not equals Asynchronous");
        }
        public void _04_Check_Mode()
        {
            var context = new XrmFakedContext();
            var plugin  = context.GetDefaultPluginContext();

            plugin.Stage             = (int)StageEnum.PostOperation;
            plugin.PrimaryEntityName = PrimaryEntityName;
            plugin.MessageName       = MessageName;
            plugin.Mode = -1;
            Assert.ThrowsException <InvalidPluginExecutionException>(() =>
            {
                context.ExecutePluginWith <PostAccountDeleteAsynchronous>(plugin);
            }, "Execution does not equals Asynchronous");
        }
예제 #22
0
            public void it_should_add_the_document_to_sharepoint()
            {
                // Arrange
                var context       = new XrmFakedContext();
                var pluginContext = context.GetDefaultPluginContext();

                pluginContext.InputParameters = inputs;
                pluginContext.MessageName     = PluginMessage.GenerateDocumentFromTemplate;

                // Act
                context.ExecutePluginWith(pluginContext, PluginInstance);

                // Assert
                MockSharePointService.Verify(x => x.AddFileToSharePoint(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <byte[]>()), Times.Once());
            }
        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));
        }
            public void timeline_records_strings_should_switch_to_correct_language(TimelineRecordTransform timelineRecordTransform)
            {
                // Arrange
                var context       = new XrmFakedContext();
                var pluginContext = context.GetDefaultPluginContext();

                pluginContext.OutputParameters.Add(OutputParameter.TimelineWallRecords, timelineRecordTransform.Initial);
                pluginContext.MessageName = PluginMessage.RetrieveTimelineWallRecords;
                pluginContext.SharedVariables.Add(LanguageKey, (int)timelineRecordTransform.Language);

                // Act
                context.ExecutePluginWith <MultiLanguagePlugin>(pluginContext);

                // Assert
                pluginContext.OutputParameters[OutputParameter.TimelineWallRecords].Should().Be(timelineRecordTransform.Expected);
            }
예제 #25
0
        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 timeline_records_should_not_throw_when_null()
            {
                // Arrange
                var context       = new XrmFakedContext();
                var pluginContext = context.GetDefaultPluginContext();

                pluginContext.OutputParameters.Add(OutputParameter.TimelineWallRecords, null);
                pluginContext.MessageName = PluginMessage.RetrieveTimelineWallRecords;
                pluginContext.SharedVariables.Add(LanguageKey, (int)Language.English);

                // Act
                var ex = Record.Exception(() => context.ExecutePluginWith <MultiLanguagePlugin>(pluginContext));

                // Assert
                Assert.Null(ex);
            }
예제 #27
0
            public void an_event_should_not_be_created_for_non_tracked_changed_field()
            {
                // Arrange
                var  context = new XrmFakedContext();
                var  pluginContext = context.GetDefaultPluginContext();
                Guid complaintId, preOwnerId, postOwnerId;

                var preImageEntity = new Entity("opc_complaint", complaintId = Guid.NewGuid())
                {
                    Attributes = new AttributeCollection()
                    {
                        { nameof(opc_complaint.opc_complainantrep), new EntityReference("Contact", preOwnerId = Guid.NewGuid())
                          {
                              Name = "John Doe"
                          } }
                    }
                };

                var postImageEntity = new Entity("opc_complaint", complaintId = Guid.NewGuid())
                {
                    Attributes = new AttributeCollection()
                    {
                        { nameof(opc_complaint.opc_complainantrep), new EntityReference("Contact", postOwnerId = Guid.NewGuid())
                          {
                              Name = "Johna Doey"
                          } }
                    }
                };

                pluginContext.PreEntityImages.Add(new KeyValuePair <string, Entity>("EntityImages", preImageEntity));
                pluginContext.PostEntityImages.Add(new KeyValuePair <string, Entity>("EntityImages", postImageEntity));
                context.AddRelationship("opc_complaint_opc_events", new XrmFakedRelationship("opc_complaint_opc_events", "opc_complaint_opc_events", "opc_complaint", "opc_event"));
                pluginContext.InputParameters = new ParameterCollection {
                    { "Target", new EntityReference("opc_complaint", complaintId) },
                };

                pluginContext.MessageName = PluginMessage.Update;

                // Act
                context.ExecutePluginWith <ChangeEventPlugin>(pluginContext);

                // Assert
                context.GetOrganizationService().RetrieveMultiple(new QueryExpression(Annotation.EntityLogicalName)
                {
                    ColumnSet = new ColumnSet(false)
                }).Entities.Count.Should().Be(0);
            }
            public void recalculatechecklistresponses_fields_should_be_set_to_true()
            {
                // Arrange
                var  context = new XrmFakedContext();
                var  pluginContext = context.GetDefaultPluginContext();
                Guid targetComplaint, targetComplaint2, targetIndustry;

                context.Initialize(new[]
                {
                    new Entity("opc_complaint", targetComplaint  = Guid.NewGuid()),
                    new Entity("opc_complaint", targetComplaint2 = Guid.NewGuid()),
                    new Entity("opc_industry", targetIndustry    = Guid.NewGuid()),
                    new opc_complaintsrelatedindustries {
                        Id = Guid.NewGuid(), ["complaintid"] = targetComplaint, ["industryid"] = targetIndustry
                    },
                    new opc_complaintsrelatedindustries {
                        Id = Guid.NewGuid(), ["complaintid"] = targetComplaint2, ["industryid"] = targetIndustry
                    }
                });
                context.AddRelationship
                (
                    nameof(opc_complaint.opc_complaints_industries_relatedindustries),
                    new XrmFakedRelationship(nameof(opc_complaint.opc_complaints_industries_relatedindustries), "complaintid", "industryid", "opc_complaint", "industry")
                );

                pluginContext.MessageName     = PluginMessage.Associate;
                pluginContext.InputParameters = new ParameterCollection
                {
                    { "Target", new EntityReference("opc_industry", targetIndustry) },
                    { "Relationship", new Relationship(nameof(opc_complaint.opc_complaints_industries_relatedindustries)) },
                    { "RelatedEntities", new EntityReferenceCollection(new [] { new EntityReference("opc_complaint", targetComplaint), new EntityReference("opc_complaint", targetComplaint2) }) }
                };

                // Act
                context.ExecutePluginWith <RecalculateChecklistResponsesFlagPlugin>(pluginContext);

                // Assert
                var complaints = context.GetOrganizationService().RetrieveMultiple(new QueryExpression("opc_complaint")
                {
                    ColumnSet = new ColumnSet("opc_recalculatechecklistresponses"),
                }).Entities;

                foreach (var complaint in complaints)
                {
                    complaint.Attributes["opc_recalculatechecklistresponses"].Should().Be(true);
                }
            }
            public void modified_on_should_be_replaced_with_created_on(Annotation annotation)
            {
                // Arrange
                var context       = new XrmFakedContext();
                var pluginContext = context.GetDefaultPluginContext();

                pluginContext.OutputParameters = new ParameterCollection {
                    { "BusinessEntity", annotation }
                };
                pluginContext.MessageName = PluginMessage.Retrieve;

                // Act
                context.ExecutePluginWith <TimelineTransformationsPlugin>(pluginContext);

                // Assert
                annotation.ModifiedOn.Should().Be(annotation.CreatedOn);
            }
예제 #30
0
            public void it_should_throw_an_InvalidPluginExecutionException_if_there_is_an_exception_when_sending_the_file_to_sharepoint()
            {
                // Arrange
                var context       = new XrmFakedContext();
                var pluginContext = context.GetDefaultPluginContext();

                pluginContext.InputParameters = inputs;
                pluginContext.MessageName     = PluginMessage.GenerateDocumentFromTemplate;

                MockSharePointService.Setup(x => x.AddFileToSharePoint(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>(), It.IsAny <byte[]>()))
                .ThrowsAsync(new Exception());

                // Act
                Action executePluginWith = () => context.ExecutePluginWith(pluginContext, PluginInstance);

                // Assert
                executePluginWith.Should().Throw <InvalidPluginExecutionException>();
            }