diff --git a/pyproject.toml b/pyproject.toml index a88ee430..057751e4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -107,6 +107,7 @@ convention = "google" "D", # https://docs.astral.sh/ruff/rules/#pydocstyle-d "ANN201", # https://docs.astral.sh/ruff/rules/missing-return-type-undocumented-public-function/ "SLF001", # https://docs.astral.sh/ruff/rules/private-member-access/ + "TRY003", # https://docs.astral.sh/ruff/rules/raise-vanilla-args/ ] "*/migrations/*" = [ "D" # https://docs.astral.sh/ruff/rules/#pydocstyle-d diff --git a/src/albums/managers.py b/src/albums/managers.py index 2280086d..14f85bbf 100644 --- a/src/albums/managers.py +++ b/src/albums/managers.py @@ -39,7 +39,8 @@ def get_queryset(self): # type: ignore[no-untyped-def] # noqa: ANN201 .prefetch_related("hits") .annotate(hitcount=Count("hits", distinct=True)) .prefetch_active_files_list(recursive=True) - ) + # ordering from Album META gets lost for some reason :( + ).order_by("created_at") class AlbumQuerySet(models.QuerySet): # type: ignore[type-arg] diff --git a/src/albums/tests.py b/src/albums/tests.py index 3e98d347..c6e379ae 100644 --- a/src/albums/tests.py +++ b/src/albums/tests.py @@ -112,6 +112,15 @@ def test_album_list_api(self) -> None: assert response.status_code == 200 assert len(response.json()["bma_response"]) == 10, "Did not get 10 albums" + # make sure albums are sorted as expected + latest = None + for album in response.json()["bma_response"]: + if not latest: + latest = album["created_at"] + if latest > album["created_at"]: + raise AssertionError(f"Albums are sorted wrong! {latest} > {album['created_at']}") + latest = album["created_at"] + # test the file filter with files in different albums response = self.client.get( reverse("api-v1-json:album_list"), diff --git a/src/files/managers.py b/src/files/managers.py index f1fc5d13..07aad5ae 100644 --- a/src/files/managers.py +++ b/src/files/managers.py @@ -38,7 +38,8 @@ def get_queryset(self) -> models.QuerySet["BaseFile"]: .prefetch_related("thumbnails") .prefetch_related(models.Prefetch("thumbnails", to_attr="thumbnail_list")) .prefetch_related(models.Prefetch("image_versions", to_attr="image_version_list")) - ) + # ordering by BaseFile Meta gets lost :( + ).order_by("created_at") class BaseFileQuerySet(PolymorphicQuerySet): diff --git a/src/files/tests.py b/src/files/tests.py index ba7ad9d7..355999cd 100644 --- a/src/files/tests.py +++ b/src/files/tests.py @@ -494,6 +494,19 @@ def test_file_list_permissions(self) -> None: assert response.status_code == 200 assert len(response.json()["bma_response"]) == 0 + def test_file_list_ordering(self) -> None: + """Make sure files are ordered by date with the oldest file first.""" + # upload 15 files and get them all + [self.file_upload(title=f"title{i}") for i in range(15)] + response = self.client.get(reverse("api-v1-json:file_list"), headers={"authorization": self.superuser.auth}) + latest = None + for f in response.json()["bma_response"]: + if not latest: + latest = f["created_at"] + if latest > f["created_at"]: + raise AssertionError(f"Files are sorted wrong! {latest} > {f['created_at']}") + latest = f["created_at"] + def test_metadata_get(self) -> None: """Get file metadata from the API.""" self.file_upload()