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);
        }
Пример #2
0
        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;
        }
Пример #3
0
        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);
        }