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); } }