Skip to content

Commit 66e735f

Browse files
toddbtodd
and
todd
authored
fix: In App Message Template is Rendered for Email Step while fetching workflow data #90 (#92)
Co-authored-by: todd <[email protected]>
1 parent ee711cb commit 66e735f

File tree

3 files changed

+147
-2
lines changed

3 files changed

+147
-2
lines changed

src/Novu.Domain/JsonConverters/MessageTemplateConverter.cs

+14-2
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,20 @@ namespace Novu.Domain.JsonConverters;
88
/// <summary>
99
/// Converts the incoming JSON stream into <see cref="IMessageTemplate" /> polymorphic type
1010
/// </summary>
11+
/// <example>
12+
/// <code>
13+
/// [JsonProperty("template")]
14+
/// [JsonConverter(typeof(MessageTemplateConverter))]
15+
/// public IMessageTemplate Template { get; set; }
16+
/// </code>
17+
/// </example>
1118
/// <see cref="EmailMessageTemplate" />
1219
/// <see cref="SmsMessageTemplate" />
13-
/// <see cref="InAppMessageTemplate" />
20+
/// <see cref="ChatMessageTemplate" />
21+
/// <see cref="PushMessageTemplate" />
22+
/// <see cref="DigestMessageTemplate" />
23+
/// <see cref="TriggerMessageTemplate" />
24+
/// <see cref="DelayMessageTemplate" />
1425
public class MessageTemplateConverter : JsonCreationConverter<IMessageTemplate>
1526
{
1627
protected override IMessageTemplate Create(Type objectType, JObject jObject)
@@ -30,13 +41,14 @@ protected override IMessageTemplate Create(Type objectType, JObject jObject)
3041
return typeEnum switch
3142
{
3243
StepTypeEnum.InApp => new InAppMessageTemplate(),
33-
StepTypeEnum.Email => new InAppMessageTemplate(),
44+
StepTypeEnum.Email => new EmailMessageTemplate(),
3445
StepTypeEnum.Sms => new SmsMessageTemplate(),
3546
StepTypeEnum.Chat => new ChatMessageTemplate(),
3647
StepTypeEnum.Push => new PushMessageTemplate(),
3748
StepTypeEnum.Digest => new DigestMessageTemplate(),
3849
StepTypeEnum.Trigger => new TriggerMessageTemplate(),
3950
StepTypeEnum.Delay => new DelayMessageTemplate(),
51+
// important to throw to alert for new types
4052
_ => throw new InvalidOperationException($"Unknown type {typeEnum}"),
4153
};
4254
}

src/Novu.Domain/Models/Workflows/Step/Message/InAppMessageTemplate.cs

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using System.ComponentModel.DataAnnotations;
12
using Newtonsoft.Json;
23
using Newtonsoft.Json.Converters;
34
using Novu.Domain.JsonConverters;
@@ -10,6 +11,7 @@ public class InAppMessageTemplate : BaseMessageTemplate, IMessageTemplate
1011

1112
[JsonConverter(typeof(StringEnumConverter))]
1213
[JsonProperty("type")]
14+
[Required]
1315
public StepTypeEnum Type { get; set; } = StepTypeEnum.InApp;
1416

1517
/// <summary>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.IO;
4+
using FluentAssertions;
5+
using Newtonsoft.Json;
6+
using Novu.Domain.JsonConverters;
7+
using Novu.Domain.Models.Workflows.Step.Message;
8+
using Xunit;
9+
10+
namespace Novu.Tests.MicroTests.JsonConverters;
11+
12+
public class MessageTemplateConverterTests
13+
{
14+
public static IEnumerable<object[]> Data =>
15+
new List<object[]>
16+
{
17+
new object[]
18+
{
19+
"empty type throws exception",
20+
@"{ ""type"": """", }",
21+
typeof(InAppMessageTemplate),
22+
true,
23+
},
24+
new object[]
25+
{
26+
nameof(InAppMessageTemplate),
27+
@"
28+
{
29+
""type"": ""in_app"",
30+
}
31+
",
32+
typeof(InAppMessageTemplate),
33+
false,
34+
},
35+
new object[]
36+
{
37+
nameof(EmailMessageTemplate),
38+
@"
39+
{
40+
""type"": ""email"",
41+
}
42+
",
43+
typeof(EmailMessageTemplate),
44+
false,
45+
},
46+
new object[]
47+
{
48+
nameof(SmsMessageTemplate),
49+
@"
50+
{
51+
""type"": ""sms"",
52+
}
53+
",
54+
typeof(SmsMessageTemplate),
55+
false,
56+
},
57+
new object[]
58+
{
59+
nameof(ChatMessageTemplate),
60+
@"
61+
{
62+
""type"": ""chat"",
63+
}
64+
",
65+
typeof(ChatMessageTemplate),
66+
false,
67+
},
68+
new object[]
69+
{
70+
nameof(DigestMessageTemplate),
71+
@"
72+
{
73+
""type"": ""digest"",
74+
}
75+
",
76+
typeof(DigestMessageTemplate),
77+
false,
78+
},
79+
new object[]
80+
{
81+
nameof(TriggerMessageTemplate),
82+
@"
83+
{
84+
""type"": ""trigger"",
85+
}
86+
",
87+
typeof(TriggerMessageTemplate),
88+
false,
89+
},
90+
new object[]
91+
{
92+
nameof(DelayMessageTemplate),
93+
@"
94+
{
95+
""type"": ""delay"",
96+
}
97+
",
98+
typeof(DelayMessageTemplate),
99+
false,
100+
},
101+
};
102+
103+
[Theory]
104+
[MemberData(nameof(Data))]
105+
public void MessageTemplateType(string test, string json, Type t, bool throws)
106+
{
107+
JsonReader reader = new JsonTextReader(new StringReader(json));
108+
while (reader.TokenType == JsonToken.None)
109+
{
110+
if (!reader.Read())
111+
{
112+
break;
113+
}
114+
}
115+
116+
if (throws)
117+
{
118+
Assert.ThrowsAny<Exception>(() =>
119+
new MessageTemplateConverter()
120+
.ReadJson(reader, t, null, JsonSerializer.CreateDefault()));
121+
}
122+
else
123+
{
124+
new MessageTemplateConverter()
125+
.ReadJson(reader, t, null, JsonSerializer.CreateDefault())
126+
.GetType()
127+
.Should()
128+
.Be(t);
129+
}
130+
}
131+
}

0 commit comments

Comments
 (0)