feat: update conditionals.py to use resolve_requested_version and DocumentVersion

- Replace resolve_effective_document_by_pk stub with direct get_object_or_404
  + resolve_requested_version calls in all five conditional functions
- Switch from .modified (shim) to .added (DocumentVersion native field)
- Switch thumbnail cache key to use version.id instead of document id
- Re-add get_root_document/get_latest_version_for_root stubs to versioning.py
  (bulk_edit.py still needs them; Task 10 will remove them)
- Update TestVersionAwareFilters tests to reflect simplified filter behavior
  (no more FieldError fallback; filters query content directly)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Trenton H
2026-04-14 08:05:34 -07:00
parent 2116ea3329
commit 19d930a81a
3 changed files with 58 additions and 44 deletions
@@ -7,7 +7,6 @@ from auditlog.models import LogEntry # type: ignore[import-untyped]
from django.contrib.auth.models import Permission
from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import FieldError
from django.core.files.uploadedfile import SimpleUploadedFile
from rest_framework import status
from rest_framework.test import APITestCase
@@ -619,31 +618,21 @@ class TestDocumentVersioningApi(DirectoriesMixin, APITestCase):
class TestVersionAwareFilters:
def test_title_content_filter_falls_back_to_content(self) -> None:
def test_title_content_filter_queries_content_directly(self) -> None:
queryset = mock.Mock()
fallback_queryset = mock.Mock()
queryset.filter.side_effect = [FieldError("missing field"), fallback_queryset]
result = TitleContentFilter().filter(queryset, " latest ")
TitleContentFilter().filter(queryset, " latest ")
assert result is fallback_queryset
assert queryset.filter.call_count == 2
assert queryset.filter.call_count == 1
def test_effective_content_filter_falls_back_to_content_lookup(self) -> None:
def test_effective_content_filter_queries_content_directly(self) -> None:
queryset = mock.Mock()
fallback_queryset = mock.Mock()
queryset.filter.side_effect = [FieldError("missing field"), fallback_queryset]
result = EffectiveContentFilter(lookup_expr="icontains").filter(
queryset,
" latest ",
)
EffectiveContentFilter(lookup_expr="icontains").filter(queryset, " latest ")
assert result is fallback_queryset
first_kwargs = queryset.filter.call_args_list[0].kwargs
second_kwargs = queryset.filter.call_args_list[1].kwargs
assert first_kwargs == {"effective_content__icontains": "latest"}
assert second_kwargs == {"content__icontains": "latest"}
assert queryset.filter.call_count == 1
kwargs = queryset.filter.call_args_list[0].kwargs
assert kwargs == {"content__icontains": "latest"}
def test_effective_content_filter_returns_input_for_empty_values(self) -> None:
queryset = mock.Mock()