I am trying to mock a class which registers users to test. and In the test code I can see it clearly fails at callbackUrl below.
The PageModel class has a field IUrlHelper declared as Url. The IUrlHelper interface has 5 methods which does NOT include .Page(). Mocking those 5 would be easy but I have no idea how to mock extension methods.
Can someone please help? I have been stuck on this for ages.
RegisterModel
public class RegisterModel : PageModel
{
private readonly IUrlHelper _urlHelper;
public RegisterModel(
IUrlHelper urlHelper)
{}
public async Task<IActionResult> OnPostAsync(
string returnUrl = null)
{
returnUrl = returnUrl ?? Url.Content("~/");
var callbackUrl = Url.Page(
"/Account/ConfirmEmail",
pageHandler: null,
values: new { userId = "full code has IdentityUserCreated", code = "string" },
protocol: Request.Scheme);
LocalRedirect(returnUrl);
return Page();
}
}
RegisterModelTests
[TestFixture]
public class RegisterModelTests
{
private Mock<IUrlHelper> _mockUrlHelper;
[SetUp]
public void SetUp()
{
_mockUrlHelper = new Mock<IUrlHelper>();
SetUpUrlHelper();
}
public RegisterModel CreateRegisterModel()
{
return new RegisterModel(
_mockUrlHelper.Object
);
}
[Test]
public async Task GivenValidInput_OnPostAsync_CreatesANewUser()
{
// Arrange
var unitUnderTest = CreateRegisterModel();
// Act
var result = await unitUnderTest.OnPostAsync("/asdsad/asda");
// Assert
if (result != null)
Assert.Pass();
}
private void SetUpUrlHelper()
{
_mockUrlHelper.Setup(x => x.Page(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<IdentityUser>(),
It.IsAny<string>())).Returns("callbackUrl").Verifiable();
}