public void LaunchesBrowserToForgotPasswordPage()
        {
            var repositoryHosts = Substitute.For<IRepositoryHosts>();
            var gitHubHost = Substitute.For<IRepositoryHost>();
            gitHubHost.Address.Returns(HostAddress.GitHubDotComHostAddress);
            repositoryHosts.GitHubHost.Returns(gitHubHost);
            var browser = Substitute.For<IVisualStudioBrowser>();
            var loginViewModel = new LoginToGitHubViewModel(repositoryHosts, browser);

            loginViewModel.NavigateForgotPassword.Execute(null);

            browser.Received().OpenUrl(new Uri(HostAddress.GitHubDotComHostAddress.WebUri, GitHubUrls.ForgotPasswordPath));
        }
        public void LaunchesBrowserToSignUpPage()
        {
            var repositoryHosts = Substitute.For<IRepositoryHosts>();
            var gitHubHost = Substitute.For<IRepositoryHost>();
            gitHubHost.Address.Returns(HostAddress.GitHubDotComHostAddress);
            repositoryHosts.GitHubHost.Returns(gitHubHost);
            var browser = Substitute.For<IVisualStudioBrowser>();
            var loginViewModel = new LoginToGitHubViewModel(repositoryHosts, browser);

            loginViewModel.SignUp.Execute(null);

            browser.Received().OpenUrl(GitHubUrls.Plans);
        }
        public void ShowsHelpfulTooltipWhenForbiddenResponseReceived()
        {
            var response = Substitute.For<IResponse>();
            response.StatusCode.Returns(HttpStatusCode.Forbidden);
            var repositoryHosts = Substitute.For<IRepositoryHosts>();
            repositoryHosts.LogIn(HostAddress.GitHubDotComHostAddress, Args.String, Args.String)
                .Returns(_ => Observable.Throw<AuthenticationResult>(new ForbiddenException(response)));
            var browser = Substitute.For<IVisualStudioBrowser>();
            var loginViewModel = new LoginToGitHubViewModel(repositoryHosts, browser);

            loginViewModel.Login.Execute(null);

            Assert.True(loginViewModel.ShowLogInFailedError);
            Assert.Equal("Make sure to use your password and not a Personal Access token to log in.",
                loginViewModel.LoginFailedMessage);
        }
        public void ShowsHelpfulTooltipWhenForbiddenResponseReceived()
        {
            var response = Substitute.For<IResponse>();
            response.StatusCode.Returns(HttpStatusCode.Forbidden);
            var repositoryHosts = Substitute.For<IRepositoryHosts>();
            repositoryHosts.LogIn(HostAddress.GitHubDotComHostAddress, Args.String, Args.String)
                .Returns(_ => Observable.Throw<AuthenticationResult>(new ForbiddenException(response)));
            var browser = Substitute.For<IVisualStudioBrowser>();
            var loginViewModel = new LoginToGitHubViewModel(repositoryHosts, browser);
            var message = "";

            using (UserError.RegisterHandler<UserError>(x =>
                {
                    message = x.ErrorMessage;
                    return Observable.Return(RecoveryOptionResult.RetryOperation);
                }))
            {
                loginViewModel.Login.Execute(null);
            }

            Assert.Equal("Make sure to use your password and not a Personal Access token to sign in.",
                message);
        }