def evernote_login_oauth(backend: str, oauth_port: int) -> str: if not is_output_to_terminal(): raise ProgramTerminatedError("OAuth requires user input!") if backend.startswith("china"): raise ProgramTerminatedError( "OAuth is not supported to log in to Yinxiang!\n" "You will have to reset your Evernote account password" " and use your credentials to log in.") oauth_client = get_oauth_client(backend) oauth_handler = EvernoteOAuthCallbackHandler(oauth_client, oauth_port) oauth_url = oauth_handler.get_oauth_url() click.echo( f"Opening authorization page...\n" f"If it didn't open automatically, please copy this URL into your browser:\n" f"{oauth_url}") click.launch(oauth_url) try: return oauth_handler.wait_for_token() except OAuthDeclinedError: raise ProgramTerminatedError("Authorization declined!")
def test_get_auth_token_url(mock_oauth_client, mock_evernote_oauth_client): expected_url = "https://www.evernote.com/OAuth.action?oauth_token=fake_app.FFF" oauth_handler = EvernoteOAuthCallbackHandler( mock_evernote_oauth_client, FAKE_OAUTH_PORT, FAKE_OAUTH_HOST ) url = oauth_handler.get_oauth_url() assert url == expected_url
def test_get_auth_token(mock_oauth_client, mock_evernote_oauth_client): oauth_handler = EvernoteOAuthCallbackHandler( mock_evernote_oauth_client, FAKE_OAUTH_PORT, FAKE_OAUTH_HOST ) oauth_handler.get_oauth_url() test_token = oauth_handler.wait_for_token() assert test_token == mock_oauth_client.fake_token
def test_get_auth_token_url(mock_oauth_client, mock_evernote_oauth_client): expected_url = "https://www.evernote.com/OAuth.action?oauth_token=fake_app.FFF" fake_oauth_port = 10500 oauth_handler = EvernoteOAuthCallbackHandler(mock_evernote_oauth_client, fake_oauth_port) url = oauth_handler.get_oauth_url() assert url == expected_url
def test_get_auth_token(mock_oauth_client, mock_evernote_oauth_client): fake_oauth_port = 10500 oauth_handler = EvernoteOAuthCallbackHandler(mock_evernote_oauth_client, fake_oauth_port) oauth_handler.get_oauth_url() test_token = oauth_handler.wait_for_token() assert test_token == mock_oauth_client.fake_token
def test_get_auth_token_declined(mock_oauth_client, mock_evernote_oauth_client): del mock_oauth_client.fake_callback_response["oauth_verifier"] oauth_handler = EvernoteOAuthCallbackHandler( mock_evernote_oauth_client, FAKE_OAUTH_PORT, FAKE_OAUTH_HOST ) oauth_handler.get_oauth_url() with pytest.raises(OAuthDeclinedError): oauth_handler.wait_for_token()
def test_server_no_docker(mock_oauth_client, mock_evernote_oauth_client, mock_oauth_http_server, mocker): fake_oauth_port = 10500 oauth_handler = EvernoteOAuthCallbackHandler(mock_evernote_oauth_client, fake_oauth_port) oauth_handler.get_oauth_url() oauth_handler.wait_for_token() mock_oauth_http_server.assert_any_call(("localhost", fake_oauth_port), mocker.ANY)
def test_server_no_docker( mock_oauth_client, mock_evernote_oauth_client, mock_oauth_http_server, mocker ): oauth_handler = EvernoteOAuthCallbackHandler( mock_evernote_oauth_client, FAKE_OAUTH_PORT, FAKE_OAUTH_HOST ) oauth_handler.get_oauth_url() oauth_handler.wait_for_token() mock_oauth_http_server.assert_any_call( (FAKE_OAUTH_HOST, FAKE_OAUTH_PORT), mocker.ANY )
def test_server_yes_docker( mock_oauth_client, mock_evernote_oauth_client, mock_oauth_http_server, mocker ): os.environ["INSIDE_DOCKER_CONTAINER"] = "1" oauth_handler = EvernoteOAuthCallbackHandler( mock_evernote_oauth_client, FAKE_OAUTH_PORT, FAKE_OAUTH_HOST ) oauth_handler.get_oauth_url() oauth_handler.wait_for_token() mock_oauth_http_server.assert_any_call(("0.0.0.0", FAKE_OAUTH_PORT), mocker.ANY) del os.environ["INSIDE_DOCKER_CONTAINER"]
def test_server_yes_docker(mock_oauth_client, mock_evernote_oauth_client, mock_oauth_http_server, mocker): os.environ["INSIDE_DOCKER_CONTAINER"] = "1" fake_oauth_port = 10500 oauth_handler = EvernoteOAuthCallbackHandler(mock_evernote_oauth_client, fake_oauth_port) oauth_handler.get_oauth_url() oauth_handler.wait_for_token() mock_oauth_http_server.assert_any_call(("0.0.0.0", fake_oauth_port), mocker.ANY) del os.environ["INSIDE_DOCKER_CONTAINER"]
def test_get_auth_token_interrupted( mock_oauth_client, mock_evernote_oauth_client, mocker, ): mocker.patch( "evernote_backup.evernote_client_oauth.StoppableHTTPServer.serve_forever" ) mocker.patch("evernote_backup.evernote_client_oauth.StoppableHTTPServer.shutdown") mocker.patch( "evernote_backup.evernote_client_oauth.time.sleep", side_effect=KeyboardInterrupt, ) oauth_handler = EvernoteOAuthCallbackHandler( mock_evernote_oauth_client, FAKE_OAUTH_PORT, FAKE_OAUTH_HOST ) oauth_handler.get_oauth_url() with pytest.raises(KeyboardInterrupt): oauth_handler.wait_for_token()