From 849c221aeeee89bdb61a88b4e6080481ecfeb934 Mon Sep 17 00:00:00 2001 From: Michael Manfre Date: Sat, 26 Nov 2022 12:09:31 -0500 Subject: Local-only posting --- tests/activities/models/test_post_targets.py | 107 +++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 tests/activities/models/test_post_targets.py (limited to 'tests/activities') diff --git a/tests/activities/models/test_post_targets.py b/tests/activities/models/test_post_targets.py new file mode 100644 index 0000000..1e4bbc4 --- /dev/null +++ b/tests/activities/models/test_post_targets.py @@ -0,0 +1,107 @@ +import pytest +from asgiref.sync import async_to_sync + +from activities.models import Post +from users.models import Follow + + +@pytest.mark.django_db +def test_post_targets_simple(identity, other_identity, remote_identity): + """ + Tests that a simple top level post returns the correct targets. + """ + # Test a post with no mentions targets author + post = Post.objects.create( + content="

Hello

", + author=identity, + local=True, + ) + targets = async_to_sync(post.aget_targets)() + assert targets == {identity} + + # Test remote reply targets original post author + Post.objects.create( + content="

Reply

", + author=remote_identity, + local=False, + in_reply_to=post.absolute_object_uri(), + ) + targets = async_to_sync(post.aget_targets)() + assert targets == {identity} + + # Test a post with local and remote mentions + post = Post.objects.create( + content="

Hello @test and @other

", + author=identity, + local=True, + ) + # Mentions are targeted + post.mentions.add(remote_identity) + post.mentions.add(other_identity) + targets = async_to_sync(post.aget_targets)() + # Targets everyone + assert targets == {identity, other_identity, remote_identity} + + # Test remote post with mentions + post.local = False + post.save() + targets = async_to_sync(post.aget_targets)() + # Only targets locals + assert targets == {identity, other_identity} + + +@pytest.mark.django_db +def test_post_local_only(identity, other_identity, remote_identity): + """ + Tests that a simple top level post returns the correct targets. + """ + # Test a short username (remote) + post = Post.objects.create( + content="

Hello @test and @other

", + author=identity, + local=True, + visibility=Post.Visibilities.local_only, + ) + post.mentions.add(remote_identity) + post.mentions.add(other_identity) + + # Remote mention is not targeted + post.mentions.add(remote_identity) + targets = async_to_sync(post.aget_targets)() + assert targets == {identity, other_identity} + + +@pytest.mark.django_db +def test_post_followers(identity, other_identity, remote_identity): + + Follow.objects.create(source=other_identity, target=identity) + Follow.objects.create(source=remote_identity, target=identity) + + # Test Public post w/o mentions targets self and followers + post = Post.objects.create( + content="

Hello

", + author=identity, + local=True, + visibility=Post.Visibilities.public, + ) + targets = async_to_sync(post.aget_targets)() + assert targets == {identity, other_identity, remote_identity} + + # Remote post only targets local followers + post.local = False + post.save() + targets = async_to_sync(post.aget_targets)() + assert targets == {identity, other_identity} + + # Local Only post only targets local followers + post.local = True + post.visibility = Post.Visibilities.local_only + post.save() + targets = async_to_sync(post.aget_targets)() + assert targets == {identity, other_identity} + + # Mentioned posts do not target unmentioned followers + post.visibility = Post.Visibilities.mentioned + post.save() + targets = async_to_sync(post.aget_targets)() + assert targets == {identity} -- cgit v1.2.3