diff --git a/src/FluentEmail.Core/Defaults/ReplaceRenderer.cs b/src/FluentEmail.Core/Defaults/ReplaceRenderer.cs index 1eb8799e..7065fe2b 100644 --- a/src/FluentEmail.Core/Defaults/ReplaceRenderer.cs +++ b/src/FluentEmail.Core/Defaults/ReplaceRenderer.cs @@ -10,7 +10,7 @@ public string Parse(string template, T model, bool isHtml = true) { foreach (PropertyInfo pi in model.GetType().GetRuntimeProperties()) { - template = template.Replace($"##{pi.Name}##", pi.GetValue(model, null).ToString()); + template = template.Replace($"##{pi.Name}##", pi.GetValue(model, null)?.ToString()); } return template; diff --git a/test/FluentEmail.Core.Tests/ReplaceRendererTest.cs b/test/FluentEmail.Core.Tests/ReplaceRendererTest.cs new file mode 100644 index 00000000..29447ba8 --- /dev/null +++ b/test/FluentEmail.Core.Tests/ReplaceRendererTest.cs @@ -0,0 +1,25 @@ +using FluentEmail.Core.Defaults; +using FluentEmail.Core.Interfaces; +using FluentEmail.Core.Models; +using NUnit.Framework; + +namespace FluentEmail.Core.Tests +{ + [TestFixture] + public class ReplaceRendererTest + { + [Test] + public void ModelPropertyValueIsNull_Test() + { + ITemplateRenderer templateRenderer = new ReplaceRenderer(); + + var address = new Address("james@test.com", "james"); + Assert.True(address.Name == "james"); + var template = "this is name: ##Name##"; + Assert.True("this is name: james" == templateRenderer.Parse(template, address)); + + address.Name = null; + Assert.True("this is name: " == templateRenderer.Parse(template, address)); + } + } +} \ No newline at end of file