Use OAuth sessions for web API requests
This commit is contained in:
parent
e022872767
commit
118ec9fc9b
4 changed files with 125 additions and 7 deletions
|
|
@ -37,6 +37,8 @@ class ArticlePageSkipTests(unittest.TestCase):
|
|||
}
|
||||
|
||||
with (
|
||||
patch("web_view.mediawiki_oauth.get_username", return_value="Test user"),
|
||||
patch("web_view.mediawiki_oauth.get_oauth_session", return_value=object()),
|
||||
patch("web_view.api.get_wiki_info", return_value=None),
|
||||
patch("web_view.search_count", return_value=3),
|
||||
patch("web_view.search_count_with_link", return_value=0),
|
||||
|
|
@ -62,6 +64,8 @@ class ArticlePageSkipTests(unittest.TestCase):
|
|||
]
|
||||
|
||||
with (
|
||||
patch("web_view.mediawiki_oauth.get_username", return_value="Test user"),
|
||||
patch("web_view.mediawiki_oauth.get_oauth_session", return_value=object()),
|
||||
patch("web_view.api.get_wiki_info", return_value="Documentary film"),
|
||||
patch("web_view.search_count", return_value=2),
|
||||
patch("web_view.search_count_with_link", return_value=0),
|
||||
|
|
@ -78,6 +82,8 @@ class ArticlePageSkipTests(unittest.TestCase):
|
|||
hits = [hit("documentary film")]
|
||||
|
||||
with (
|
||||
patch("web_view.mediawiki_oauth.get_username", return_value="Test user"),
|
||||
patch("web_view.mediawiki_oauth.get_oauth_session", return_value=object()),
|
||||
patch("web_view.api.get_wiki_info", return_value="Documentary film"),
|
||||
patch("web_view.search_count", return_value=1),
|
||||
patch("web_view.search_count_with_link", return_value=0),
|
||||
|
|
@ -96,7 +102,11 @@ class ValidHitTests(unittest.TestCase):
|
|||
self.client = web_view.app.test_client()
|
||||
|
||||
def test_redirect_target_is_not_valid_hit(self) -> None:
|
||||
with patch("web_view.get_diff") as get_diff:
|
||||
with (
|
||||
patch("web_view.mediawiki_oauth.get_username", return_value="Test user"),
|
||||
patch("web_view.mediawiki_oauth.get_oauth_session", return_value=object()),
|
||||
patch("web_view.get_diff") as get_diff,
|
||||
):
|
||||
response = self.client.get(
|
||||
"/api/1/valid_hit",
|
||||
query_string={
|
||||
|
|
@ -111,6 +121,53 @@ class ValidHitTests(unittest.TestCase):
|
|||
get_diff.assert_not_called()
|
||||
|
||||
|
||||
class LoginRequiredTests(unittest.TestCase):
|
||||
def setUp(self) -> None:
|
||||
web_view.app.config["TESTING"] = True
|
||||
self.client = web_view.app.test_client()
|
||||
|
||||
def test_article_page_redirects_to_login_before_api_calls(self) -> None:
|
||||
with (
|
||||
patch("web_view.mediawiki_oauth.get_username", return_value=None),
|
||||
patch("web_view.mediawiki_oauth.get_oauth_session", return_value=None),
|
||||
patch("web_view.api.get_wiki_info") as get_wiki_info,
|
||||
):
|
||||
response = self.client.get("/link/DVD_documentary")
|
||||
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.assertIn("/oauth/start", response.location)
|
||||
get_wiki_info.assert_not_called()
|
||||
|
||||
def test_valid_hit_requires_login_before_diff_call(self) -> None:
|
||||
with (
|
||||
patch("web_view.mediawiki_oauth.get_username", return_value=None),
|
||||
patch("web_view.mediawiki_oauth.get_oauth_session", return_value=None),
|
||||
patch("web_view.get_diff") as get_diff,
|
||||
):
|
||||
response = self.client.get(
|
||||
"/api/1/valid_hit",
|
||||
query_string={"link_to": "Target", "link_from": "Candidate"},
|
||||
)
|
||||
|
||||
self.assertEqual(response.status_code, 401)
|
||||
self.assertEqual(response.get_json(), {"error": "login required"})
|
||||
get_diff.assert_not_called()
|
||||
|
||||
def test_hits_api_requires_login_before_search(self) -> None:
|
||||
with (
|
||||
patch("web_view.mediawiki_oauth.get_username", return_value=None),
|
||||
patch("web_view.mediawiki_oauth.get_oauth_session", return_value=None),
|
||||
patch("web_view.core.do_search") as do_search,
|
||||
):
|
||||
response = self.client.get(
|
||||
"/api/1/hits", query_string={"title": "Target"}
|
||||
)
|
||||
|
||||
self.assertEqual(response.status_code, 401)
|
||||
self.assertEqual(response.get_json(), {"error": "login required"})
|
||||
do_search.assert_not_called()
|
||||
|
||||
|
||||
class ProtectedCandidateTests(unittest.TestCase):
|
||||
def test_edit_protected_hits_are_filtered_out(self) -> None:
|
||||
hits = [hit("Editable"), hit("Protected")]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue