From 7684101f1591292c15be7d80b87d51937e21ff43 Mon Sep 17 00:00:00 2001 From: Matt Lehrer Date: Thu, 16 Nov 2023 10:38:41 +0100 Subject: [PATCH] move ratings to new edition --- bookwyrm/tests/views/books/test_editions.py | 28 +++++++++++++++++++++ bookwyrm/views/books/editions.py | 7 ++++++ 2 files changed, 35 insertions(+) diff --git a/bookwyrm/tests/views/books/test_editions.py b/bookwyrm/tests/views/books/test_editions.py index 70a95051a..a40d97b57 100644 --- a/bookwyrm/tests/views/books/test_editions.py +++ b/bookwyrm/tests/views/books/test_editions.py @@ -129,3 +129,31 @@ class BookViews(TestCase): self.assertEqual(models.ShelfBook.objects.get().book, edition2) self.assertEqual(models.ReadThrough.objects.get().book, edition2) + + @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") + @patch("bookwyrm.activitystreams.populate_stream_task.delay") + @patch("bookwyrm.activitystreams.add_book_statuses_task.delay") + @patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async") + def test_move_ratings_on_switch_edition(self, *_): + """updates user's rating on a book to new edition""" + work = models.Work.objects.create(title="test work") + edition1 = models.Edition.objects.create(title="first ed", parent_work=work) + edition2 = models.Edition.objects.create(title="second ed", parent_work=work) + + models.ReviewRating.objects.create( + book=edition1, + user=self.local_user, + rating=3, + ) + + self.assertIsInstance(models.ReviewRating.objects.get(user=self.local_user, book=edition1), models.ReviewRating) + with self.assertRaises(models.ReviewRating.DoesNotExist): + models.ReviewRating.objects.get(user=self.local_user, book=edition2) + + request = self.factory.post("", {"edition": edition2.id}) + request.user = self.local_user + views.switch_edition(request) + + self.assertIsInstance(models.ReviewRating.objects.get(user=self.local_user, book=edition2), models.ReviewRating) + with self.assertRaises(models.ReviewRating.DoesNotExist): + models.ReviewRating.objects.get(user=self.local_user, book=edition1) diff --git a/bookwyrm/views/books/editions.py b/bookwyrm/views/books/editions.py index 54d1bd84c..e34b045bb 100644 --- a/bookwyrm/views/books/editions.py +++ b/bookwyrm/views/books/editions.py @@ -103,4 +103,11 @@ def switch_edition(request): readthrough.book = new_edition readthrough.save() + ratings = models.ReviewRating.objects.filter( + book__parent_work=new_edition.parent_work, user=request.user + ) + for rating in ratings.all(): + rating.book = new_edition + rating.save() + return redirect(f"/book/{new_edition.id}")