diff --git a/bookwyrm/templates/user.html b/bookwyrm/templates/user.html index a41623a8..69b762b0 100644 --- a/bookwyrm/templates/user.html +++ b/bookwyrm/templates/user.html @@ -17,7 +17,7 @@ {% include 'snippets/user_header.html' with user=user %} - +{% if user.bookwyrm_user %}

Shelves

@@ -39,6 +39,7 @@
See all {{ shelf_count }} shelves
+{% endif %} {% if goal %}
diff --git a/bookwyrm/tests/views/test_helpers.py b/bookwyrm/tests/views/test_helpers.py index 5e42b378..50c3cfc5 100644 --- a/bookwyrm/tests/views/test_helpers.py +++ b/bookwyrm/tests/views/test_helpers.py @@ -154,6 +154,34 @@ class ViewsHelpers(TestCase): self.assertEqual(statuses[0], rat_mention) + def test_get_activity_feed_blocks(self): + ''' feed generation with blocked users ''' + rat = models.User.objects.create_user( + 'rat', 'rat@rat.rat', 'password', local=True) + + public_status = models.Comment.objects.create( + content='public status', book=self.book, user=self.local_user) + rat_public = models.Status.objects.create( + content='blah blah', user=rat) + + statuses = views.helpers.get_activity_feed( + self.local_user, ['public']) + self.assertEqual(len(statuses), 2) + + # block relationship + rat.blocks.add(self.local_user) + statuses = views.helpers.get_activity_feed( + self.local_user, ['public']) + self.assertEqual(len(statuses), 1) + self.assertEqual(statuses[0], public_status) + + statuses = views.helpers.get_activity_feed( + rat, ['public']) + self.assertEqual(len(statuses), 1) + self.assertEqual(statuses[0], rat_public) + + + def test_is_bookwyrm_request(self): ''' checks if a request came from a bookwyrm instance ''' request = self.factory.get('', {'q': 'Test Book'}) diff --git a/bookwyrm/views/helpers.py b/bookwyrm/views/helpers.py index f899680f..b0f867b7 100644 --- a/bookwyrm/views/helpers.py +++ b/bookwyrm/views/helpers.py @@ -71,6 +71,11 @@ def get_activity_feed( # exclude deleted queryset = queryset.exclude(deleted=True).order_by('-published_date') + # exclude blocks from both directions + blocked = models.User.objects.filter(id__in=user.blocks.all()).all() + queryset = queryset.exclude( + Q(user__in=blocked) | Q(user__blocks=user)) + # you can't see followers only or direct messages if you're not logged in if user.is_anonymous: privacy = [p for p in privacy if not p in ['followers', 'direct']]