diff options
author | Michael Manfre | 2022-11-26 12:09:31 -0500 |
---|---|---|
committer | GitHub | 2022-11-26 10:09:31 -0700 |
commit | 849c221aeeee89bdb61a88b4e6080481ecfeb934 (patch) | |
tree | 323b5a720adf214f4bbbbdaadbcd30249bcdcec5 /tests/activities/models | |
parent | c7588583927e004e10599912f6d7b76413d52730 (diff) | |
download | takahe-849c221aeeee89bdb61a88b4e6080481ecfeb934.tar.gz takahe-849c221aeeee89bdb61a88b4e6080481ecfeb934.tar.bz2 takahe-849c221aeeee89bdb61a88b4e6080481ecfeb934.zip |
Local-only posting
Diffstat (limited to 'tests/activities/models')
-rw-r--r-- | tests/activities/models/test_post_targets.py | 107 |
1 files changed, 107 insertions, 0 deletions
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="<p>Hello</p>", + 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="<p>Reply</p>", + 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="<p>Hello @test and @other</p>", + 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="<p>Hello @test and @other</p>", + 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="<p>Hello</p>", + 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} |