public void When_translating_a_linked_entity_right_result_is_returned() { var ctx = new XrmFakedContext(); var fetchXml = @" <fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='true'> <entity name='account'> <attribute name='name' /> <attribute name='primarycontactid' /> <attribute name='telephone1' /> <attribute name='accountid' /> <order attribute='name' descending='false' /> <link-entity name='account' from='parentaccountid' to='accountid' alias='ab'> <filter type='and'> <condition attribute='name' operator='eq' value='MS' /> </filter> </link-entity> </entity> </fetch> "; var query = XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, fetchXml); Assert.True(query.LinkEntities != null); Assert.Equal(1, query.LinkEntities.Count); Assert.Equal("account", query.LinkEntities[0].LinkFromEntityName); Assert.Equal("accountid", query.LinkEntities[0].LinkFromAttributeName); Assert.Equal("account", query.LinkEntities[0].LinkToEntityName); Assert.Equal("parentaccountid", query.LinkEntities[0].LinkToAttributeName); Assert.Equal("ab", query.LinkEntities[0].EntityAlias); Assert.True(query.LinkEntities[0].LinkCriteria != null); }
public void When_translating_a_fetch_xml_attribute_node_must_have_a_name_attribute() { var ctx = new XrmFakedContext(); Assert.Throws <Exception>(() => XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, "<fetch><entity name='contact'><attribute></attribute></entity></fetch>")); Assert.DoesNotThrow(() => XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, "<fetch><entity name='contact'><attribute name='firstname'></attribute></entity></fetch>")); }
public void When_translating_a_linked_entity_with_columnset_with_all_attributes_right_result_is_returned() { var ctx = new XrmFakedContext(); var fetchXml = @" <fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='true'> <entity name='account'> <attribute name='name' /> <attribute name='primarycontactid' /> <attribute name='telephone1' /> <attribute name='accountid' /> <order attribute='name' descending='false' /> <link-entity name='account' from='parentaccountid' to='accountid' alias='ab'> <all-attributes /> </link-entity> </entity> </fetch> "; var query = XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, fetchXml); Assert.True(query.LinkEntities != null); Assert.Equal(1, query.LinkEntities.Count); Assert.True(query.LinkEntities[0].Columns.AllColumns); }
public void FetchXml_Operator_Gt_Translation() { var ctx = new XrmFakedContext(); ctx.ProxyTypesAssembly = Assembly.GetAssembly(typeof(Contact)); var fetchXml = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'> <entity name='contact'> <attribute name='fullname' /> <attribute name='contactid' /> <filter type='and'> <condition attribute='nickname' operator='gt' value='Bob' /> </filter> </entity> </fetch>"; var ct = new Contact(); var query = XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, fetchXml); Assert.True(query.Criteria != null); Assert.Equal(1, query.Criteria.Conditions.Count); Assert.Equal("nickname", query.Criteria.Conditions[0].AttributeName); Assert.Equal(ConditionOperator.GreaterThan, query.Criteria.Conditions[0].Operator); Assert.Equal("Bob", query.Criteria.Conditions[0].Values[0]); }
public void Conversion_to_bool_throws_error_if_incorrect() { var ctx = new XrmFakedContext(); ctx.ProxyTypesAssembly = Assembly.GetAssembly(typeof(Account)); var fetchXml = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'> <entity name='account'> <attribute name='name' /> <filter type='and'> <condition attribute='donotemail' operator='eq' value='3' /> </filter> </entity> </fetch>"; var exception = Assert.Throws <Exception>(() => XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, fetchXml)); Assert.Equal("When trying to parse value for entity account and attribute donotemail: Boolean value expected", exception.Message); var fetchXml2 = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'> <entity name='account'> <attribute name='name' /> <filter type='and'> <condition attribute='donotemail' operator='eq' value='anothervalue' /> </filter> </entity> </fetch>"; var exception2 = Assert.Throws <Exception>(() => XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, fetchXml2)); Assert.Equal("When trying to parse value for entity account and attribute donotemail: Boolean value expected", exception.Message); }
public void Conversion_to_datetime_is_correct() { var ctx = new XrmFakedContext(); ctx.ProxyTypesAssembly = Assembly.GetAssembly(typeof(Contact)); var fetchXml = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'> <entity name='contact'> <attribute name='fullname' /> <filter type='and'> <condition attribute='anniversary' operator='on' value='2014-11-23' /> </filter> </entity> </fetch>"; var query = XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, fetchXml); Assert.IsType <DateTime>(query.Criteria.Conditions[0].Values[0]); var dtTime = query.Criteria.Conditions[0].Values[0] as DateTime?; Assert.Equal(2014, dtTime.Value.Year); Assert.Equal(11, dtTime.Value.Month); Assert.Equal(23, dtTime.Value.Day); }
public void Conversion_to_bool_is_correct() { var ctx = new XrmFakedContext(); ctx.ProxyTypesAssembly = Assembly.GetAssembly(typeof(Account)); var fetchXml = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'> <entity name='account'> <attribute name='name' /> <filter type='and'> <condition attribute='donotemail' operator='eq' value='0' /> </filter> </entity> </fetch>"; var query = XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, fetchXml); Assert.IsType <bool>(query.Criteria.Conditions[0].Values[0]); Assert.Equal(false, query.Criteria.Conditions[0].Values[0]); var fetchXml2 = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'> <entity name='account'> <attribute name='name' /> <filter type='and'> <condition attribute='donotemail' operator='eq' value='true' /> </filter> </entity> </fetch>"; var query2 = XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, fetchXml2); Assert.IsType <bool>(query2.Criteria.Conditions[0].Values[0]); Assert.Equal(true, query2.Criteria.Conditions[0].Values[0]); }
public void When_translating_a_fetch_xml_expression_nested_filters_are_correct() { var ctx = new XrmFakedContext(); ctx.ProxyTypesAssembly = Assembly.GetAssembly(typeof(Contact)); var fetchXml = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'> <entity name='contact'> <attribute name='fullname' /> <attribute name='telephone1' /> <attribute name='contactid' /> <filter type='and'> <condition attribute='fullname' operator='not-like' value='%Messi' /> <filter type='or'> <condition attribute='telephone1' operator='eq' value='123' /> <condition attribute='telephone1' operator='eq' value='234' /> </filter> </filter> </entity> </fetch>"; var query = XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, fetchXml); Assert.True(query.Criteria != null); Assert.Equal(1, query.Criteria.Conditions.Count); Assert.Equal(1, query.Criteria.Filters.Count); Assert.Equal(LogicalOperator.Or, query.Criteria.Filters[0].FilterOperator); Assert.Equal(2, query.Criteria.Filters[0].Conditions.Count); }
public void When_translating_a_fetch_xml_expression_first_node_must_be_a_fetch_element_otherwise_exception_is_thrown() { var ctx = new XrmFakedContext(); Assert.DoesNotThrow(() => XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, "<fetch><entity name='contact'></entity></fetch>")); Assert.Throws <Exception>(() => XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, "<attribute></attribute>")); Assert.Throws <Exception>(() => XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, "<entity></entity>")); }
public void When_translating_a_fetch_xml_order_node_must_have_2_attributes() { var ctx = new XrmFakedContext(); Assert.Throws <Exception>(() => XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, "<fetch><entity name='contact'><order></order></entity></fetch>")); Assert.Throws <Exception>(() => XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, "<fetch><entity name='contact'><order attribute=''></order></entity></fetch>")); Assert.Throws <Exception>(() => XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, "<fetch><entity name='contact'><order descending=''></order></entity></fetch>")); Assert.DoesNotThrow(() => XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, "<fetch><entity name='contact'><order attribute='firstname' descending='true'></order></entity></fetch>")); }
public void When_translating_a_fetch_xml_entity_node_must_have_a_name_attribute() { var ctx = new XrmFakedContext(); Assert.Throws <Exception>(() => XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, "<fetch><entity></entity></fetch>")); var ex = Record.Exception(() => XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, "<fetch><entity name='contact'></entity></fetch>")); Assert.Null(ex); }
public void When_translating_a_fetch_xml_order_node_must_have_attribute() { // For (non-aggregate) fetchxml, // the order tag must have an attribute specified, // and may have the 'descending' attribute specified. var ctx = new XrmFakedContext(); Assert.Throws <Exception>(() => XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, "<fetch><entity name='contact'><order></order></entity></fetch>")); Assert.Throws <Exception>(() => XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, "<fetch><entity name='contact'><order descending=''></order></entity></fetch>")); Assert.DoesNotThrow(() => XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, "<fetch><entity name='contact'><order attribute='firstname' descending='true'></order></entity></fetch>")); }
public void When_translating_a_fetch_xml_expression_queryexpression_name_matches_entity_node() { var ctx = new XrmFakedContext(); var fetchXml = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'> <entity name='contact'> </entity> </fetch>"; var query = XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, fetchXml); Assert.True(query.EntityName.Equals("contact")); }
public void When_translating_a_fetch_xml_expression_all_attributes_is_translated_to_a_columnset_with_all_columns() { var ctx = new XrmFakedContext(); var fetchXml = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'> <entity name='contact'> <all-attributes /> </entity> </fetch>"; var query = XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, fetchXml); Assert.True(query.ColumnSet != null); Assert.Equal(true, query.ColumnSet.AllColumns); }
public void When_arithmetic_values_are_used_proxy_types_assembly_is_required() { var ctx = new XrmFakedContext(); var fetchXml = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'> <entity name='contact'> <attribute name='fullname' /> <filter type='and'> <condition attribute='address1_longitude' operator='gt' value='1.2345' /> </filter> </entity> </fetch>"; Assert.Throws <Exception>(() => XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, fetchXml)); }
public void When_translating_a_fetch_xml_return_total_count_is_translated_correctly() { var ctx = new XrmFakedContext(); ctx.ProxyTypesAssembly = Assembly.GetAssembly(typeof(Contact)); var fetchXml = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false' returntotalrecordcount='true'> <entity name='contact'> <attribute name='fullname' /> <attribute name='telephone1' /> <attribute name='contactid' /> </entity> </fetch>"; var query = XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, fetchXml); Assert.True(query.PageInfo.ReturnTotalRecordCount); }
public void When_translating_a_fetch_xml_expression_orderby_descending_is_correct() { var ctx = new XrmFakedContext(); var fetchXml = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'> <entity name='contact'> <attribute name='fullname' /> <attribute name='telephone1' /> <attribute name='contactid' /> <order attribute='fullname' descending='true' /> </entity> </fetch>"; var query = XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, fetchXml); Assert.True(query.Orders != null); Assert.Equal(1, query.Orders.Count); Assert.Equal("fullname", query.Orders[0].AttributeName); Assert.Equal(Microsoft.Xrm.Sdk.Query.OrderType.Descending, query.Orders[0].OrderType); }
public void Conversion_to_entityreference_is_correct() { var ctx = new XrmFakedContext(); ctx.ProxyTypesAssembly = Assembly.GetAssembly(typeof(Contact)); var fetchXml = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'> <entity name='contact'> <attribute name='fullname' /> <filter type='and'> <condition attribute='accountid' operator='eq' value='71831D66-8820-446A-BCEB-BCE14D12B216' /> </filter> </entity> </fetch>"; var query = XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, fetchXml); Assert.IsType <EntityReference>(query.Criteria.Conditions[0].Values[0]); }
public void When_translating_a_fetch_xml_expression_attributes_are_translated_to_a_list_of_columns() { var ctx = new XrmFakedContext(); var fetchXml = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'> <entity name='contact'> <attribute name='fullname' /> <attribute name='telephone1' /> <attribute name='contactid' /> </entity> </fetch>"; var query = XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, fetchXml); Assert.True(query.ColumnSet != null); Assert.Equal(false, query.ColumnSet.AllColumns); Assert.Equal(3, query.ColumnSet.Columns.Count); Assert.True(query.ColumnSet.Columns.Contains("fullname")); Assert.True(query.ColumnSet.Columns.Contains("telephone1")); Assert.True(query.ColumnSet.Columns.Contains("contactid")); }
public void Conversion_to_int_is_correct() { var ctx = new XrmFakedContext(); ctx.ProxyTypesAssembly = Assembly.GetAssembly(typeof(Contact)); var fetchXml = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'> <entity name='contact'> <attribute name='fullname' /> <filter type='and'> <condition attribute='address1_utcoffset' operator='eq' value='4' /> </filter> </entity> </fetch>"; var query = XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, fetchXml); Assert.IsType <int>(query.Criteria.Conditions[0].Values[0]); Assert.Equal(4, query.Criteria.Conditions[0].Values[0]); }
public void When_translating_a_fetch_xml_filter_default_operator_is_and() { var ctx = new XrmFakedContext(); ctx.ProxyTypesAssembly = Assembly.GetAssembly(typeof(Contact)); var fetchXml = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'> <entity name='contact'> <attribute name='fullname' /> <attribute name='telephone1' /> <attribute name='contactid' /> <filter> <condition attribute='fullname' operator='not-like' value='%Messi' /> </filter> </entity> </fetch>"; var query = XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, fetchXml); Assert.True(query.Criteria != null); Assert.Equal(LogicalOperator.And, query.Criteria.FilterOperator); }
public void Conversion_to_enum_is_correct() { var ctx = new XrmFakedContext(); ctx.ProxyTypesAssembly = Assembly.GetAssembly(typeof(Incident)); var fetchXml = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false' > <entity name='incident' > <attribute name='incidentid' /> <attribute name='statecode' /> <order attribute='createdon' descending='true' /> <filter type='and' > <condition attribute='statecode' operator='neq' value='2' /> </filter> </entity> </fetch>"; var query = XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, fetchXml); Assert.IsType <OptionSetValue>(query.Criteria.Conditions[0].Values[0]); Assert.Equal(2, (query.Criteria.Conditions[0].Values[0] as OptionSetValue).Value); }
public void FetchXml_Operator_EqualBusinessId_Translation() { XrmFakedContext _context = new XrmFakedContext(); string _fetchXml = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'> <entity name='resource'> <attribute name='name'/> <attribute name='isdisables'/> <filter type = 'and'> <condition attribute='businessunitid' operator='eq-businessid' /> </filter> </entity> </fetch>"; QueryExpression _query = XrmFakedContext.TranslateFetchXmlToQueryExpression(_context, _fetchXml); Assert.True(_query != null); Assert.Single(_query.Criteria.Conditions); Assert.Equal("businessunitid", _query.Criteria.Conditions[0].AttributeName); Assert.Equal(ConditionOperator.EqualBusinessId, _query.Criteria.Conditions[0].Operator); }
public void When_translating_a_linked_entity_with_filters_right_result_is_returned() { var ctx = new XrmFakedContext(); ctx.ProxyTypesAssembly = Assembly.GetAssembly(typeof(Contact)); var fetchXml = @" <fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='true'> <entity name='account'> <attribute name='name' /> <attribute name='primarycontactid' /> <attribute name='telephone1' /> <attribute name='accountid' /> <order attribute='name' descending='false' /> <link-entity name='account' from='parentaccountid' to='accountid' alias='ab'> <all-attributes /> <filter type='and'> <condition attribute='name' operator='not-like' value='%Messi' /> <filter type='or'> <condition attribute='telephone1' operator='eq' value='123' /> <condition attribute='telephone1' operator='eq' value='234' /> </filter> </filter> </link-entity> </entity> </fetch> "; var query = XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, fetchXml); Assert.True(query.LinkEntities != null); Assert.Equal(1, query.LinkEntities.Count); Assert.True(query.LinkEntities[0].LinkCriteria != null); Assert.Equal(1, query.LinkEntities[0].LinkCriteria.Filters.Count); Assert.Equal(1, query.LinkEntities[0].LinkCriteria.Conditions.Count); Assert.Equal(2, query.LinkEntities[0].LinkCriteria.Filters[0].Conditions.Count); }
public OrganizationResponse Execute(OrganizationRequest req, XrmFakedContext ctx) { var request = req as RetrieveMultipleRequest; if (request.Query is QueryExpression) { var linqQuery = XrmFakedContext.TranslateQueryExpressionToLinq(ctx, request.Query as QueryExpression); var list = linqQuery.ToList(); list.ForEach(e => PopulateFormattedValues(e)); var response = new RetrieveMultipleResponse { Results = new ParameterCollection { { "EntityCollection", new EntityCollection(list) } } }; return(response); } else if (request.Query is FetchExpression) { var fetchXml = (request.Query as FetchExpression).Query; var queryExpression = XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, fetchXml); var linqQuery = XrmFakedContext.TranslateQueryExpressionToLinq(ctx, queryExpression); var list = linqQuery.ToList(); list.ForEach(e => PopulateFormattedValues(e)); var response = new RetrieveMultipleResponse { Results = new ParameterCollection { { "EntityCollection", new EntityCollection(list) } } }; return(response); } else if (request.Query is QueryByAttribute) { //We instantiate a QueryExpression to be executed as we have the implementation done already var query = request.Query as QueryByAttribute; var qe = new QueryExpression(query.EntityName); qe.ColumnSet = query.ColumnSet; qe.Criteria = new FilterExpression(); for (var i = 0; i < query.Attributes.Count; i++) { qe.Criteria.AddCondition(new ConditionExpression(query.Attributes[i], ConditionOperator.Equal, query.Values[i])); } //QueryExpression now done... execute it! var linqQuery = XrmFakedContext.TranslateQueryExpressionToLinq(ctx, qe as QueryExpression); var list = linqQuery.ToList(); list.ForEach(e => PopulateFormattedValues(e)); var response = new RetrieveMultipleResponse { Results = new ParameterCollection { { "EntityCollection", new EntityCollection(list) } } }; return(response); } else { throw PullRequestException.NotImplementedOrganizationRequest(request.Query.GetType()); } }
public void When_querying_fetchxml_with_linked_entities_with_left_outer_join_right_result_is_returned() { var context = new XrmFakedContext(); var service = context.GetFakedOrganizationService(); var contact = new Contact() { Id = Guid.NewGuid(), FirstName = "Lionel" }; var account = new Account() { Id = Guid.NewGuid(), PrimaryContactId = contact.ToEntityReference() }; var account2 = new Account() { Id = Guid.NewGuid(), PrimaryContactId = null }; context.Initialize(new List <Entity> { contact, account, account2 }); var fetchXml = @" <fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'> <entity name='account'> <attribute name='name' /> <attribute name='primarycontactid' /> <attribute name='telephone1' /> <attribute name='accountid' /> <order attribute='name' descending='false' /> <link-entity name='contact' from='contactid' to='primarycontactid' alias='aa' link-type='outer'> <attribute name='firstname' /> </link-entity> <filter type='and'> <condition attribute='statecode' operator='eq' value='0' /> </filter> </entity> </fetch> "; //Translated correctly var queryExpression = XrmFakedContext.TranslateFetchXmlToQueryExpression(context, fetchXml); Assert.True(queryExpression.LinkEntities.Count == 1); var linkedEntity = queryExpression.LinkEntities[0]; Assert.Equal(linkedEntity.JoinOperator, JoinOperator.LeftOuter); //Executed correctly var request = new RetrieveMultipleRequest { Query = new FetchExpression(fetchXml) }; var response = ((RetrieveMultipleResponse)service.Execute(request)); var entities = response.EntityCollection.Entities; Assert.True(entities.Count == 2); Assert.Equal("Lionel", (entities[0]["aa.firstname"] as AliasedValue).Value.ToString()); Assert.False(entities[1].Attributes.ContainsKey("aa.firstname")); }
public void When_translating_a_fetch_xml_expression_fetchxml_must_be_an_xml() { var ctx = new XrmFakedContext(); Assert.Throws <Exception>(() => XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, "this is not an xml")); }
public void When_querying_fetchxml_with_linked_entities_linked_entity_properties_match_the_equivalent_linq_expression() { var context = new XrmFakedContext(); var service = context.GetFakedOrganizationService(); var contact = new Contact() { Id = Guid.NewGuid(), FirstName = "Lionel" }; var account = new Account() { Id = Guid.NewGuid(), PrimaryContactId = contact.ToEntityReference() }; context.Initialize(new List <Entity> { contact, account }); var fetchXml = @" <fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'> <entity name='account'> <attribute name='name' /> <attribute name='primarycontactid' /> <attribute name='telephone1' /> <attribute name='accountid' /> <order attribute='name' descending='false' /> <link-entity name='contact' from='contactid' to='primarycontactid' alias='aa'> <attribute name='firstname' /> <filter type='and'> <condition attribute='firstname' operator='eq' value='Lionel' /> </filter> </link-entity> </entity> </fetch> "; //Equivalent linq query using (var ctx = new XrmServiceContext(service)) { var linqQuery = (from a in ctx.CreateQuery <Account>() join c in ctx.CreateQuery <Contact>() on a.PrimaryContactId.Id equals c.ContactId where c.FirstName == "Lionel" select new { Account = a, Contact = c }).ToList(); } var queryExpression = XrmFakedContext.TranslateFetchXmlToQueryExpression(context, fetchXml); Assert.True(queryExpression.LinkEntities.Count == 1); var linkedEntity = queryExpression.LinkEntities[0]; Assert.Equal(linkedEntity.LinkFromAttributeName, "primarycontactid"); Assert.Equal(linkedEntity.LinkToAttributeName, "contactid"); Assert.Equal(linkedEntity.JoinOperator, JoinOperator.Inner); var request = new RetrieveMultipleRequest { Query = new FetchExpression(fetchXml) }; var response = ((RetrieveMultipleResponse)service.Execute(request)); var entities = response.EntityCollection.Entities; Assert.True(entities.Count == 1); Assert.True(entities[0].Attributes.ContainsKey("aa.firstname")); Assert.IsType <AliasedValue>(entities[0]["aa.firstname"]); Assert.Equal("Lionel", (entities[0]["aa.firstname"] as AliasedValue).Value.ToString()); }
public void When_translating_a_fetch_xml_unknown_elements_throw_an_exception() { var ctx = new XrmFakedContext(); Assert.Throws <Exception>(() => XrmFakedContext.TranslateFetchXmlToQueryExpression(ctx, "<thisdoesntexist></thisdoesntexist>")); }