mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2024-11-30 13:31:08 +00:00
Adds tests for recent import average time
This commit is contained in:
parent
f0d3ceefa0
commit
f80e2465ed
2 changed files with 46 additions and 9 deletions
|
@ -1,4 +1,5 @@
|
||||||
""" test for app action functionality """
|
""" test for app action functionality """
|
||||||
|
import datetime
|
||||||
import pathlib
|
import pathlib
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
|
@ -106,3 +107,45 @@ class ImportViews(TestCase):
|
||||||
with patch("bookwyrm.models.import_job.import_item_task.delay") as mock:
|
with patch("bookwyrm.models.import_job.import_item_task.delay") as mock:
|
||||||
views.retry_item(request, job.id, item.id)
|
views.retry_item(request, job.id, item.id)
|
||||||
self.assertEqual(mock.call_count, 1)
|
self.assertEqual(mock.call_count, 1)
|
||||||
|
|
||||||
|
def test_get_average_import_time_no_imports(self):
|
||||||
|
"""Give people a sense of the timing"""
|
||||||
|
result = views.imports.import_data.get_average_import_time()
|
||||||
|
self.assertIsNone(result)
|
||||||
|
|
||||||
|
def test_get_average_import_time_no_imports_this_week(self):
|
||||||
|
"""Give people a sense of the timing"""
|
||||||
|
models.ImportJob.objects.create(
|
||||||
|
user=self.local_user,
|
||||||
|
created_date=datetime.datetime(2000, 1, 1),
|
||||||
|
updated_date=datetime.datetime(2001, 1, 1),
|
||||||
|
status="complete",
|
||||||
|
complete=True,
|
||||||
|
mappings={},
|
||||||
|
)
|
||||||
|
result = views.imports.import_data.get_average_import_time()
|
||||||
|
self.assertIsNone(result)
|
||||||
|
|
||||||
|
def test_get_average_import_time_with_data(self):
|
||||||
|
"""Now, with data"""
|
||||||
|
now = datetime.datetime.now()
|
||||||
|
two_hours_ago = now - datetime.timedelta(hours=2)
|
||||||
|
four_hours_ago = now - datetime.timedelta(hours=4)
|
||||||
|
models.ImportJob.objects.create(
|
||||||
|
user=self.local_user,
|
||||||
|
created_date=two_hours_ago,
|
||||||
|
updated_date=now,
|
||||||
|
status="complete",
|
||||||
|
complete=True,
|
||||||
|
mappings={},
|
||||||
|
)
|
||||||
|
models.ImportJob.objects.create(
|
||||||
|
user=self.local_user,
|
||||||
|
created_date=four_hours_ago,
|
||||||
|
updated_date=now,
|
||||||
|
status="complete",
|
||||||
|
complete=True,
|
||||||
|
mappings={},
|
||||||
|
)
|
||||||
|
result = views.imports.import_data.get_average_import_time()
|
||||||
|
self.assertEqual(result, 3 * 60 * 60)
|
||||||
|
|
|
@ -44,11 +44,7 @@ class Import(View):
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
seconds = get_or_set(
|
seconds = get_or_set("avg-import-time", get_average_import_time, timeout=86400)
|
||||||
"avg-import-time",
|
|
||||||
get_average_import_time,
|
|
||||||
timeout=86400
|
|
||||||
)
|
|
||||||
if seconds > 60**2:
|
if seconds > 60**2:
|
||||||
data["recent_avg_hours"] = seconds / (60**2)
|
data["recent_avg_hours"] = seconds / (60**2)
|
||||||
elif seconds:
|
elif seconds:
|
||||||
|
@ -98,9 +94,7 @@ def get_average_import_time() -> float:
|
||||||
"""Helper to figure out how long imports are taking (returns seconds)"""
|
"""Helper to figure out how long imports are taking (returns seconds)"""
|
||||||
last_week = timezone.now() - datetime.timedelta(days=7)
|
last_week = timezone.now() - datetime.timedelta(days=7)
|
||||||
recent_avg = (
|
recent_avg = (
|
||||||
models.ImportJob.objects.filter(
|
models.ImportJob.objects.filter(created_date__gte=last_week, status="complete")
|
||||||
created_date__gte=last_week, status="complete"
|
|
||||||
)
|
|
||||||
.annotate(
|
.annotate(
|
||||||
runtime=ExpressionWrapper(
|
runtime=ExpressionWrapper(
|
||||||
F("updated_date") - F("created_date"),
|
F("updated_date") - F("created_date"),
|
||||||
|
@ -113,4 +107,4 @@ def get_average_import_time() -> float:
|
||||||
|
|
||||||
if recent_avg:
|
if recent_avg:
|
||||||
return recent_avg.total_seconds()
|
return recent_avg.total_seconds()
|
||||||
return None
|
return None
|
||||||
|
|
Loading…
Reference in a new issue