This is my first test, I think it's testing what I need it to test but wanted to get some feedback.
I wanted to test to make sure the controller action returns a view with a certain ViewModel.
The code that it will be testing:
Controller:
public class UserController : Controller
{
private readonly ILogger<UserController> _logger;
private readonly IViewModelService _vmService;
public UserController(ILogger<UserController> logger, IViewModelService vmService)
{
_logger = logger;
_vmService = vmService;
}
public async Task<IActionResult> Index()
{
return View(await _vmService.GetIndexVM());
}
}
ViewModel
public class UserListVM
{
public IQueryable<DimUser> UserList { get; set; }
}
ViewModelService
public async Task<UserListVM> GetIndexVM()
{
return new UserListVM()
{
UserList = await _userRepo.GetUserList()
};
}
The Test:
public class UserControllerTests
{
[Fact]
public async Task Index_ReturnsAViewResult_WithUserListVM()
{
// Arrange
var logger = new Mock<ILogger<UserController>>();
var vmService = new Mock<IViewModelService>();
var myList = new List<DimUser>
{
new DimUser()
{
UserId = 1,
FirstName = "Test",
Surname = "TestSur",
RefNumber = "ABC1111111",
DateOfBirth = DateTime.Now
}
};
vmService.Setup(x => x.GetIndexVM()).ReturnsAsync(new UserListVM()
{
UserList = myList.AsQueryable()
});
var userController = new UserController(logger.Object, vmService.Object);
// Act
var result = await userController.Index();
var viewResult = Assert.IsType<ViewResult>(result);
var model = Assert.IsType<UserListVM>(viewResult.ViewData.Model);
// Assert
Assert.IsType<UserListVM>(model);
}
}