def test_save__removes_removed_recipients(self):
        serializer = ContentSerializer(
            instance=self.limited_content_with_recipients,
            partial=True,
            context={"request": Mock(user=self.user)},
            data={
                "recipients": [self.user_recipient.handle, self.user_recipient2.handle],
                "visibility": Visibility.LIMITED.value,
            },
        )

        serializer.is_valid(True)
        content = serializer.save()

        actual = set(content.limited_visibilities.all().order_by("id"))
        self.assertSetEqual(actual, {self.user_recipient, self.user_recipient2})

        # Remove one recipient
        serializer = ContentSerializer(
            instance=content,
            partial=True,
            context={"request": Mock(user=self.user)},
            data={
                "recipients": [self.user_recipient.handle],
                "visibility": Visibility.LIMITED.value
            },
        )

        serializer.is_valid(True)
        content = serializer.save()
        self.assertSetEqual(set(content.limited_visibilities.all()), {self.user_recipient})
Esempio n. 2
0
 def test_create_without_visibility(self):
     serializer = ContentSerializer(
         context={"request": Mock(user=self.user)},
         data={
             "text": "Without visibility",
         })
     self.assertFalse(serializer.is_valid())
Esempio n. 3
0
    def get_json_context(self):
        context = {
            "currentBrowsingProfileId":
            getattr(getattr(self.request.user, "profile", None), "id", None),
            "isUserAuthenticated":
            bool(self.request.user.is_authenticated),
            "isReply":
            self.is_reply,
            "federate":
            self.object.federate,
            "includeFollowing":
            self.object.include_following,
            "pinned":
            self.object.pinned,
            "showPreview":
            self.object.show_preview,
            "visibility":
            self.object.visibility.value
        }

        parent_id = getattr(getattr(self.object, "parent"), "id", None)
        if parent_id is not None:
            context["parent"] = parent_id

        serialized = ContentSerializer(self.object,
                                       context={
                                           "request": self.request
                                       }).data
        context["recipients"] = serialized.get("recipients", [])
        context["text"] = serialized.get("text", "")

        return context
Esempio n. 4
0
 def test_serializes_through(self):
     serializer = ContentSerializer(self.content)
     self.assertEqual(serializer.data["through"], self.content.id)
     serializer = ContentSerializer(
         self.content, context={"throughs": {
             self.content.id: 666
         }})
     self.assertEqual(serializer.data["through"], 666)
Esempio n. 5
0
 def test_create_without_parent(self):
     serializer = ContentSerializer(context={"request": Mock(user=self.user)}, data={
         "text": "Without parent", "visibility": "public",
     })
     self.assertTrue(serializer.is_valid())
     serializer.save(author=self.user.profile)
     content = Content.objects.order_by("id").last()
     self.assertEqual(content.text, "Without parent")
Esempio n. 6
0
 def test_create_without_parent(self):
     serializer = ContentSerializer(context={"request": Mock(user=self.user)}, data={
         "text": "Without parent", "visibility": "public",
     })
     self.assertTrue(serializer.is_valid())
     serializer.save(author=self.user.profile)
     content = Content.objects.order_by("id").last()
     self.assertEqual(content.text, "Without parent")
Esempio n. 7
0
 def test_create_with_parent__user_cannot_see_parent(self):
     serializer = ContentSerializer(
         context={"request": Mock(user=self.user)},
         data={
             "text": "With parent cannot seeee it",
             "visibility": "limited",
             "parent": self.limited_content.id,
         })
     self.assertFalse(serializer.is_valid())
 def test_validate_recipients__fails_bad_recipients(self):
     serializer = ContentSerializer(
         instance=self.limited_content, partial=True, context={"request": Mock(user=self.user)}, data={
             "recipients": [f"{self.user_recipient.handle}+bad_ext", f"{self.user_recipient2.handle}+bad_ext"],
             "visibility": Visibility.LIMITED.value
         },
     )
     with pytest.raises(serializers.ValidationError, match=r".*Not all recipients could be found\..*"):
         serializer.is_valid(True)
Esempio n. 9
0
 def test_create_with_parent__visibility_does_not_match_parent(self):
     serializer = ContentSerializer(
         context={"request": Mock(user=self.user)},
         data={
             "text": "With parent visibility mismatch",
             "visibility": "public",
             "parent": self.limited_content.id,
         })
     self.assertFalse(serializer.is_valid())
    def test_validate_recipients__recipients_ignored_if_not_limited(self):
        serializer = ContentSerializer(
            instance=self.limited_content, partial=True, context={"request": Mock(user=self.user)}, data={
                "recipients": f"{self.user_recipient.handle},{self.user_recipient2.handle}",
                "visibility": Visibility.PUBLIC.value
            },
        )

        serializer.is_valid(True)
        self.assertEquals(serializer.validated_data["recipients"], set())
 def test_validate_recipients(self):
     serializer = ContentSerializer(
         instance=self.limited_content, partial=True, context={"request": Mock(user=self.user)}, data={
             "recipients": [self.user_recipient.handle, self.user_recipient2.handle],
             "visibility": Visibility.LIMITED.value
         },
     )
     self.assertTrue(serializer.is_valid())
     self.assertEquals(serializer.validated_data["recipients"],
                       {self.user_recipient.handle, self.user_recipient2.handle})
    def test_serialize__recipients_list_empty_for_not_owners(self):
        limited_content = LimitedContentWithRecipientsFactory(author=self.user.profile)
        serializer = ContentSerializer(limited_content, context={"request": Mock(user=self.user)})
        expected_recipients_list = set(
            limited_content.limited_visibilities.all().order_by("id").values_list("handle", flat=True)
        )
        self.assertEqual(expected_recipients_list, set(serializer.data["recipients"]))

        serializer = ContentSerializer(limited_content, context={"request": Mock(user=PublicUserFactory())})
        self.assertEqual(set(serializer.data["recipients"]), set())
Esempio n. 13
0
 def test_create_without_visibility__reply(self):
     serializer = ContentSerializer(context={"request": Mock(user=self.user)}, data={
         "text": "Without visibility", "parent": self.limited_content2.id,
     })
     self.assertTrue(serializer.is_valid())
     serializer.save(author=self.profile)
     content = Content.objects.order_by("id").last()
     self.assertEqual(content.text, "Without visibility")
     # Inherits from parent
     self.assertEqual(content.visibility, Visibility.LIMITED)
     self.assertEqual(content.parent, self.limited_content2)
    def test_save__collects_recipients(self):
        serializer = ContentSerializer(
            instance=self.limited_content, partial=True, context={"request": Mock(user=self.user)}, data={
                "recipients": [self.user_recipient.handle, self.user_recipient2.handle],
                "visibility": Visibility.LIMITED.value
            },
        )
        serializer.is_valid()
        content = serializer.save()

        self.assertEquals(set(content.limited_visibilities.all()), {self.user_recipient, self.user_recipient2})
Esempio n. 15
0
 def test_create_without_visibility__reply(self):
     serializer = ContentSerializer(context={"request": Mock(user=self.user)}, data={
         "text": "Without visibility", "parent": self.limited_content2.id,
     })
     self.assertTrue(serializer.is_valid())
     serializer.save(author=self.profile)
     content = Content.objects.order_by("id").last()
     self.assertEqual(content.text, "Without visibility")
     # Inherits from parent
     self.assertEqual(content.visibility, Visibility.LIMITED)
     self.assertEqual(content.parent, self.limited_content2)
     self.assertEqual(content.root_parent, self.limited_content2)
Esempio n. 16
0
 def test_update_doesnt_allow_changing_parent(self):
     serializer = ContentSerializer(
         instance=self.reply, partial=True, context={"request": Mock(user=self.user)}, data={
             "parent": self.content.id,
         },
     )
     self.assertTrue(serializer.is_valid())
     serializer = ContentSerializer(
         instance=self.reply, partial=True, context={"request": Mock(user=self.user)}, data={
             "parent": self.content2.id,
         },
     )
     self.assertFalse(serializer.is_valid())
 def test_validate_recipients__recipients_and_include_following_cant_both_be_empty(self):
     serializer = ContentSerializer(
         instance=self.limited_content, partial=True, context={"request": Mock(user=self.user)}, data={
             "recipients": "",
             "include_following": False,
             "visibility": Visibility.LIMITED.value
         },
     )
     with pytest.raises(
         serializers.ValidationError,
         match=r".*Recipients cannot be empty if not including followed users\..*"
     ):
         serializer.is_valid(True)
    def test_save__collects_recipients__reply_copies_from_parent(self):
        serializer = ContentSerializer(
            instance=self.reply_parent_with_recipients,
            partial=True,
            context={"request": Mock(user=self.user)},
            data={
                "recipients": [self.user_recipient.handle, self.user_recipient2.handle],
                "visibility": Visibility.LIMITED.value
            },
        )

        serializer.is_valid(True)
        content = serializer.save()

        actual = set(content.limited_visibilities.all().order_by("id"))
        self.assertSetEqual({self.user_recipient, self.user_recipient2}, actual)
Esempio n. 19
0
 def test_tags_with_tag(self):
     tag = TagFactory(name="yolo")
     self.content.tags.clear()
     self.content.tags.add(tag)
     serializer = ContentSerializer(
         self.content, context={"request": Mock(user=self.user)})
     self.assertEqual(serializer.data["tags"], ["yolo"])
Esempio n. 20
0
 def get(self, request, **kwargs):
     qs, throughs = self.get_content()
     serializer = ContentSerializer(qs,
                                    many=True,
                                    context={
                                        "throughs": throughs,
                                        "request": request
                                    })
     return Response(serializer.data)
Esempio n. 21
0
 def test_serializes_author(self):
     serializer = ContentSerializer(self.content)
     data = serializer.data["author"]
     self.assertEqual(data["guid"], self.remote_profile.guid)
     self.assertEqual(data["handle"], self.remote_profile.handle)
     self.assertEqual(data["home_url"], self.remote_profile.home_url)
     self.assertEqual(data["id"], self.remote_profile.id)
     self.assertEqual(data["image_url_small"], self.remote_profile.image_url_small)
     self.assertEqual(data["is_local"], self.remote_profile.is_local)
     self.assertEqual(data["name"], self.remote_profile.name)
     self.assertEqual(data["url"], self.remote_profile.url)
    def test_save__collects_recipients__include_following(self):
        user = UserWithContactFactory()
        content = LimitedContentFactory(author=user.profile)
        serializer = ContentSerializer(
            instance=content,
            partial=True,
            context={"request": Mock(user=user)},
            data={
                "recipients": [self.user_recipient.handle, self.user_recipient2.handle],
                "visibility": Visibility.LIMITED.value,
                "include_following": True,
            })
        serializer.is_valid(True)
        content = serializer.save()

        actual = set(content.limited_visibilities.all().order_by("id"))
        expected = set(
            list(user.profile.following.all().order_by("id")) +
            [self.user_recipient, self.user_recipient2]
        )
        self.assertSetEqual(actual, expected)
Esempio n. 23
0
 def test_update_doesnt_allow_changing_parent(self):
     serializer = ContentSerializer(
         instance=self.reply, partial=True, context={"request": Mock(user=self.user)}, data={
             "parent": self.content.id,
         },
     )
     self.assertTrue(serializer.is_valid())
     serializer = ContentSerializer(
         instance=self.reply, partial=True, context={"request": Mock(user=self.user)}, data={
             "parent": self.content2.id,
         },
     )
     self.assertFalse(serializer.is_valid())
Esempio n. 24
0
 def collect_data(self):
     # User
     serializer = UserSerializer(instance=self.user, context=self.context)
     self.data['user'] = serializer.data
     # Profile
     serializer = ProfileSerializer(instance=self.user.profile,
                                    context=self.context)
     self.data['profile'] = serializer.data
     # Followed profiles
     self.data['following'] = []
     for follow in self.user.profile.following.all():
         serializer = LimitedProfileSerializer(instance=follow,
                                               context=self.context)
         self.data['following'].append(serializer.data)
     # Content
     self.data['content'] = []
     content_qs = Content.objects.filter(
         author=self.user.profile).order_by('created')
     for content in content_qs:
         serializer = ContentSerializer(instance=content,
                                        context=self.context)
         self.data['content'].append(serializer.data)
Esempio n. 25
0
 def test_create_with_parent__visibility_does_not_match_parent(self):
     serializer = ContentSerializer(context={"request": Mock(user=self.user)}, data={
         "text": "With parent visibility mismatch", "visibility": "public", "parent": self.limited_content.id,
     })
     self.assertFalse(serializer.is_valid())
Esempio n. 26
0
 def test_create_with_parent__user_cannot_see_parent(self):
     serializer = ContentSerializer(context={"request": Mock(user=self.user)}, data={
         "text": "With parent cannot seeee it", "visibility": "limited", "parent": self.limited_content.id,
     })
     self.assertFalse(serializer.is_valid())
Esempio n. 27
0
 def test_user_has_shared_true_if_shared(self):
     self.content.share(self.profile)
     serializer = ContentSerializer(context={"request": Mock(user=self.user)})
     self.assertTrue(serializer.get_user_has_shared(self.content))
 def test_user_is_author_false_if_not_author(self):
     serializer = ContentSerializer(
         context={"request": Mock(user=self.user)})
     self.assertFalse(serializer.get_user_is_author(self.content))
Esempio n. 29
0
 def test_user_is_author_true_if_author(self):
     serializer = ContentSerializer(context={"request": Mock(user=self.user)})
     self.assertTrue(serializer.get_user_is_author(self.user_content))
 def test_user_has_shared_false_if_not_shared(self):
     serializer = ContentSerializer(
         context={"request": Mock(user=self.user)})
     self.assertFalse(serializer.get_user_has_shared(self.content))
 def test_user_has_shared_false_if_no_request(self):
     serializer = ContentSerializer()
     self.assertFalse(serializer.get_user_has_shared(None))
Esempio n. 32
0
 def test_create_without_visibility(self):
     serializer = ContentSerializer(context={"request": Mock(user=self.user)}, data={
         "text": "Without visibility",
     })
     self.assertFalse(serializer.is_valid())
Esempio n. 33
0
 def test_user_has_shared_false_if_no_request(self):
     serializer = ContentSerializer()
     self.assertFalse(serializer.get_user_has_shared(None))
 def test_user_is_author_false_if_not_authenticated(self):
     serializer = ContentSerializer(
         context={"request": Mock(user=AnonymousUser())})
     self.assertFalse(serializer.get_user_is_author(None))
Esempio n. 35
0
 def test_user_has_shared_false_if_anonymous_user(self):
     serializer = ContentSerializer(context={"request": Mock(user=AnonymousUser())})
     self.assertFalse(serializer.get_user_has_shared(None))
 def test_user_is_author_true_if_author(self):
     serializer = ContentSerializer(
         context={"request": Mock(user=self.user)})
     self.assertTrue(serializer.get_user_is_author(self.user_content))
Esempio n. 37
0
 def test_user_has_shared_false_if_not_shared(self):
     serializer = ContentSerializer(context={"request": Mock(user=self.user)})
     self.assertFalse(serializer.get_user_has_shared(self.content))
 def test_user_has_shared_false_if_anonymous_user(self):
     serializer = ContentSerializer(
         context={"request": Mock(user=AnonymousUser())})
     self.assertFalse(serializer.get_user_has_shared(None))
Esempio n. 39
0
 def test_user_following_author_true_if_following(self):
     self.profile.following.add(self.remote_profile)
     serializer = ContentSerializer(context={"request": Mock(user=self.user)})
     self.assertTrue(serializer.get_user_following_author(self.content))
 def test_user_has_shared_true_if_shared(self):
     self.content.share(self.profile)
     serializer = ContentSerializer(
         context={"request": Mock(user=self.user)})
     self.assertTrue(serializer.get_user_has_shared(self.content))
Esempio n. 41
0
 def test_user_is_author_false_if_no_request(self):
     serializer = ContentSerializer()
     self.assertFalse(serializer.get_user_is_author(None))
Esempio n. 42
0
 def get_serialized_content(self):
     serializer = ContentSerializer(instance=self.object,
                                    context={"request": self.request})
     return serializer.data
Esempio n. 43
0
 def test_user_is_author_false_if_not_authenticated(self):
     serializer = ContentSerializer(context={"request": Mock(user=AnonymousUser())})
     self.assertFalse(serializer.get_user_is_author(None))
Esempio n. 44
0
 def get(self, request, **kwargs):
     content = self.get_content()
     serializer = ContentSerializer(content, many=True)
     return Response(serializer.data)
Esempio n. 45
0
 def test_user_is_author_false_if_not_author(self):
     serializer = ContentSerializer(context={"request": Mock(user=self.user)})
     self.assertFalse(serializer.get_user_is_author(self.content))