From acc68147dc889a4de816326b3c80b98c66bed52f Mon Sep 17 00:00:00 2001 From: Matthew Mincher Date: Sun, 21 Jul 2024 12:39:05 +0100 Subject: [PATCH 1/2] Order user shelf previews by book shelved date --- bookwyrm/views/user.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bookwyrm/views/user.py b/bookwyrm/views/user.py index ba224d671..2de60a23f 100644 --- a/bookwyrm/views/user.py +++ b/bookwyrm/views/user.py @@ -55,7 +55,9 @@ class User(View): { "name": user_shelf.name, "local_path": user_shelf.local_path, - "books": user_shelf.books.all()[:3], + "books": user_shelf.books.order_by( + "-shelfbook__shelved_date" + ).all()[:3], "size": user_shelf.books.count(), } ) From f6eb4f4f27317c758532828ef8942bd4e03c9362 Mon Sep 17 00:00:00 2001 From: Matthew Mincher Date: Sun, 21 Jul 2024 13:42:44 +0100 Subject: [PATCH 2/2] Add test for shelf order --- bookwyrm/tests/views/test_user.py | 36 +++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/bookwyrm/tests/views/test_user.py b/bookwyrm/tests/views/test_user.py index 362d04feb..e7d69232c 100644 --- a/bookwyrm/tests/views/test_user.py +++ b/bookwyrm/tests/views/test_user.py @@ -1,6 +1,8 @@ """ test for app action functionality """ from unittest.mock import patch +import datetime + from django.contrib.auth.models import AnonymousUser from django.http.response import Http404 from django.template.response import TemplateResponse @@ -12,6 +14,11 @@ from bookwyrm.activitypub import ActivitypubResponse from bookwyrm.tests.validate_html import validate_html +def make_date(*args): + """helper function to easily generate a date obj""" + return datetime.datetime(*args, tzinfo=datetime.timezone.utc) + + class UserViews(TestCase): """view user and edit profile""" @@ -36,6 +43,10 @@ class UserViews(TestCase): cls.book = models.Edition.objects.create( title="test", parent_work=models.Work.objects.create(title="test work") ) + cls.book_recently_shelved = models.Edition.objects.create( + title="recently shelved", + parent_work=models.Work.objects.create(title="recent shelved"), + ) with ( patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"), patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), @@ -45,6 +56,14 @@ class UserViews(TestCase): book=cls.book, user=cls.local_user, shelf=cls.local_user.shelf_set.first(), + shelved_date=make_date(2020, 10, 21), + ) + + models.ShelfBook.objects.create( + book=cls.book_recently_shelved, + user=cls.local_user, + shelf=cls.local_user.shelf_set.first(), + shelved_date=make_date(2024, 7, 1), ) models.SiteSettings.objects.create() @@ -119,6 +138,23 @@ class UserViews(TestCase): with self.assertRaises(Http404): view(request, "rat") + def test_user_page_activity_sorted(self): + """the most recently shelved book should be displayed first""" + view = views.User.as_view() + request = self.factory.get("") + request.user = self.local_user + with patch("bookwyrm.views.user.is_api_request") as is_api: + is_api.return_value = False + result = view(request, "mouse") + + self.assertIsInstance(result, TemplateResponse) + self.assertEqual(result.status_code, 200) + + first_shelf = result.context_data["shelves"][0] + first_book = first_shelf["books"][0] + + self.assertEqual(first_book, self.book_recently_shelved) + def test_followers_page(self): """there are so many views, this just makes sure it LOADS""" view = views.Relationships.as_view()