I have a simple method which is using an interface to call the repository, method is working just fine but whenever I try to mock Login method and return something fake, it just return null for me.
my method
[HttpPost]
public ActionResult<LoginResultViewModel> Login([FromBody] UserViewModel model)
{
var result = new LoginResultViewModel();
var loginResult = _authRepository.Login(new User
{
Email = model.Email,
Password = model.Password
});
result.IsLogin = loginResult.IsLogin;
result.User = new UserViewModel
{
Email = loginResult.User.Email,
Id = loginResult.User.Id,
};
return Ok(result);
}
And here is my test
[Fact]
public void Login_Return_User_With_Token()
{
// Arrange
var _fakeLoginResult = new LoginResult
{
Token = "Fake token",
User = new User
{
Email = "Fake email"
}
};
var fakeUser = new User { Email = "Fake Email", Password = "Fake Password" };
var fakeUserViewModel = new UserViewModel { Email = "Fake Email", Password = "Fake Password" };
var mockRepo = new Mock<IAuthRepository>();
var controller = new AuthController(mockRepo.Object);
mockRepo.Setup(repo => repo.Login(fakeUser)).Returns(_fakeLoginResult);
// Act
var methodResult = controller.Login(fakeUserViewModel);
// Assert
var testResult = methodResult.Result as OkObjectResult;
Assert.Equal(_fakeLoginResult, testResult.Value);
}
Error catch in result.IsLogin = loginResult.IsLogin; because loginResult is null.