using FluentAssertions; using Nop.Core.Domain.Messages; using Nop.Data; using Nop.Services.Messages; using NUnit.Framework; namespace Nop.Tests.Nop.Services.Tests.Messages; [TestFixture] public class QueuedEmailServiceTests : BaseNopTest { private IQueuedEmailService _queuedEmailService; private IRepository _queuedEmailRepository; private List _emails; private string _testEmail; [OneTimeSetUp] public async Task OneTimeSetUp() { _queuedEmailService = GetService(); _queuedEmailRepository = GetService>(); await _queuedEmailRepository.TruncateAsync(); _testEmail = "test@test.com"; } [TearDown] public async Task TearDown() { await _queuedEmailRepository.TruncateAsync(); } [SetUp] public async Task SetUp() { _emails = [ new() {From = NopTestsDefaults.AdminEmail, To = _testEmail, EmailAccountId = 1, SentTries = 5}, new() {From = NopTestsDefaults.AdminEmail, To = _testEmail, EmailAccountId = 1}, new() {From = NopTestsDefaults.AdminEmail, To = _testEmail, EmailAccountId = 1}, new() {From = NopTestsDefaults.AdminEmail, To = _testEmail, EmailAccountId = 1, SentOnUtc = DateTime.UtcNow}, new() {From = NopTestsDefaults.AdminEmail, To = _testEmail, EmailAccountId = 1, SentOnUtc = DateTime.UtcNow} ]; foreach (var queuedEmail in _emails) await _queuedEmailService.InsertQueuedEmailAsync(queuedEmail); } [Test] public async Task CanCRUD() { var queuedEmails = await _queuedEmailRepository.GetAllAsync(query => query); queuedEmails.Count.Should().Be(_emails.Count); var email = await _queuedEmailService.GetQueuedEmailByIdAsync(_emails[0].Id); email.Body = "test"; await _queuedEmailService.UpdateQueuedEmailAsync(email); (await _queuedEmailRepository.GetByIdAsync(_emails[0].Id)).Body.Should().Be(email.Body); await _queuedEmailService.DeleteQueuedEmailAsync(email); queuedEmails = await _queuedEmailRepository.GetAllAsync(query => query); queuedEmails.Count.Should().Be(_emails.Count - 1); await _queuedEmailService.DeleteQueuedEmailsAsync(_emails.Take(3).ToList()); queuedEmails = await _queuedEmailRepository.GetAllAsync(query => query); queuedEmails.Count.Should().Be(_emails.Count - 3); await _queuedEmailService.DeleteAllEmailsAsync(); queuedEmails = await _queuedEmailRepository.GetAllAsync(query => query); queuedEmails.Count.Should().Be(0); } [Test] public async Task CanGetQueuedEmailsByIds() { var queuedEmails = await _queuedEmailService.GetQueuedEmailsByIdsAsync(_emails.Take(3).Select(e => e.Id).ToArray()); queuedEmails.Count.Should().Be(3); } [Test] public async Task CanSearchEmails() { var loadNotSentItemsOnly = true; var loadOnlyItemsToBeSent = true; var maxSendTries = int.MaxValue; var loadNewest = false; async Task getCountAsync() { var emails = await _queuedEmailService.SearchEmailsAsync(NopTestsDefaults.AdminEmail, _testEmail, null, null, loadNotSentItemsOnly, loadOnlyItemsToBeSent, maxSendTries, loadNewest); return emails.Count; } (await getCountAsync()).Should().Be(3); loadNotSentItemsOnly = false; (await getCountAsync()).Should().Be(5); loadOnlyItemsToBeSent = false; (await getCountAsync()).Should().Be(5); loadNotSentItemsOnly = true; (await getCountAsync()).Should().Be(3); loadNotSentItemsOnly = false; maxSendTries = 1; (await getCountAsync()).Should().Be(4); } [Test] public async Task CanDeleteAlreadySentEmails() { await _queuedEmailService.DeleteAlreadySentEmailsAsync(null, null); var queuedEmails = await _queuedEmailRepository.GetAllAsync(query => query); queuedEmails.Count.Should().Be(_emails.Count(e => !e.SentOnUtc.HasValue)); } }