Changeset View
Changeset View
Standalone View
Standalone View
swh/web/tests/misc/test_origin_save.py
Show All 9 Lines | |||||
from django.test import Client | from django.test import Client | ||||
from swh.web.common.origin_save import ( | from swh.web.common.origin_save import ( | ||||
SAVE_REQUEST_ACCEPTED, | SAVE_REQUEST_ACCEPTED, | ||||
SAVE_TASK_NOT_YET_SCHEDULED, | SAVE_TASK_NOT_YET_SCHEDULED, | ||||
) | ) | ||||
from swh.web.common.utils import reverse | from swh.web.common.utils import reverse | ||||
from swh.web.settings.tests import save_origin_rate_post | from swh.web.settings.tests import save_origin_rate_post | ||||
from swh.web.tests.utils import ( | |||||
check_api_post_response, | |||||
check_http_get_response, | |||||
check_http_post_response, | |||||
) | |||||
visit_type = "git" | visit_type = "git" | ||||
origin = {"url": "https://github.com/python/cpython"} | origin = {"url": "https://github.com/python/cpython"} | ||||
@pytest.fixture | @pytest.fixture | ||||
def client(): | def client(): | ||||
return Client(enforce_csrf_checks=True) | return Client(enforce_csrf_checks=True) | ||||
def test_save_request_form_csrf_token(client, mocker): | def test_save_request_form_csrf_token(client, mocker): | ||||
mock_create_save_origin_request = mocker.patch( | mock_create_save_origin_request = mocker.patch( | ||||
"swh.web.misc.origin_save.create_save_origin_request" | "swh.web.misc.origin_save.create_save_origin_request" | ||||
) | ) | ||||
_mock_create_save_origin_request(mock_create_save_origin_request) | _mock_create_save_origin_request(mock_create_save_origin_request) | ||||
url = reverse( | url = reverse( | ||||
"origin-save-request", | "origin-save-request", | ||||
url_args={"visit_type": visit_type, "origin_url": origin["url"]}, | url_args={"visit_type": visit_type, "origin_url": origin["url"]}, | ||||
) | ) | ||||
resp = client.post(url) | check_http_post_response(client, url, status_code=403) | ||||
assert resp.status_code == 403 | |||||
data = _get_csrf_token(client, reverse("origin-save")) | data = _get_csrf_token(client, reverse("origin-save")) | ||||
resp = client.post(url, data=data) | check_api_post_response(client, url, data=data, status_code=200) | ||||
assert resp.status_code == 200 | |||||
def test_save_request_form_rate_limit(client, mocker): | def test_save_request_form_rate_limit(client, mocker): | ||||
mock_create_save_origin_request = mocker.patch( | mock_create_save_origin_request = mocker.patch( | ||||
"swh.web.misc.origin_save.create_save_origin_request" | "swh.web.misc.origin_save.create_save_origin_request" | ||||
) | ) | ||||
_mock_create_save_origin_request(mock_create_save_origin_request) | _mock_create_save_origin_request(mock_create_save_origin_request) | ||||
url = reverse( | url = reverse( | ||||
"origin-save-request", | "origin-save-request", | ||||
url_args={"visit_type": visit_type, "origin_url": origin["url"]}, | url_args={"visit_type": visit_type, "origin_url": origin["url"]}, | ||||
) | ) | ||||
data = _get_csrf_token(client, reverse("origin-save")) | data = _get_csrf_token(client, reverse("origin-save")) | ||||
for _ in range(save_origin_rate_post): | for _ in range(save_origin_rate_post): | ||||
resp = client.post(url, data=data) | check_api_post_response(client, url, data=data, status_code=200) | ||||
assert resp.status_code == 200 | |||||
resp = client.post(url, data=data) | check_api_post_response(client, url, data=data, status_code=429) | ||||
assert resp.status_code == 429 | |||||
def test_save_request_form_server_error(client, mocker): | def test_save_request_form_server_error(client, mocker): | ||||
mock_create_save_origin_request = mocker.patch( | mock_create_save_origin_request = mocker.patch( | ||||
"swh.web.misc.origin_save.create_save_origin_request" | "swh.web.misc.origin_save.create_save_origin_request" | ||||
) | ) | ||||
mock_create_save_origin_request.side_effect = Exception("Server error") | mock_create_save_origin_request.side_effect = Exception("Server error") | ||||
url = reverse( | url = reverse( | ||||
"origin-save-request", | "origin-save-request", | ||||
url_args={"visit_type": visit_type, "origin_url": origin["url"]}, | url_args={"visit_type": visit_type, "origin_url": origin["url"]}, | ||||
) | ) | ||||
data = _get_csrf_token(client, reverse("origin-save")) | data = _get_csrf_token(client, reverse("origin-save")) | ||||
check_api_post_response(client, url, data=data, status_code=500) | |||||
resp = client.post(url, data=data) | |||||
assert resp.status_code == 500 | |||||
def test_old_save_url_redirection(client): | def test_old_save_url_redirection(client): | ||||
url = reverse("browse-origin-save") | url = reverse("browse-origin-save") | ||||
resp = client.get(url) | |||||
assert resp.status_code == 302 | |||||
redirect_url = reverse("origin-save") | redirect_url = reverse("origin-save") | ||||
resp = check_http_get_response(client, url, status_code=302) | |||||
assert resp["location"] == redirect_url | assert resp["location"] == redirect_url | ||||
def _get_csrf_token(client, url): | def _get_csrf_token(client, url): | ||||
resp = client.get(url) | resp = client.get(url) | ||||
return {"csrfmiddlewaretoken": resp.cookies["csrftoken"].value} | return {"csrfmiddlewaretoken": resp.cookies["csrftoken"].value} | ||||
Show All 10 Lines |