using System.Collections.Generic;
using System.Threading.Tasks;
using ManagerService.Services;
namespace ManagerService.Tests.Infrastructure
{
///
/// Enregistre les envois au lieu de les effectuer, pour pouvoir asserter
/// qu'un flux déclenche bien le bon email sans dépendre de Resend.
///
public class FakeEmailService : IEmailService
{
public record SentEmail(string Kind, string To);
public List Sent { get; } = new();
private Task Record(string kind, string to)
{
Sent.Add(new SentEmail(kind, to));
return Task.CompletedTask;
}
public Task SendWelcomeEmailAsync(string toEmail, string firstName, string loginUrl)
=> Record(nameof(SendWelcomeEmailAsync), toEmail);
public Task SendTrialStartedEmailAsync(string toEmail, string firstName, System.DateTime trialEndsAt)
=> Record(nameof(SendTrialStartedEmailAsync), toEmail);
public Task SendTrialCheckInEmailAsync(string toEmail, string firstName)
=> Record(nameof(SendTrialCheckInEmailAsync), toEmail);
public Task SendTrialEndingReminderEmailAsync(string toEmail, string firstName, System.DateTime trialEndsAt, string checkoutUrl)
=> Record(nameof(SendTrialEndingReminderEmailAsync), toEmail);
public Task SendTrialLastDayEmailAsync(string toEmail, string firstName, string checkoutUrl)
=> Record(nameof(SendTrialLastDayEmailAsync), toEmail);
public Task SendPaymentConfirmedEmailAsync(string toEmail, string firstName)
=> Record(nameof(SendPaymentConfirmedEmailAsync), toEmail);
public Task SendPaymentFailedEmailAsync(string toEmail, string firstName, string customerPortalUrl)
=> Record(nameof(SendPaymentFailedEmailAsync), toEmail);
public Task SendUserInvitationEmailAsync(string toEmail, string setPasswordUrl)
=> Record(nameof(SendUserInvitationEmailAsync), toEmail);
public Task SendPasswordResetEmailAsync(string toEmail, string firstName, string resetUrl)
=> Record(nameof(SendPasswordResetEmailAsync), toEmail);
public Task NotifyAdminAsync(string subject, string message)
=> Record(nameof(NotifyAdminAsync), subject);
}
}