44 lines
1.3 KiB
Python
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()
|