public static void Should_Retrieve_A_Correct_Entity_By_Alternate_Key() { var fakedContext = new XrmFakedContext(); var accountMetadata = new Microsoft.Xrm.Sdk.Metadata.EntityMetadata(); accountMetadata.LogicalName = Account.EntityLogicalName; var alternateKeyMetadata = new Microsoft.Xrm.Sdk.Metadata.EntityKeyMetadata(); alternateKeyMetadata.KeyAttributes = new string[] { "alternateKey" }; accountMetadata.SetFieldValue("_keys", new Microsoft.Xrm.Sdk.Metadata.EntityKeyMetadata[] { alternateKeyMetadata }); fakedContext.InitializeMetadata(accountMetadata); var account = new Entity(Account.EntityLogicalName); account.Id = Guid.NewGuid(); account.Attributes.Add("alternateKey", "key"); fakedContext.Initialize(account); var fakedService = fakedContext.GetOrganizationService(); var request = new RetrieveRequest { Target = new EntityReference(Account.EntityLogicalName, "alternateKey", "key"), ColumnSet = new ColumnSet(allColumns: true) }; var retrievedAccount = (RetrieveResponse)fakedService.Execute(request); Assert.Equal(account.Id, retrievedAccount.Entity.Id); }
public void When_delete_is_invoked_with_an_existing_entity_by_alternate_key_that_entity_is_delete_from_the_context() { var context = new XrmFakedContext(); var accountMetadata = new Microsoft.Xrm.Sdk.Metadata.EntityMetadata(); accountMetadata.LogicalName = Account.EntityLogicalName; var alternateKeyMetadata = new Microsoft.Xrm.Sdk.Metadata.EntityKeyMetadata(); alternateKeyMetadata.KeyAttributes = new string[] { "AccountNumber" }; accountMetadata.SetFieldValue("_keys", new Microsoft.Xrm.Sdk.Metadata.EntityKeyMetadata[] { alternateKeyMetadata }); context.InitializeMetadata(accountMetadata); //Initialize the context with a single entity var account = new Entity("account"); account.Id = Guid.NewGuid(); account.Attributes.Add("AccountNumber", 9000); context.Initialize(account); var service = context.GetOrganizationService(); var delete = new DeleteRequest { Target = new EntityReference("account", "AccountNumber", 9000) }; service.Execute(delete); Assert.True(context.Data["account"].Count == 0); }
public void When_updating_an_entity_by_alternate_key_the_context_should_reflect_changes() { var context = new XrmFakedContext(); var service = context.GetOrganizationService(); var accountMetadata = new Microsoft.Xrm.Sdk.Metadata.EntityMetadata(); accountMetadata.LogicalName = Account.EntityLogicalName; var alternateKeyMetadata = new Microsoft.Xrm.Sdk.Metadata.EntityKeyMetadata(); alternateKeyMetadata.KeyAttributes = new string[] { "AccountNumber" }; accountMetadata.SetFieldValue("_keys", new Microsoft.Xrm.Sdk.Metadata.EntityKeyMetadata[] { alternateKeyMetadata }); context.InitializeMetadata(accountMetadata); var e = new Entity("account"); e["AccountNumber"] = 9000; e["name"] = "Before update"; var guid = service.Create(e); Assert.Equal(context.Data["account"][guid]["name"], "Before update"); //now update the name e = new Entity("account", "AccountNumber", 9000); e["name"] = "After update"; service.Update(e); Assert.Equal(context.Data["account"][guid]["name"], "After update"); }
public void An_entity_which_references_another_existent_entity_by_alternate_key_can_be_updated_when_validate_is_true() { var context = new XrmFakedContext(); context.ValidateReferences = true; IOrganizationService service = context.GetOrganizationService(); var accountMetadata = new Microsoft.Xrm.Sdk.Metadata.EntityMetadata(); accountMetadata.LogicalName = Account.EntityLogicalName; var alternateKeyMetadata = new Microsoft.Xrm.Sdk.Metadata.EntityKeyMetadata(); alternateKeyMetadata.KeyAttributes = new string[] { "alternateKey" }; accountMetadata.SetFieldValue("_keys", new Microsoft.Xrm.Sdk.Metadata.EntityKeyMetadata[] { alternateKeyMetadata }); context.InitializeMetadata(accountMetadata); var account = new Entity(Account.EntityLogicalName); account.Id = Guid.NewGuid(); account.Attributes.Add("alternateKey", "keyValue"); var account2 = new Entity(Account.EntityLogicalName); account2.Id = Guid.NewGuid(); account2.Attributes.Add("alternateKey", "keyValue2"); Entity otherEntity = new Entity("otherEntity"); otherEntity.Id = Guid.NewGuid(); otherEntity["new_accountId"] = new EntityReference("account", "alternateKey", "keyValue"); context.Initialize(new List <Entity>() { account, account2, otherEntity }); var entityToUpdate = new Entity("otherEntity") { Id = otherEntity.Id, ["new_accountId"] = new EntityReference("account", "alternateKey", "keyValue2") }; service.Update(entityToUpdate); Entity otherEntityInContext = service.Retrieve("otherEntity", otherEntity.Id, new ColumnSet(true)); Assert.Equal(((EntityReference)otherEntityInContext["new_accountId"]).Id, account2.Id); }