Skip to content

Commit

Permalink
test: Adding unit test for "Jobs.ChooseDateReminder"
Browse files Browse the repository at this point in the history
  • Loading branch information
henriqueholtz committed Jun 14, 2024
1 parent b6e9ac0 commit c03f28d
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 6 deletions.
56 changes: 56 additions & 0 deletions ShareBook/ShareBook.Test.Unit/Jobs/1 - ChooseDateReminderTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
using Moq;
using Sharebook.Jobs;
using ShareBook.Service;
using System.Threading.Tasks;
using Xunit;
using ShareBook.Repository;
using Microsoft.Extensions.Configuration;
using System.Collections.Generic;
using ShareBook.Domain;
using ShareBook.Domain.DTOs;
using ShareBook.Test.Unit.Mocks;
using ShareBook.Domain.Common;
using System.Linq;
using System;
using Xunit.Extensions.Ordering;

namespace ShareBook.Test.Unit.Jobs
{
public class ChooseDateReminderTests
{
private readonly Mock<IJobHistoryRepository> _mockJobHistoryRepository = new();
private readonly Mock<IBookService> _mockBookService = new();
private readonly Mock<IEmailService> _mockEmailService = new();
private readonly Mock<IEmailTemplate> _mockEmailTemplate = new();
private const string HtmlMock = "<html>Example</html>";
private static User _user = new User { Id = Guid.NewGuid(), Name = "TestUser", Email = "[email protected]" };
private static Book _book = BookMock.GetLordTheRings(_user, _user);
private static List<Book> _allBooks = new List<Book> { _book };

public ChooseDateReminderTests()
{
_mockBookService.Setup(s => s.GetBooksChooseDateIsTodayAsync()).ReturnsAsync(_allBooks);
_mockEmailTemplate.Setup(s => s.GenerateHtmlFromTemplateAsync(It.IsAny<string>(), It.IsAny<object>())).ReturnsAsync(HtmlMock);
}

[Fact]
public async Task SendReminderToTheUser()
{
ChooseDateReminder job = new ChooseDateReminder(_mockJobHistoryRepository.Object, _mockBookService.Object, _mockEmailService.Object, _mockEmailTemplate.Object);

JobHistory result = await job.WorkAsync();

Assert.True(result.IsSuccess);
Assert.Equal("Lembrete amigável enviado para 'TestUser' referente ao livro 'Lord of the Rings'.", result.Details);
Assert.Equal(ChooseDateReminder.JobName, result.JobName);

_mockBookService.Verify(c => c.GetBooksChooseDateIsTodayAsync(), Times.Once);
_mockEmailTemplate.Verify(c => c.GenerateHtmlFromTemplateAsync(It.Is<string>(v => v.Equals("ChooseDateReminderTemplate")), It.IsAny<object>()), Times.Once);
_mockEmailService.Verify(c => c.SendAsync(It.Is<string>(v => v.Equals(_user.Email)), It.Is<string>(v => v.Equals(_user.Name)), It.Is<string>(v => v.Equals(HtmlMock)), It.Is<string>(v => v.Equals(ChooseDateReminder.EmailSubject)), It.Is<bool>((v) => !v), It.Is<bool>((v) => v)), Times.Once);

_mockBookService.VerifyNoOtherCalls();
_mockEmailService.VerifyNoOtherCalls();
_mockEmailTemplate.VerifyNoOtherCalls();
}
}
}
7 changes: 5 additions & 2 deletions ShareBook/ShareBook.Test.Unit/Mocks/BookMock.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,19 @@ namespace ShareBook.Test.Unit.Mocks
{
public class BookMock
{
public static Book GetLordTheRings(User user)
public static Book GetLordTheRings(User user, User userFacilitator = null)
{
Guid bookId = new Guid("d9f5fde8-ee7c-4cf5-aa90-35eca3c170b9");
return new Book()
{
Id = new Guid("d9f5fde8-ee7c-4cf5-aa90-35eca3c170b9"),
Id = bookId,
Title = "Lord of the Rings",
Author = "J. R. R. Tolkien",
ImageSlug = "lotr.png",
ImageBytes = Encoding.UTF8.GetBytes("STRINGBASE64"),
User = user,
BookUsers = new List<BookUser> { new BookUser { BookId = bookId, User = user } },
UserFacilitator = userFacilitator,
CategoryId = Guid.NewGuid(),
Status = ShareBook.Domain.Enums.BookStatus.Available
};
Expand Down
7 changes: 3 additions & 4 deletions ShareBook/Sharebook.Jobs/Jobs/1 - ChooseDateReminder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ public class ChooseDateReminder : GenericJob, IJob
private readonly IEmailService _emailService;
private readonly IEmailTemplate _emailTemplate;
private readonly IBookService _bookService;
public new const string JobName = "ChooseDateReminder";
public const string EmailSubject = "Hoje é o dia de escolher o ganhador!";

public ChooseDateReminder(
IJobHistoryRepository jobHistoryRepo,
Expand All @@ -21,7 +23,6 @@ public ChooseDateReminder(
IEmailTemplate emailTemplate
) : base(jobHistoryRepo)
{
JobName = "ChooseDateReminder";
Description = "Notifica o doador, com um lembrete amigável, no dia da doação. " +
"Com cópia para o facilitador.";
Interval = Interval.Dayly;
Expand Down Expand Up @@ -67,8 +68,6 @@ public override async Task<JobHistory> WorkAsync()

private async Task SendEmailAsync(Book book)
{
var emailSubject = "Hoje é o dia de escolher o ganhador!";

var vm = new
{
DonorName = book.User.Name,
Expand All @@ -80,7 +79,7 @@ private async Task SendEmailAsync(Book book)
};
var emailBodyHTML = await _emailTemplate.GenerateHtmlFromTemplateAsync("ChooseDateReminderTemplate", vm);

await _emailService.SendAsync(book.User.Email, book.User.Name, emailBodyHTML, emailSubject, copyAdmins: false, highPriority: true);
await _emailService.SendAsync(book.User.Email, book.User.Name, emailBodyHTML, EmailSubject, copyAdmins: false, highPriority: true);
}

#endregion
Expand Down

0 comments on commit c03f28d

Please sign in to comment.