I'm trying to test a handler from my api that is called by the mediator but it seams that it can't be called in the test case. I don't want to mock the mediator nor the handler, just the repositories.
Here my teste code:
using NUnit.Framework;
using Domain.Model;
using Core.Handlers.TimerRegister;
using System.Security.Cryptography.X509Certificates;
using Moq;
using Repository.IRepository;
using System;
using MediatR;
namespace EmployeeRegisterTest.CoreTest
{
[TestFixture]
public class TimerRegisterTest
{
private Mock<IEmployeeRepository> employeeRepositoryMock = new Mock<IEmployeeRepository>();
private Mock<IEmployeeTimeRegister> timerRegisterRepositoryMock = new Mock<IEmployeeTimeRegister>();
private TimerRegisterCommandHandler TimerRegisterCommandHandler;
private IMediator mediator;
[Test]
public async Task MustRegisterTimeCorrecttly()
{
var employee = new Employee
{
Email = "JorgeEmailTest@email.com",
EmployeeName = "Jorge",
Password = "$2a$11$p0655c8x/QoQAjnor0vT8eoK6OagnT1g34b/YN9NkPOtsvlFf828G",
Role = "mananger",
Id = 2
};
var timeRegister = new TimeRegister
{
Employee = employee,
Id = 1,
EmployeeTimeRegister = DateTime.Now
};
var timerRegistarList = new List<TimeRegister>();
timerRegistarList.Add(timeRegister);
var timeRegisterCommandRequest = new TimeRegisterCommandRequest
{
EmployeeEmail = employee.Email,
EmployeeName = employee.EmployeeName,
};
employeeRepositoryMock.Setup( x => x.GetEmployee("JorgeEmailTest@email.com"))
.Returns(Task.FromResult(employee));
timerRegisterRepositoryMock.Setup(x => x.GetTodayTimeRegisterByEmployeeAndDate(employee, DateTime.Now))
.Returns(Task.FromResult(timerRegistarList));
var returns = await mediator.Send(timeRegisterCommandRequest);
Assert.Equals(returns.message, "Register created successfuly");
}
}
}
I tried intilizing the metiator, and did not worked. I tried using costroctor, but it dosen't worked as well. Anyone here hava any ideas how to make this work?
If you are using Microsoft.Dependency.Injection
for DI in your project then you can do it like this:
var services = new ServiceCollection();
services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblies(assembliesForMediar));
//Add the rest of your dependencies
services.AddScoped<IEmployeeRepository>(sp => employeeRepositoryMock.Object);
services.AddScoped<IEmployeeTimeRegister>(sp => timerRegisterRepositoryMock.Object);
var provider = services.BuildServiceProvider();
var mediator = provider.GetServices<IMediator>();
var returns = await mediator.Send(timeRegisterCommandRequest);