diff --git a/bookwyrm/models/status.py b/bookwyrm/models/status.py index 546a8d6c8..d0c1e639b 100644 --- a/bookwyrm/models/status.py +++ b/bookwyrm/models/status.py @@ -392,10 +392,10 @@ class Quotation(BookStatus): def _format_position(self) -> Optional[str]: """serialize page position""" beg = self.position - end = self.endposition or 0 + end = self.endposition if self.position_mode != "PG" or not beg: return None - return f"pp. {beg}-{end}" if end > beg else f"p. {beg}" + return f"pp. {beg}-{end}" if end else f"p. {beg}" @property def pure_content(self): diff --git a/bookwyrm/tests/models/test_status_model.py b/bookwyrm/tests/models/test_status_model.py index e97febbfa..6323eeca3 100644 --- a/bookwyrm/tests/models/test_status_model.py +++ b/bookwyrm/tests/models/test_status_model.py @@ -340,8 +340,11 @@ class Status(TestCase): def test_quotation_page_serialization(self, *_): """serialization of quotation page position""" tests = [ - ("single pos", 7, None, "p. 7"), - ("page range", 7, 10, "pp. 7-10"), + ("single pos", "7", "", "p. 7"), + ("missing beg", "", "10", None), + ("page range", "7", "10", "pp. 7-10"), + ("page range roman", "xv", "xvi", "pp. xv-xvi"), + ("page range reverse", "14", "10", "pp. 14-10"), ] for desc, beg, end, pages in tests: with self.subTest(desc): @@ -355,10 +358,12 @@ class Status(TestCase): position_mode="PG", ) activity = status.to_activity(pure=True) - self.assertRegex( - activity["content"], - f'^

"my quote"

, {pages}

$', - ) + if pages: + pages_re = re.escape(pages) + expect_re = f'^

"my quote"

, {pages_re}

$' + else: + expect_re = '^

"my quote"

$' + self.assertRegex(activity["content"], expect_re) def test_review_to_activity(self, *_): """subclass of the base model version with a "pure" serializer"""