mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2024-06-03 05:49:35 +00:00
9d502f5ee2
Pylint's `bad-classmethod-argument` is disabled for each definition to avoid rewriting the method bodies just to rename `self` → `cls`. This can be done gradually, as the setUpTestData methods are modified along the way.
107 lines
4.3 KiB
Python
107 lines
4.3 KiB
Python
""" style fixes and lookups for templates """
|
|
from datetime import datetime
|
|
from unittest.mock import patch
|
|
|
|
from django.test import TestCase
|
|
from django.utils import timezone
|
|
|
|
from bookwyrm import models
|
|
from bookwyrm.templatetags import status_display
|
|
|
|
|
|
@patch("bookwyrm.activitystreams.add_status_task.delay")
|
|
@patch("bookwyrm.activitystreams.remove_status_task.delay")
|
|
class StatusDisplayTags(TestCase):
|
|
"""lotta different things here"""
|
|
|
|
@classmethod
|
|
def setUpTestData(self): # pylint: disable=bad-classmethod-argument
|
|
"""create some filler objects"""
|
|
with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch(
|
|
"bookwyrm.activitystreams.populate_stream_task.delay"
|
|
), patch("bookwyrm.lists_stream.populate_lists_task.delay"):
|
|
self.user = models.User.objects.create_user(
|
|
"mouse@example.com",
|
|
"mouse@mouse.mouse",
|
|
"mouseword",
|
|
local=True,
|
|
localname="mouse",
|
|
)
|
|
with patch("bookwyrm.models.user.set_remote_server.delay"):
|
|
self.remote_user = models.User.objects.create_user(
|
|
"rat",
|
|
"rat@rat.rat",
|
|
"ratword",
|
|
remote_id="http://example.com/rat",
|
|
local=False,
|
|
)
|
|
self.book = models.Edition.objects.create(title="Test Book")
|
|
|
|
def test_get_mentions(self, *_):
|
|
"""list of people mentioned"""
|
|
status = models.Status.objects.create(content="hi", user=self.remote_user)
|
|
result = status_display.get_mentions(status, self.user)
|
|
self.assertEqual(result, "@rat@example.com ")
|
|
|
|
@patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async")
|
|
def test_get_replies(self, *_):
|
|
"""direct replies to a status"""
|
|
parent = models.Review.objects.create(
|
|
user=self.user, book=self.book, content="hi"
|
|
)
|
|
first_child = models.Status.objects.create(
|
|
reply_parent=parent, user=self.user, content="hi"
|
|
)
|
|
second_child = models.Status.objects.create(
|
|
reply_parent=parent, user=self.user, content="hi"
|
|
)
|
|
third_child = models.Status.objects.create(
|
|
reply_parent=parent,
|
|
user=self.user,
|
|
deleted=True,
|
|
deleted_date=timezone.now(),
|
|
)
|
|
|
|
replies = status_display.get_replies(parent)
|
|
self.assertEqual(len(replies), 2)
|
|
self.assertTrue(first_child in replies)
|
|
self.assertTrue(second_child in replies)
|
|
self.assertFalse(third_child in replies)
|
|
|
|
def test_get_parent(self, *_):
|
|
"""get the reply parent of a status"""
|
|
with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"):
|
|
parent = models.Review.objects.create(
|
|
user=self.user, book=self.book, content="hi"
|
|
)
|
|
child = models.Status.objects.create(
|
|
reply_parent=parent, user=self.user, content="hi"
|
|
)
|
|
|
|
result = status_display.get_parent(child)
|
|
self.assertEqual(result, parent)
|
|
self.assertIsInstance(result, models.Review)
|
|
|
|
def test_get_boosted(self, *_):
|
|
"""load a boosted status"""
|
|
with patch("bookwyrm.models.activitypub_mixin.broadcast_task.apply_async"):
|
|
status = models.Review.objects.create(user=self.remote_user, book=self.book)
|
|
boost = models.Boost.objects.create(user=self.user, boosted_status=status)
|
|
boosted = status_display.get_boosted(boost)
|
|
self.assertIsInstance(boosted, models.Review)
|
|
self.assertEqual(boosted, status)
|
|
|
|
def test_get_published_date(self, *_):
|
|
"""date formatting"""
|
|
date = datetime(2020, 1, 1, 0, 0, tzinfo=timezone.utc)
|
|
with patch("django.utils.timezone.now") as timezone_mock:
|
|
timezone_mock.return_value = datetime(2022, 1, 1, 0, 0, tzinfo=timezone.utc)
|
|
result = status_display.get_published_date(date)
|
|
self.assertEqual(result, "Jan. 1, 2020")
|
|
|
|
date = datetime(2022, 1, 1, 0, 0, tzinfo=timezone.utc)
|
|
with patch("django.utils.timezone.now") as timezone_mock:
|
|
timezone_mock.return_value = datetime(2022, 1, 8, 0, 0, tzinfo=timezone.utc)
|
|
result = status_display.get_published_date(date)
|
|
self.assertEqual(result, "Jan 1")
|