public void Validate_ShouldSendTokenInfoToGoogleAndRetrieveResult() { //Arrange var validationUrl = Guid.NewGuid().ToString(); var secret = Guid.NewGuid().ToString(); var captchaToken = Guid.NewGuid().ToString(); var random = new Random(); var ip = new IPAddress(random.NextPositive()); var verificationResult = new CaptchaVerificationResult { Success = true }; var httpClientMock = new Mock <IHttpClient>(); httpClientMock .Setup(client => client.PostAsFormUrlEncodedContentAsync <CaptchaVerificationResult>(It.IsAny <string>(), It.IsAny <KeyValuePair <string, string>[]>())).ReturnsAsync(() => verificationResult); var validator = new GoogleCaptchaValidator(validationUrl, secret, httpClientMock.Object); //Act var result = validator.Validate(captchaToken, ip).Result; //Assert Assert.That(result, Is.EqualTo(verificationResult)); httpClientMock.Verify( client => client.PostAsFormUrlEncodedContentAsync <CaptchaVerificationResult>(validationUrl, It.Is((KeyValuePair <string, string>[] data) => data.Any(d => d.Key == "secret" && d.Value == secret) && data.Any(d => d.Key == "response" && d.Value == captchaToken) && data.Any(d => d.Key == "remoteip" && d.Value == ip.ToString()) )), Times.Once); }
public void Setup() { var userStoreMock = new Mock <IUserStore <User> >(); _passwordHasherMock = new Mock <IPasswordHasher <User> >(); var lookupNormalizerMock = new Mock <ILookupNormalizer>(); var errorsMock = new Mock <IdentityErrorDescriber>(); var loggerMock = new Mock <ILogger <UserManager <User> > >(); _userManagerMock = new Mock <UserManager <User> >( userStoreMock.Object, null, _passwordHasherMock.Object, null, null, lookupNormalizerMock.Object, errorsMock.Object, null, loggerMock.Object); _userManagerMock.Setup(manager => manager.CreateAsync(It.IsAny <User>(), It.IsAny <string>())) .ReturnsAsync(new IdentityResult()); var expectedCaptchaResult = new CaptchaVerificationResult { Success = true }; _captchaValidatorMock = new Mock <ICaptchaValidator>(); _captchaValidatorMock.Setup(validator => validator.Validate(It.IsAny <string>(), It.IsAny <IPAddress>())) .ReturnsAsync(expectedCaptchaResult); _mailSenderMock = new Mock <IMailSender>(); _accessPassFactoryMock = new Mock <ITokenAccessPassFactory>(); _loginSessionServiceMock = new Mock <ILoginSessionService>(); _controller = new AuthController(_userManagerMock.Object, _passwordHasherMock.Object, _captchaValidatorMock.Object, _mailSenderMock.Object, _accessPassFactoryMock.Object, _loginSessionServiceMock.Object); var context = new ControllerContextBuilder().WithClientIp().Build(); _controller.ControllerContext = context; }
public void SendForgotPasswordMailShouldReturnBadRequestIfCaptchaIsInvalid() { //Arrange var model = new ForgotPasswordModelBuilder().WithValidEmail().Build(); var expectedCaptchaResult = new CaptchaVerificationResult { Success = false }; _captchaValidatorMock.Setup(validator => validator.Validate(It.IsAny <string>(), It.IsAny <IPAddress>())) .ReturnsAsync(expectedCaptchaResult); //Act var result = _controller.SendForgotPasswordMail(model).Result as BadRequestObjectResult; //Assert Assert.That(result, Is.Not.Null); _captchaValidatorMock.Verify(validator => validator.Validate(model.CaptchaToken, _controller.HttpContext.Connection.RemoteIpAddress)); _userManagerMock.Verify(manager => manager.FindByEmailAsync(It.IsAny <string>()), Times.Never); _mailSenderMock.Verify(sender => sender.SendConfirmUserEmailMessageAsync(It.IsAny <User>(), It.IsAny <string>()), Times.Never); }