feat(TestBase): seed real email templates in TestBase setup

- Added `RealEmailTemplates` property with predefined email templates.
- Populated the repository with these templates in the `Setup` method.
- Ensures tests have consistent, realistic email data available.
This commit is contained in:
tekh 2025-09-15 12:44:36 +02:00
parent d5afb2201c
commit ccc4e948f3
4 changed files with 105 additions and 7 deletions

View File

@ -30,9 +30,8 @@ public class HistoryHandler : INotificationHandler<DocSignedNotification>
/// <returns></returns> /// <returns></returns>
public async Task Handle(DocSignedNotification notification, CancellationToken cancel) public async Task Handle(DocSignedNotification notification, CancellationToken cancel)
{ {
if(notification.Receiver is null) if (notification.Receiver is null)
if (notification.Receiver is null) throw new InvalidOperationException($"Receiver information is missing in the notification. DocSignedNotification:\n {notification.ToJson(Format.Json.ForDiagnostics)}");
throw new InvalidOperationException($"Receiver information is missing in the notification. DocSignedNotification:\n {notification.ToJson(Format.Json.ForDiagnostics)}");
await _sender.Send(new CreateHistoryCommand() await _sender.Send(new CreateHistoryCommand()
{ {

View File

@ -99,8 +99,8 @@ public abstract class SendMailHandler<TNotification> : INotificationHandler<TNot
var placeHolders = CreatePlaceHolders(notification); var placeHolders = CreatePlaceHolders(notification);
var temp = await TempRepo var temp = await TempRepo
.ReadOnly() .Where(x => x.Name == notification.TemplateType.ToString())
.SingleOrDefaultAsync(x => x.Name == notification.TemplateType.ToString(), cancel) .SingleOrDefaultAsync(cancel)
?? throw new InvalidOperationException($"Receiver information is missing in the notification." + ?? throw new InvalidOperationException($"Receiver information is missing in the notification." +
$"{typeof(TNotification)}:\n {notification.ToJson(Format.Json.ForDiagnostics)}"); $"{typeof(TNotification)}:\n {notification.ToJson(Format.Json.ForDiagnostics)}");

View File

@ -1,4 +1,5 @@
using System.ComponentModel; using DigitalData.Core.Abstractions.Interfaces;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
#if NETFRAMEWORK #if NETFRAMEWORK
@ -13,7 +14,7 @@ namespace EnvelopeGenerator.Domain.Entities
#endif #endif
[Table("TBSIG_EMAIL_TEMPLATE", Schema = "dbo")] [Table("TBSIG_EMAIL_TEMPLATE", Schema = "dbo")]
public class EmailTemplate public class EmailTemplate : IEntity
{ {
[Key] [Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] [DatabaseGenerated(DatabaseGeneratedOption.Identity)]

View File

@ -31,6 +31,10 @@ public abstract class TestBase : Faker
{ {
Host = Fake.CreateHost(ConfigureServices); Host = Fake.CreateHost(ConfigureServices);
await Host.AddSamples(); await Host.AddSamples();
// Add seed email templates
foreach (var temp in SeedEmailTemplates)
await Repository.CreateAsync(temp);
} }
[TearDown] [TearDown]
@ -38,4 +42,98 @@ public abstract class TestBase : Faker
{ {
Host.Dispose(); Host.Dispose();
} }
protected static List<EmailTemplate> SeedEmailTemplates => new()
{
new EmailTemplate
{
Id = 1,
Name = "DocumentReceived",
Body = "Guten Tag [NAME_RECEIVER],<br /> <br /><B><I> [NAME_SENDER]</I></B> hat Ihnen ein Dokument zum [SIGNATURE_TYPE] gesendet.<br /> <br /> Über den folgenden Link können Sie das Dokument einsehen und elektronisch unterschreiben: <a href=\"[LINK_TO_DOCUMENT]\">[LINK_TO_DOCUMENT_TEXT]</a><br /> <br /> [MESSAGE]<br /> <br /> Mit freundlichen Grüßen<br /> <br /> [NAME_PORTAL]",
Subject = "Dokument erhalten: '[DOCUMENT_TITLE]'",
AddedWhen = DateTime.Parse("2024-05-29 09:33:54.913"),
ChangedWhen = DateTime.Parse("2025-05-09 10:25:03.020")
},
new EmailTemplate
{
Id = 2,
Name = "DocumentDeleted",
Body = "Guten Tag [NAME_RECEIVER],<br /> <br /><B><I> [NAME_SENDER]</I></B> hat den Umschlag <B><I>'[DOCUMENT_TITLE]'</I></B> gelöscht/zurückgezogen.<br /><p> Begründung: <br /> <I>[REASON]</I> <p> <br /> Mit freundlichen Grüßen<br /> <br /> [NAME_PORTAL]",
Subject = "Umschlag zurückgezogen: '[DOCUMENT_TITLE]'",
AddedWhen = DateTime.Parse("2024-05-29 09:33:54.913"),
ChangedWhen = DateTime.Parse("2025-05-09 10:25:03.033")
},
new EmailTemplate
{
Id = 3,
Name = "DocumentSigned",
Body = "Guten Tag [NAME_RECEIVER],<br /> <br /> hiermit bestätigen wir Ihnen die erfolgreiche Signatur für den Vorgang <B><I>'[DOCUMENT_TITLE]'</I></B>.<br /> Wenn alle Vertragspartner unterzeichnet haben, erhalten Sie ebenfalls per email ein unterschriebenes Exemplar mit dem Signierungszertifikat! <br /> Mit freundlichen Grüßen<br /> <br /> [NAME_PORTAL]",
Subject = "Dokument unterschrieben: '[DOCUMENT_TITLE]'",
AddedWhen = DateTime.Parse("2024-05-29 09:33:54.913"),
ChangedWhen = DateTime.Parse("2025-05-09 10:25:03.033")
},
new EmailTemplate
{
Id = 4,
Name = "DocumentCompleted",
Body = "Guten Tag [NAME_RECEIVER],<br /> <br /> Der Signaturvorgang <B><I>'[DOCUMENT_TITLE]'</I></B> wurde erfolgreich abgeschlossen.<br /> <br /> Sie erhalten das Dokument mit einem detaillierten Ergebnisbericht als Anhang zu dieser Email.<br /> <br /> Mit freundlichen Grüßen<br /> <br /> [NAME_PORTAL]",
Subject = "Umschlag abgeschlossen: '[DOCUMENT_TITLE]'",
AddedWhen = DateTime.Parse("2024-05-29 09:33:54.913"),
ChangedWhen = DateTime.Parse("2025-05-09 10:25:03.050")
},
new EmailTemplate
{
Id = 5,
Name = "DocumentAccessCodeReceived",
Body = "Guten Tag [NAME_RECEIVER],<br /> <br /><B><I> [NAME_SENDER]</I></B> hat Ihnen ein Dokument zum [SIGNATURE_TYPE] gesendet. <br /> <br /> Verwenden Sie den folgenden Zugriffscode, um das Dokument einzusehen:<br /> <br /> [DOCUMENT_ACCESS_CODE]<br /> <br /> Mit freundlichen Grüßen<br /> <br /> [NAME_PORTAL]",
Subject = "Zugriffscode für Dokument erhalten: '[DOCUMENT_TITLE]'",
AddedWhen = DateTime.Parse("2024-05-29 09:33:54.913"),
ChangedWhen = DateTime.Parse("2025-05-09 10:25:03.050")
},
new EmailTemplate
{
Id = 6,
Name = "DocumentRejected_ADM",
Body = "Guten Tag [NAME_SENDER],<p><B><I>[NAME_RECEIVER]</I></B> hat den Umschlag <B><I>'[DOCUMENT_TITLE]'</I></B> mit folgendem Grund abgelehnt: <p> [REASON] <p>Der Umschlag wurde auf den Status Rejected gesetzt. <p> Mit freundlichen Grüßen<br /> <br /> [NAME_PORTAL]",
Subject = "'[DOCUMENT_TITLE]' - Unterzeichnungsvorgang zurückgezogen",
AddedWhen = DateTime.Parse("2024-06-06 10:25:14.917"),
ChangedWhen = DateTime.Parse("2025-05-09 10:25:03.067")
},
new EmailTemplate
{
Id = 9,
Name = "DocumentRejected_REC",
Body = "Guten Tag [NAME_RECEIVER], <p>Hiermit bestätigen wir Ihnen die Ablehnung des Unterzeichnungsvorganges <B><I>'[DOCUMENT_TITLE]'</I></B>!<p>Der Vertragsinhaber <B><I>[NAME_SENDER]</I></B> wurde über die Ablehnung informiert. <p> Mit freundlichen Grüßen<br /> <br /> [NAME_PORTAL]",
Subject = "'[DOCUMENT_TITLE]' - Bestätigung Ablehnung",
AddedWhen = DateTime.Parse("2024-06-12 09:24:34.927"),
ChangedWhen = DateTime.Parse("2025-05-09 10:25:03.067")
},
new EmailTemplate
{
Id = 10,
Name = "DocumentRejected_REC_2",
Body = "Guten Tag [NAME_RECEIVER], <p>Der Unterzeichnungsvorganges <B><I>'[DOCUMENT_TITLE]'</I></B> wurde durch einen anderen Vertragspartner abgelehnt! Ihre notwendige Unterzeichnung wurde verworfen.<p> Der Vertragsinhaber <B><I>[NAME_SENDER]</I></B> wird sich bei Bedarf mit Ihnen in Verbindung setzen. <p> Mit freundlichen Grüßen<br /> <br /> [NAME_PORTAL]",
Subject = "'[DOCUMENT_TITLE]' - Unterzeichnungsvorgang abgelehnt.",
AddedWhen = DateTime.Parse("2024-06-12 09:55:40.613"),
ChangedWhen = DateTime.Parse("2025-05-09 10:25:03.080")
},
new EmailTemplate
{
Id = 11,
Name = "DocumentShared",
Body = "Guten Tag,<br /> <br /><B><I> [NAME_RECEIVER]</I></B> hat Ihnen ein Dokument zum Ansehen gesendet.<br /> <br /> Über den folgenden Link können Sie das Dokument einsehen: <a href=\"[LINK_TO_DOCUMENT]\">[LINK_TO_DOCUMENT_TEXT]</a><br /> <br /> <br /> Mit freundlichen Grüßen<br /> <br /> [NAME_PORTAL]",
Subject = "Dokument geteilt: '[DOCUMENT_TITLE]'",
AddedWhen = DateTime.Parse("2024-09-27 11:37:47.860"),
ChangedWhen = DateTime.Parse("2025-05-09 10:25:03.097")
},
new EmailTemplate
{
Id = 12,
Name = "TotpSecret",
Body = "Guten Tag,<br /> <br />Sie können auf Ihren Zwei-Faktor-Authentifizierungscode zugreifen, indem Sie den unten stehenden QR-Code mit einer beliebigen Authentifizierungs-App auf Ihrem Telefon scannen (Google Authenticator, Microsoft Authenticator usw.). Dieser Code ist bis zum [TFA_EXPIRATION] gültig.<br /> <br /> <img src=\"data:image/png;base64,[TFA_QR_CODE]\" style=\"width: 13rem; height: 13rem;\"><br /> <br /> <br /> Mit freundlichen Grüßen<br /> <br /> [NAME_PORTAL]",
Subject = "2-Faktor-Authentifizierung QR-Code",
AddedWhen = DateTime.Parse("2024-12-11 10:07:08.400"),
ChangedWhen = DateTime.Parse("2025-05-12 10:43:44.290")
}
};
} }