Changeset View
Changeset View
Standalone View
Standalone View
swh/web/tests/common/test_origin_save.py
Show First 20 Lines • Show All 474 Lines • ▼ Show 20 Lines | def test_get_save_origin_requests_no_visit_date_found(mocker, visit_status): | ||||
""" | """ | ||||
sors = _get_save_origin_requests( | sors = _get_save_origin_requests( | ||||
mocker, load_status="scheduled", visit_status=visit_status, | mocker, load_status="scheduled", visit_status=visit_status, | ||||
) | ) | ||||
# check no visit date has been found | # check no visit date has been found | ||||
assert len(sors) == 1 | assert len(sors) == 1 | ||||
assert sors[0]["save_task_status"] == SAVE_TASK_RUNNING | assert sors[0]["save_task_status"] == SAVE_TASK_RUNNING | ||||
assert sors[0]["visit_date"] is None | assert sors[0]["visit_date"] is not None | ||||
assert sors[0]["visit_status"] == visit_status | assert sors[0]["visit_status"] == visit_status | ||||
@pytest.mark.django_db | @pytest.mark.django_db | ||||
@pytest.mark.parametrize("visit_status", ["not_found", "failed",]) | @pytest.mark.parametrize("visit_status", ["not_found", "failed",]) | ||||
def test_get_save_origin_requests_no_failed_status_override(mocker, visit_status): | def test_get_save_origin_requests_no_failed_status_override(mocker, visit_status): | ||||
"""Uneventful visits with failed statuses (failed, not found) are marked as failed | """Uneventful visits with failed statuses (failed, not found) are marked as failed | ||||
""" | """ | ||||
sors = _get_save_origin_requests( | sors = _get_save_origin_requests( | ||||
mocker, load_status="uneventful", visit_status=visit_status | mocker, load_status="uneventful", visit_status=visit_status | ||||
) | ) | ||||
assert len(sors) == 1 | assert len(sors) == 1 | ||||
assert sors[0]["save_task_status"] == SAVE_TASK_FAILED | assert sors[0]["save_task_status"] == SAVE_TASK_FAILED | ||||
visit_date = sors[0]["visit_date"] | visit_date = sors[0]["visit_date"] | ||||
if visit_status == "failed": | |||||
assert visit_date is None | |||||
else: | |||||
assert visit_date is not None | assert visit_date is not None | ||||
sors = get_save_origin_requests(_visit_type, _origin_url) | sors = get_save_origin_requests(_visit_type, _origin_url) | ||||
assert len(sors) == 1 | assert len(sors) == 1 | ||||
assert sors[0]["save_task_status"] == SAVE_TASK_FAILED | assert sors[0]["save_task_status"] == SAVE_TASK_FAILED | ||||
assert sors[0]["visit_status"] == visit_status | assert sors[0]["visit_status"] == visit_status | ||||
@pytest.mark.django_db | @pytest.mark.django_db | ||||
Show All 25 Lines | def test_get_visit_info_incomplete_visit_still_successful(mocker, load_status): | ||||
""" | """ | ||||
sors = _get_save_origin_requests( | sors = _get_save_origin_requests( | ||||
mocker, load_status=load_status, visit_status=None, | mocker, load_status=load_status, visit_status=None, | ||||
) | ) | ||||
assert len(sors) == 1 | assert len(sors) == 1 | ||||
assert sors[0]["save_task_status"] == SAVE_TASK_SUCCEEDED | assert sors[0]["save_task_status"] == SAVE_TASK_SUCCEEDED | ||||
# As the entry is missing the following information though | # As the entry is missing the following information though | ||||
assert sors[0]["visit_date"] is None | assert sors[0]["visit_date"] is not None | ||||
assert sors[0]["visit_status"] is None | assert sors[0]["visit_status"] is None | ||||
# It's still detected as to be updated by the refresh routine | # It's still detected as to be updated by the refresh routine | ||||
sors = refresh_save_origin_request_statuses() | sors = refresh_save_origin_request_statuses() | ||||
assert len(sors) == 1 | assert len(sors) == 1 | ||||
assert sors[0]["save_task_status"] == SAVE_TASK_SUCCEEDED | assert sors[0]["save_task_status"] == SAVE_TASK_SUCCEEDED | ||||
assert sors[0]["visit_date"] is None | assert sors[0]["visit_date"] is not None | ||||
assert sors[0]["visit_status"] is None | assert sors[0]["visit_status"] is None | ||||
@pytest.mark.django_db | @pytest.mark.django_db | ||||
def test_refresh_in_progress_save_request_statuses(mocker, api_client, archive_data): | def test_refresh_in_progress_save_request_statuses(mocker, api_client, archive_data): | ||||
"""Refresh a pending save origins requests and update if the status changes | """Refresh a pending save origins requests and update if the status changes | ||||
""" | """ | ||||
date_now = datetime.now(tz=timezone.utc) | date_now = datetime.now(tz=timezone.utc) | ||||
Show All 18 Lines | def test_refresh_in_progress_save_request_statuses(mocker, api_client, archive_data): | ||||
sors = refresh_save_origin_request_statuses() | sors = refresh_save_origin_request_statuses() | ||||
assert len(sors) == 1 | assert len(sors) == 1 | ||||
for sor in sors: | for sor in sors: | ||||
assert iso8601.parse_date(sor["save_request_date"]) >= date_pivot | assert iso8601.parse_date(sor["save_request_date"]) >= date_pivot | ||||
# The status is updated | # The status is updated | ||||
assert sor["save_task_status"] == SAVE_TASK_RUNNING | assert sor["save_task_status"] == SAVE_TASK_RUNNING | ||||
# but the following entries are missing so it's not updated | # but the following entries are missing so it's not updated | ||||
assert sor["visit_date"] is None | assert sor["visit_date"] is not None | ||||
assert sor["visit_status"] == "created" | assert sor["visit_status"] == "created" | ||||
# make the visit status completed | # make the visit status completed | ||||
# make the scheduler return a running event | # make the scheduler return a running event | ||||
_mock_scheduler( | _mock_scheduler( | ||||
mocker, | mocker, | ||||
task_status="completed", | task_status="completed", | ||||
task_run_status="eventful", | task_run_status="eventful", | ||||
visit_started_date=visit_started_date, | visit_started_date=visit_started_date, | ||||
) | ) | ||||
# This time around, the origin returned will have all information updated | # This time around, the origin returned will have all information updated | ||||
mock_get_origin_visits = mocker.patch( | mock_get_origin_visits = mocker.patch( | ||||
"swh.web.common.origin_save.get_origin_visits" | "swh.web.common.origin_save.get_origin_visits" | ||||
) | ) | ||||
# create a visit for the save request with status created | # create a visit for the save request with status created | ||||
visit_date = datetime.now(tz=timezone.utc).isoformat() | visit_date = datetime.now(tz=timezone.utc).isoformat() | ||||
anlambert: To remove, no ? | |||||
Done Inline Actionsquite ;) ardumont: quite ;) | |||||
visit_info = OriginVisitInfo( | visit_info = OriginVisitInfo( | ||||
date=visit_date, | date=visit_date, | ||||
formatted_date="", | formatted_date="", | ||||
metadata={}, | metadata={}, | ||||
origin=_origin_url, | origin=_origin_url, | ||||
snapshot="", # make mypy happy | snapshot="", # make mypy happy | ||||
status="full", | status="full", | ||||
type=_visit_type, | type=_visit_type, | ||||
url="", | url="", | ||||
visit=34, | visit=34, | ||||
) | ) | ||||
mock_get_origin_visits.return_value = [visit_info] | mock_get_origin_visits.return_value = [visit_info] | ||||
# Detected entry, this time it should be updated | # Detected entry, this time it should be updated | ||||
sors = refresh_save_origin_request_statuses() | sors = refresh_save_origin_request_statuses() | ||||
assert len(sors) == 1 | assert len(sors) == 1 | ||||
for sor in sors: | for sor in sors: | ||||
assert iso8601.parse_date(sor["save_request_date"]) >= date_pivot | assert iso8601.parse_date(sor["save_request_date"]) >= date_pivot | ||||
# as it turns out, in this test, this won't update anything as no new status got | # as it turns out, in this test, this won't update anything as no new status got | ||||
# returned by the scheduler | # returned by the scheduler | ||||
assert sor["save_task_status"] == SAVE_TASK_SUCCEEDED | assert sor["save_task_status"] == SAVE_TASK_RUNNING | ||||
assert sor["visit_date"] == visit_date | assert sor["visit_date"] == visit_date | ||||
assert sor["visit_status"] == "full" | assert sor["visit_status"] == "full" | ||||
# Once in final state, a sor should not be updated anymore | # Once in final state, a sor should not be updated anymore | ||||
sors = refresh_save_origin_request_statuses() | sors = refresh_save_origin_request_statuses() | ||||
assert len(sors) == 0 | assert len(sors) == 0 | ||||
Show All 15 Lines | def test_refresh_save_request_statuses(mocker, api_client, archive_data): | ||||
assert len(sors) == 1 | assert len(sors) == 1 | ||||
for sor in sors: | for sor in sors: | ||||
assert iso8601.parse_date(sor["save_request_date"]) >= date_pivot | assert iso8601.parse_date(sor["save_request_date"]) >= date_pivot | ||||
# as it turns out, in this test, this won't update anything as no new status got | # as it turns out, in this test, this won't update anything as no new status got | ||||
# returned by the scheduler | # returned by the scheduler | ||||
assert sor["save_task_status"] == SAVE_TASK_SCHEDULED | assert sor["save_task_status"] == SAVE_TASK_SCHEDULED | ||||
# Information is empty | # Information is empty | ||||
assert sor["visit_date"] is None | assert sor["visit_date"] is not None | ||||
assert sor["visit_status"] is None | assert sor["visit_status"] is None | ||||
# make the scheduler return eventful event for that origin | # make the scheduler return eventful event for that origin | ||||
_mock_scheduler(mocker) | _mock_scheduler(mocker) | ||||
# updates will be detected, entry should be updated but we are still missing info | # updates will be detected, entry should be updated but we are still missing info | ||||
Not Done Inline Actionss/And/An/ anlambert: s/And/An/ | |||||
sors = refresh_save_origin_request_statuses() | sors = refresh_save_origin_request_statuses() | ||||
assert len(sors) == 1 | assert len(sors) == 1 | ||||
for sor in sors: | for sor in sors: | ||||
assert iso8601.parse_date(sor["save_request_date"]) >= date_pivot | assert iso8601.parse_date(sor["save_request_date"]) >= date_pivot | ||||
# The status is updated | # The status is updated | ||||
assert sor["save_task_status"] == SAVE_TASK_SUCCEEDED | assert sor["save_task_status"] == SAVE_TASK_SUCCEEDED | ||||
# but the following entries are missing so it's not updated | # but the following entries are missing so it's not updated | ||||
assert sor["visit_date"] is None | assert sor["visit_date"] is not None | ||||
assert sor["visit_status"] is None | assert sor["visit_status"] is None | ||||
# This time around, the origin returned will have all information updated | # This time around, the origin returned will have all information updated | ||||
mock_get_origin_visits = mocker.patch( | mock_get_origin_visits = mocker.patch( | ||||
"swh.web.common.origin_save.get_origin_visits" | "swh.web.common.origin_save.get_origin_visits" | ||||
) | ) | ||||
# create a visit for the save request with status created | # create a visit for the save request with status created | ||||
visit_date = datetime.now(tz=timezone.utc).isoformat() | visit_date = datetime.now(tz=timezone.utc).isoformat() | ||||
Show All 28 Lines |
To remove, no ?