diff --git a/bookwyrm/models/book.py b/bookwyrm/models/book.py index d0c3c7fd3..9e05c03af 100644 --- a/bookwyrm/models/book.py +++ b/bookwyrm/models/book.py @@ -201,14 +201,13 @@ class Book(BookDataModel): @property def alt_text(self): """image alt test""" - text = self.title - if self.edition_info: - text += f" ({self.edition_info})" - return text + author = f"{name}: " if (name := self.author_text) else "" + edition = f" ({info})" if (info := self.edition_info) else "" + return f"{author}{self.title}{edition}" def save(self, *args: Any, **kwargs: Any) -> None: """can't be abstract for query reasons, but you shouldn't USE it""" - if not isinstance(self, Edition) and not isinstance(self, Work): + if not isinstance(self, (Edition, Work)): raise ValueError("Books should be added as Editions or Works") return super().save(*args, **kwargs) diff --git a/bookwyrm/models/status.py b/bookwyrm/models/status.py index 5d6109468..11646431b 100644 --- a/bookwyrm/models/status.py +++ b/bookwyrm/models/status.py @@ -366,7 +366,8 @@ class Quotation(BookStatus): quote = re.sub(r"^

", '

"', self.quote) quote = re.sub(r"

$", '"

', quote) title, href = self.book.title, self.book.remote_id - citation = f'— {title}' + author = f"{name}: " if (name := self.book.author_text) else "" + citation = f'— {author}{title}' if position := self._format_position(): citation += f", {position}" return f"{quote}

{citation}

{self.content}" diff --git a/bookwyrm/tests/models/test_book_model.py b/bookwyrm/tests/models/test_book_model.py index 590b7b873..8122e9505 100644 --- a/bookwyrm/tests/models/test_book_model.py +++ b/bookwyrm/tests/models/test_book_model.py @@ -92,7 +92,23 @@ class Book(TestCase): book.published_date = timezone.make_aware(parse("2020")) book.save() self.assertEqual(book.edition_info, "worm, Glorbish language, 2020") - self.assertEqual(book.alt_text, "Test Edition (worm, Glorbish language, 2020)") + + def test_alt_text(self): + """text slug used for cover images""" + book = models.Edition.objects.create(title="Test Edition") + author = models.Author.objects.create(name="Author Name") + + self.assertEqual(book.alt_text, "Test Edition") + + book.authors.set([author]) + book.save() + + self.assertEqual(book.alt_text, "Author Name: Test Edition") + + book.physical_format = "worm" + book.published_date = timezone.make_aware(parse("2022")) + + self.assertEqual(book.alt_text, "Author Name: Test Edition (worm, 2022)") def test_get_rank(self): """sets the data quality index for the book""" diff --git a/bookwyrm/tests/models/test_status_model.py b/bookwyrm/tests/models/test_status_model.py index 760849f28..d1f07b44e 100644 --- a/bookwyrm/tests/models/test_status_model.py +++ b/bookwyrm/tests/models/test_status_model.py @@ -314,6 +314,29 @@ class Status(TestCase): ) self.assertEqual(activity["attachment"][0]["name"], "Test Edition") + def test_quotation_with_author_to_pure_activity(self, *_): + """serialization of quotation of a book with author and edition info""" + self.book.authors.set([models.Author.objects.create(name="Author Name")]) + self.book.physical_format = "worm" + self.book.save() + status = models.Quotation.objects.create( + quote="quote", + content="", + user=self.local_user, + book=self.book, + ) + activity = status.to_activity(pure=True) + self.assertEqual( + activity["content"], + ( + f'quote

— Author Name: ' + "Test Edition

" + ), + ) + self.assertEqual( + activity["attachment"][0]["name"], "Author Name: Test Edition (worm)" + ) + def test_quotation_page_serialization(self, *_): """serialization of quotation page position""" tests = [