public void DefaultValueTemplateParseTest() { var customerId = Guid.NewGuid(); var service = new Mock <IOrganizationService>(); service.Setup(s => s.Execute(It.IsAny <RetrieveAllEntitiesRequest>())) .Returns(new [] { _contactMetadata }.AsResponse()); service.Setup(s => s.Execute(It.IsAny <RetrieveEntityRequest>())) .Returns(_contactMetadata.AsResponse()); service.Setup(s => s.RetrieveMultiple(It.Is <QueryExpression>(e => e.Criteria.Conditions.Any(c => c.AttributeName == "contactid" && c.Values.Contains(customerId))))) .Returns(new EntityCollection(new List <Entity> { new Entity("contact", customerId) })); var template = "Hi, ${Customer.contact.fullname!Noname}"; var parser = new FreeMarkerParser(service.Object, template); var result = parser.Produce(new Dictionary <string, EntityReference> { ["Customer"] = new EntityReference("contact", customerId) }); Assert.AreEqual("Hi, Noname", result); result = parser.Produce(new Dictionary <string, EntityReference> { ["Customer"] = null }); Assert.AreEqual("Hi, Noname", result); }
public void DirectiveNewLineTemplateParseTest() { var customerId = Guid.NewGuid(); var service = new Mock <IOrganizationService>(); service.Setup(s => s.Execute(It.IsAny <RetrieveAllEntitiesRequest>())) .Returns(new[] { _contactMetadata }.AsResponse()); service.Setup(s => s.Execute(It.IsAny <RetrieveEntityRequest>())) .Returns(_contactMetadata.AsResponse()); var contact = new Entity("contact", customerId) { ["fullname"] = "Brunhilde Semel", ["gender"] = new OptionSetValue(1) }; service.Setup(s => s.RetrieveMultiple(It.Is <QueryExpression>(e => e.Criteria.Conditions.Any(c => c.AttributeName == "contactid" && c.Values.Contains(customerId))))) .Returns(new EntityCollection(new List <Entity> { contact })); var template = @"<#if Customer.contact.gender = = Female>Mrs</#if> ${Customer.contact.Full Name}"; var parser = new FreeMarkerParser(service.Object, template); var result = parser.Produce(new Dictionary <string, EntityReference> { ["Customer"] = new EntityReference("contact", customerId) }); Assert.AreEqual("Mrs Brunhilde Semel", result); }
public void NowFunctionTest() { var customerId = Guid.NewGuid(); var service = new Mock <IOrganizationService>(); service.Setup(s => s.Execute(It.IsAny <RetrieveAllEntitiesRequest>())) .Returns(new[] { _contactMetadata }.AsResponse()); service.Setup(s => s.Execute(It.IsAny <RetrieveEntityRequest>())) .Returns(_contactMetadata.AsResponse()); service.Setup(s => s.RetrieveMultiple(It.Is <QueryExpression>(e => e.Criteria.Conditions.Any(c => c.AttributeName == "contactid" && c.Values.Contains(customerId))))) .Returns(new EntityCollection(new List <Entity> { new Entity("contact", customerId) })); var template = "Recieve it at ${.now?t} Return at ${.now?d!Whenever}"; var parser = new FreeMarkerParser(service.Object, template); var result = parser.Produce(new Dictionary <string, EntityReference> { ["Customer"] = new EntityReference("contact", customerId) }); Assert.AreEqual($"Recieve it at {DateTime.UtcNow.ToLocalTime():t} Return at {DateTime.UtcNow.ToLocalTime():d}", result); }
public void HrefFormatValueTemplateParseTest() { var customerId = Guid.NewGuid(); var service = new Mock <IOrganizationService>(); service.Setup(s => s.Execute(It.IsAny <RetrieveAllEntitiesRequest>())) .Returns(new[] { _contactMetadata }.AsResponse()); service.Setup(s => s.Execute(It.IsAny <RetrieveEntityRequest>())) .Returns(_contactMetadata.AsResponse()); var contact = new Entity("contact", customerId) { ["fullname"] = "Brunhilde Semel" }; service.Setup(s => s.RetrieveMultiple(It.Is <QueryExpression>(e => e.Criteria.Conditions.Any(c => c.AttributeName == "contactid" && c.Values.Contains(customerId))))) .Returns(new EntityCollection(new List <Entity> { contact })); var template = "Follow the link <a href='https://mysite.com?user=${Customer.contact.fullname?href}'>${Customer.contact.fullname}</a>"; var parser = new FreeMarkerParser(service.Object, template); var result = parser.Produce(new Dictionary <string, EntityReference> { ["Customer"] = new EntityReference("contact", customerId) }); Assert.AreEqual("Follow the link <a href='https://mysite.com?user=Brunhilde%20Semel'>Brunhilde Semel</a>", result); }
public void FormatValueTemplateParseTest() { var customerId = Guid.NewGuid(); var service = new Mock <IOrganizationService>(); service.Setup(s => s.Execute(It.IsAny <RetrieveAllEntitiesRequest>())) .Returns(new [] { _contactMetadata }.AsResponse()); service.Setup(s => s.Execute(It.IsAny <RetrieveEntityRequest>())) .Returns(_contactMetadata.AsResponse()); var startDate = new DateTime(2019, 05, 20, 20, 30, 00, DateTimeKind.Utc); service.Setup(s => s.RetrieveMultiple(It.Is <QueryExpression>(e => e.Criteria.Conditions.Any(c => c.AttributeName == "contactid" && c.Values.Contains(customerId))))) .Returns(new EntityCollection(new List <Entity> { new Entity("contact", customerId) { ["startdate"] = startDate } })); var template = "Recieve it at ${Customer.contact.startdate?t} Return at ${Customer.contact.enddate?t!Whenever}"; var parser = new FreeMarkerParser(service.Object, template); var result = parser.Produce(new Dictionary <string, EntityReference> { ["Customer"] = new EntityReference("contact", customerId) }); Assert.AreEqual($"Recieve it at {startDate.ToLocalTime().ToString("t")} Return at Whenever", result); }
public void Execute(IServiceProvider serviceProvider) { var pluginExecutionContext = serviceProvider.GetService <IPluginExecutionContext>(); var tracingService = serviceProvider.GetService <ITracingService>(); var serviceFactory = serviceProvider.GetService <IOrganizationServiceFactory>(); var sms = GetTarget(pluginExecutionContext); var service = serviceFactory.CreateOrganizationService(pluginExecutionContext.UserId); var templateReference = sms.GetAttributeValue <EntityReference>("zed_templateid"); var template = service.Retrieve("zed_messagetemplate", templateReference.Id, new ColumnSet("zed_template")); var parser = new FreeMarkerParser(service, template.GetAttributeValue <string>("zed_template")); var toUpdate = new Entity(sms.LogicalName, sms.Id) { ["description"] = parser.Produce(new Dictionary <string, EntityReference> { ["Recipient"] = sms.GetAttributeValue <EntityCollection>("to")?.Entities? .FirstOrDefault()?.GetAttributeValue <EntityReference>("partyid"), ["Context"] = sms.ToEntityReference() }) }; service.Update(toUpdate); }
public void ListParseTest() { var customerId = Guid.NewGuid(); var nameField = new AttributeMetadata(); nameField.SetName("name"); nameField.AddLocalizationText("Name"); var subMetadata = new[] { nameField }.Compile("sub"); var service = new Mock <IOrganizationService>(); service.Setup(s => s.Execute(It.IsAny <RetrieveAllEntitiesRequest>())) .Returns(new[] { _contactMetadata, subMetadata }.AsResponse()); service.Setup(s => s.Execute(It.Is <RetrieveEntityRequest>(r => r.LogicalName == _contactMetadata.LogicalName))) .Returns(_contactMetadata.AsResponse()); service.Setup(s => s.Execute(It.Is <RetrieveEntityRequest>(r => r.LogicalName == subMetadata.LogicalName))) .Returns(subMetadata.AsResponse()); var contact = new Entity("contact", customerId) { ["fullname"] = "Brunhilde Semel", ["gender"] = new OptionSetValue(1) }; service.Setup(s => s.RetrieveMultiple(It.Is <QueryExpression>(e => e.Criteria.Conditions.Any(c => c.AttributeName == "contactid" && c.Values.Contains(customerId))))) .Returns(new EntityCollection(new List <Entity> { contact })); var template = @"${Customer.contact.Full Name}<#list Customer.items as item><p>${item.sub.name}</p></#list>"; var parser = new FreeMarkerParser(service.Object, template); parser.OnEntityRetrieved += (s, e) => e.Entity["items"] = new[] { new Entity("sub") { ["name"] = "a" }, new Entity("sub") { ["name"] = "b" }, new Entity("sub") { ["name"] = "c" } }; var result = parser.Produce(new Dictionary <string, EntityReference> { ["Customer"] = new EntityReference("contact", customerId) }); Assert.AreEqual("Brunhilde Semel<p>a</p><p>b</p><p>c</p>", result); }
public void IfEncodedTemplateParseTest() { var customerId = Guid.NewGuid(); var service = new Mock <IOrganizationService>(); service.Setup(s => s.Execute(It.IsAny <RetrieveAllEntitiesRequest>())) .Returns(new [] { _contactMetadata }.AsResponse()); service.Setup(s => s.Execute(It.IsAny <RetrieveEntityRequest>())) .Returns(_contactMetadata.AsResponse()); var contact = new Entity("contact", customerId) { ["fullname"] = "Brunhilde Semel", ["gender"] = new OptionSetValue(1) }; service.Setup(s => s.RetrieveMultiple(It.Is <QueryExpression>(e => e.Criteria.Conditions.Any(c => c.AttributeName == "contactid" && c.Values.Contains(customerId))))) .Returns(new EntityCollection(new List <Entity> { contact })); var template = "<#if Customer.contact.gender == Female>Mrs<#elseif Customer.contact.gender == Male>Mr<#elseif Customer.contact.gender == Div>Msr<#else>Dear</#if>>, ${Customer.contact.fullname}"; var parser = new FreeMarkerParser(service.Object, template, Configurations.Default); var result = parser.Produce(new Dictionary <string, EntityReference> { ["Customer"] = new EntityReference("contact", customerId) }); Assert.AreEqual("Mrs>, Brunhilde Semel", result); contact["gender"] = new OptionSetValue(0); result = parser.Produce(new Dictionary <string, EntityReference> { ["Customer"] = new EntityReference("contact", customerId) }); Assert.AreEqual("Mr>, Brunhilde Semel", result); contact["gender"] = new OptionSetValue(2); result = parser.Produce(new Dictionary <string, EntityReference> { ["Customer"] = new EntityReference("contact", customerId) }); Assert.AreEqual("Msr>, Brunhilde Semel", result); contact["gender"] = null; result = parser.Produce(new Dictionary <string, EntityReference> { ["Customer"] = new EntityReference("contact", customerId) }); Assert.AreEqual("Dear>, Brunhilde Semel", result); }