MissingLink/test_api.py

44 lines
1.3 KiB
Python

import unittest
from unittest.mock import Mock, patch
from simplejson.scanner import JSONDecodeError
import web_view
from add_links import api
class ApiGetTests(unittest.TestCase):
def test_429_error_preserves_full_message(self) -> None:
response = Mock()
response.status_code = 429
response.text = (
"Too many requests. If you are a tool operator, contact "
"noc@example.org for help."
)
response.json.side_effect = JSONDecodeError("bad json", "", 0)
session = Mock()
session.get.return_value = response
with patch("add_links.api._get_active_session", return_value=(session, "anon")):
with self.assertRaises(api.MediawikiError) as ctx:
api.api_get({"action": "query"})
self.assertEqual(str(ctx.exception), response.text)
def test_active_session_uses_logged_in_request_session(self) -> None:
oauth_session = Mock()
with web_view.app.test_request_context("/"):
with patch(
"add_links.mediawiki_oauth.get_oauth_session",
return_value=oauth_session,
):
session, auth_mode = api._get_active_session()
self.assertIs(session, oauth_session)
self.assertEqual(auth_mode, "oauth")
if __name__ == "__main__":
unittest.main()