public void ResultEntered_Test(string cultureName, bool isOrigStartSet, bool withRemarks) { var realStart = new DateTime(2021, 12, 24, 20, 00, 00); var m = new ResultEnteredModel { Username = "******", RoundDescription = "Round description", HomeTeamName = "Home Team", GuestTeamName = "Guest Team", Match = new TournamentManager.DAL.EntityClasses.MatchEntity { Id = 12345, PlannedStart = new DateTime(2020, 12, 24, 20, 00, 00), OrigPlannedStart = isOrigStartSet ? realStart.AddDays(-60) : (DateTime?)null, RealStart = realStart, RealEnd = realStart.AddHours(2), HomePoints = 2, GuestPoints = 0, Remarks = withRemarks ? "Some remarks" : null, ChangeSerial = 7 } }; m.Match.Sets.AddRange(new [] { new TournamentManager.DAL.EntityClasses.SetEntity { HomeBallPoints = 25, GuestBallPoints = 1, HomeSetPoints = 1, GuestSetPoints = 0 }, new TournamentManager.DAL.EntityClasses.SetEntity { HomeBallPoints = 25, GuestBallPoints = 2, HomeSetPoints = 1, GuestSetPoints = 0 }, new TournamentManager.DAL.EntityClasses.SetEntity { HomeBallPoints = 25, GuestBallPoints = 3, HomeSetPoints = 1, GuestSetPoints = 0 } }); string text = string.Empty, html = string.Empty; Assert.Multiple(() => { Assert.DoesNotThrowAsync(async() => { text = await _renderer.RenderAsync(TemplateName.ResultEnteredTxt, m, cultureName); Console.WriteLine($"*** {TemplateName.ResultEnteredTxt} ***"); Console.WriteLine(text); }); Assert.That(text.Contains(L("Result", cultureName))); if (withRemarks) { Assert.That(text.Contains(m.Match.Remarks)); } if (isOrigStartSet) { Assert.That(text.Contains(m.Match.OrigPlannedStart?.ToString("d", new CultureInfo(cultureName)))); } }); }
public async IAsyncEnumerable <MailMergeMessage> GetMailMergeMessages(ITenantContext tenantContext, ITemplateRenderer renderer, IMailMergeService mailMergeService, IStringLocalizer <EmailResource> localizer, [EnumeratorCancellation] CancellationToken cancellationToken) { if (Parameters.Match is null) { throw new Exception($"Input parameter {nameof(ResultEnteredModel.Match)} must not be null"); } ; var teamUserRoundInfos = await tenantContext.DbContext.AppDb.TeamRepository.GetTeamUserRoundInfosAsync( new PredicateExpression((TeamUserRoundFields.TeamId == Parameters.Match.HomeTeamId | TeamUserRoundFields.TeamId == Parameters.Match.GuestTeamId) .And(TeamUserRoundFields.TournamentId == tenantContext.TournamentContext.MatchResultTournamentId)), cancellationToken); var model = new ResultEnteredModel { Match = Parameters.Match, RoundDescription = teamUserRoundInfos.First(tur => tur.RoundId == Parameters.Match.RoundId).RoundDescription, Username = teamUserRoundInfos.First(tur => tur.UserId == Parameters.ChangedByUserId).CompleteName, HomeTeamName = teamUserRoundInfos.First(tur => tur.TeamId == Parameters.Match.HomeTeamId).TeamNameForRound, GuestTeamName = teamUserRoundInfos.First(tur => tur.TeamId == Parameters.Match.GuestTeamId).TeamNameForRound }; var plainTextContent = await renderer.RenderAsync(Templates.Email.TemplateName.ResultEnteredTxt, model, Parameters.CultureInfo.TwoLetterISOLanguageName); var recipientGroups = new[] { teamUserRoundInfos.Where(tur => tur.TeamId == model.Match.HomeTeamId), // home team users teamUserRoundInfos.Where(tur => tur.TeamId == model.Match.GuestTeamId) // guest team users }; // each recipient group will get the same email text foreach (var recipients in recipientGroups) { var mailMergeMessage = mailMergeService.CreateStandardMessage(); mailMergeMessage.EnableFormatter = false; mailMergeMessage.MailMergeAddresses.Add(new MailMergeAddress(MailAddressType.From, tenantContext.SiteContext.Email.GeneralFrom.DisplayName, tenantContext.SiteContext.Email.GeneralFrom.Address)); foreach (var tur in recipients) { if (string.IsNullOrWhiteSpace(mailMergeMessage.Subject)) { using (new CultureSwitcher(Parameters.CultureInfo, Parameters.CultureInfo)) { mailMergeMessage.Subject = localizer["Match result '{0}' vs. '{1}'", model.HomeTeamName, model.GuestTeamName].Value; } } mailMergeMessage.MailMergeAddresses.Add(new MailMergeAddress(MailAddressType.To, $"{tur.CompleteName}", tur.Email)); if (!string.IsNullOrEmpty(tur.Email2)) { mailMergeMessage.MailMergeAddresses.Add(new MailMergeAddress(MailAddressType.CC, $"{tur.CompleteName}", tur.Email2)); } } // Send registration info also to league administration mailMergeMessage.MailMergeAddresses.Add(new MailMergeAddress(MailAddressType.Bcc, tenantContext.SiteContext.Email.GeneralBcc.DisplayName, tenantContext.SiteContext.Email.GeneralBcc.Address)); mailMergeMessage.PlainText = plainTextContent; yield return(mailMergeMessage); } }