From 66a2b4c7c770cd58c3051818df370e073a9daca6 Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Fri, 15 Oct 2021 13:25:47 -0700 Subject: [PATCH] Tests for status raise_visible_to_user function --- bookwyrm/tests/models/test_status_model.py | 64 +++++++++++++++++++++- 1 file changed, 63 insertions(+), 1 deletion(-) diff --git a/bookwyrm/tests/models/test_status_model.py b/bookwyrm/tests/models/test_status_model.py index 084e69fc..00f8a81c 100644 --- a/bookwyrm/tests/models/test_status_model.py +++ b/bookwyrm/tests/models/test_status_model.py @@ -3,11 +3,13 @@ from unittest.mock import patch from io import BytesIO import pathlib -from PIL import Image +from django.http import Http404 from django.core.files.base import ContentFile from django.db import IntegrityError +from django.contrib.auth.models import AnonymousUser from django.test import TestCase from django.utils import timezone +from PIL import Image import responses from bookwyrm import activitypub, models, settings @@ -50,6 +52,9 @@ class Status(TestCase): image.save(output, format=image.format) self.book.cover.save("test.jpg", ContentFile(output.getvalue())) + self.anonymous_user = AnonymousUser + self.anonymous_user.is_authenticated = False + def test_status_generated_fields(self, *_): """setting remote id""" status = models.Status.objects.create(content="bleh", user=self.local_user) @@ -460,3 +465,60 @@ class Status(TestCase): responses.add(responses.GET, "http://fish.com/nothing", status=404) self.assertTrue(models.Status.ignore_activity(activity)) + + def test_raise_visible_to_user_public(self, *_): + """privacy settings""" + status = models.Status.objects.create( + content="bleh", user=self.local_user, privacy="public" + ) + self.assertIsNone(status.raise_visible_to_user(self.remote_user)) + self.assertIsNone(status.raise_visible_to_user(self.local_user)) + self.assertIsNone(status.raise_visible_to_user(self.anonymous_user)) + + def test_raise_visible_to_user_unlisted(self, *_): + """privacy settings""" + status = models.Status.objects.create( + content="bleh", user=self.local_user, privacy="unlisted" + ) + self.assertIsNone(status.raise_visible_to_user(self.remote_user)) + self.assertIsNone(status.raise_visible_to_user(self.local_user)) + self.assertIsNone(status.raise_visible_to_user(self.anonymous_user)) + + @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") + def test_raise_visible_to_user_followers(self, *_): + """privacy settings""" + status = models.Status.objects.create( + content="bleh", user=self.local_user, privacy="followers" + ) + status.raise_visible_to_user(self.local_user) + with self.assertRaises(Http404): + status.raise_visible_to_user(self.remote_user) + with self.assertRaises(Http404): + status.raise_visible_to_user(self.anonymous_user) + + self.local_user.followers.add(self.remote_user) + self.assertIsNone(status.raise_visible_to_user(self.remote_user)) + + def test_raise_visible_to_user_followers_mentioned(self, *_): + """privacy settings""" + status = models.Status.objects.create( + content="bleh", user=self.local_user, privacy="followers" + ) + status.mention_users.set([self.remote_user]) + self.assertIsNone(status.raise_visible_to_user(self.remote_user)) + + @patch("bookwyrm.suggested_users.rerank_suggestions_task.delay") + def test_raise_visible_to_user_direct(self, *_): + """privacy settings""" + status = models.Status.objects.create( + content="bleh", user=self.local_user, privacy="direct" + ) + status.raise_visible_to_user(self.local_user) + with self.assertRaises(Http404): + status.raise_visible_to_user(self.remote_user) + with self.assertRaises(Http404): + status.raise_visible_to_user(self.anonymous_user) + + # mentioned user + status.mention_users.set([self.remote_user]) + self.assertIsNone(status.raise_visible_to_user(self.remote_user))