Пример #1
0
    def test_foreign_key_from_activity_dict(self):
        """test recieving activity json"""
        instance = fields.ForeignKey(User, on_delete=models.CASCADE)
        datafile = pathlib.Path(__file__).parent.joinpath(
            "../data/ap_user.json")
        userdata = json.loads(datafile.read_bytes())
        # don't try to load the user icon
        del userdata["icon"]

        # it shouldn't match with this unrelated user:
        with patch(
                "bookwyrm.preview_images.generate_user_preview_image_task.delay"
        ):
            unrelated_user = User.objects.create_user("rat",
                                                      "*****@*****.**",
                                                      "ratword",
                                                      local=True,
                                                      localname="rat")
            with patch("bookwyrm.models.user.set_remote_server.delay"):
                value = instance.field_from_activity(
                    activitypub.Person(**userdata))
        self.assertIsInstance(value, User)
        self.assertNotEqual(value, unrelated_user)
        self.assertEqual(value.remote_id, "https://example.com/user/mouse")
        self.assertEqual(value.name, "MOUSE?? MOUSE!!")
Пример #2
0
    def test_foreign_key_from_activity_dict_existing(self):
        """test receiving a dict of an existing object in the db"""
        instance = fields.ForeignKey(User, on_delete=models.CASCADE)
        datafile = pathlib.Path(__file__).parent.joinpath(
            "../data/ap_user.json")
        userdata = json.loads(datafile.read_bytes())
        with patch(
                "bookwyrm.preview_images.generate_user_preview_image_task.delay"
        ):
            user = User.objects.create_user("mouse",
                                            "*****@*****.**",
                                            "mouseword",
                                            local=True,
                                            localname="mouse")
            user.remote_id = "https://example.com/user/mouse"
            user.save(broadcast=False)

            User.objects.create_user("rat",
                                     "*****@*****.**",
                                     "ratword",
                                     local=True,
                                     localname="rat")

            with patch(
                    "bookwyrm.models.activitypub_mixin.ObjectMixin.broadcast"):
                value = instance.field_from_activity(
                    activitypub.Person(**userdata))
        self.assertEqual(value, user)
Пример #3
0
 def test_foreign_key(self):
     ''' should be able to format a related model '''
     instance = fields.ForeignKey('User', on_delete=models.CASCADE)
     Serializable = namedtuple('Serializable', ('to_activity', 'remote_id'))
     item = Serializable(lambda: {'a': 'b'}, 'https://e.b/c')
     # returns the remote_id field of the related object
     self.assertEqual(instance.field_to_activity(item), 'https://e.b/c')
Пример #4
0
 def test_foreign_key(self):
     """should be able to format a related model"""
     instance = fields.ForeignKey("User", on_delete=models.CASCADE)
     Serializable = namedtuple("Serializable", ("to_activity", "remote_id"))
     item = Serializable(lambda: {"a": "b"}, "https://e.b/c")
     # returns the remote_id field of the related object
     self.assertEqual(instance.field_to_activity(item), "https://e.b/c")
Пример #5
0
    def test_foreign_key_from_activity_str(self):
        ''' create a new object from a foreign key '''
        instance = fields.ForeignKey(User, on_delete=models.CASCADE)
        datafile = pathlib.Path(__file__).parent.joinpath(
            '../data/ap_user.json')
        userdata = json.loads(datafile.read_bytes())
        # don't try to load the user icon
        del userdata['icon']

        # it shouldn't match with this unrelated user:
        unrelated_user = User.objects.create_user('rat',
                                                  '*****@*****.**',
                                                  'ratword',
                                                  local=True,
                                                  localname='rat')

        # test receiving an unknown remote id and loading data
        responses.add(responses.GET,
                      'https://example.com/user/mouse',
                      json=userdata,
                      status=200)
        with patch('bookwyrm.models.user.set_remote_server.delay'):
            value = instance.field_from_activity(
                'https://example.com/user/mouse')
        self.assertIsInstance(value, User)
        self.assertNotEqual(value, unrelated_user)
        self.assertEqual(value.remote_id, 'https://example.com/user/mouse')
        self.assertEqual(value.name, 'MOUSE?? MOUSE!!')
Пример #6
0
    def test_foreign_key_from_activity_str(self, *_):
        """create a new object from a foreign key"""
        instance = fields.ForeignKey(User, on_delete=models.CASCADE)
        datafile = pathlib.Path(__file__).parent.joinpath(
            "../data/ap_user.json")
        userdata = json.loads(datafile.read_bytes())
        # don't try to load the user icon
        del userdata["icon"]

        # it shouldn't match with this unrelated user:
        unrelated_user = User.objects.create_user("rat",
                                                  "*****@*****.**",
                                                  "ratword",
                                                  local=True,
                                                  localname="rat")

        # test receiving an unknown remote id and loading data
        responses.add(
            responses.GET,
            "https://example.com/user/mouse",
            json=userdata,
            status=200,
        )
        with patch("bookwyrm.models.user.set_remote_server.delay"):
            value = instance.field_from_activity(
                "https://example.com/user/mouse")
        self.assertIsInstance(value, User)
        self.assertNotEqual(value, unrelated_user)
        self.assertEqual(value.remote_id, "https://example.com/user/mouse")
        self.assertEqual(value.name, "MOUSE?? MOUSE!!")
Пример #7
0
    def test_foreign_key_from_activity_str_existing(self):
        ''' test receiving a remote id of an existing object in the db '''
        instance = fields.ForeignKey(User, on_delete=models.CASCADE)
        user = User.objects.create_user('mouse',
                                        '*****@*****.**',
                                        'mouseword',
                                        local=True)
        User.objects.create_user('rat', '*****@*****.**', 'ratword', local=True)

        value = instance.field_from_activity(user.remote_id)
        self.assertEqual(value, user)
Пример #8
0
    def test_foreign_key_from_activity_str_existing(self):
        """ test receiving a remote id of an existing object in the db """
        instance = fields.ForeignKey(User, on_delete=models.CASCADE)
        user = User.objects.create_user("mouse",
                                        "*****@*****.**",
                                        "mouseword",
                                        local=True,
                                        localname="mouse")
        User.objects.create_user("rat",
                                 "*****@*****.**",
                                 "ratword",
                                 local=True,
                                 localname="rat")

        value = instance.field_from_activity(user.remote_id)
        self.assertEqual(value, user)
Пример #9
0
    def test_foreign_key_from_activity_dict_existing(self):
        ''' test receiving a dict of an existing object in the db '''
        instance = fields.ForeignKey(User, on_delete=models.CASCADE)
        datafile = pathlib.Path(__file__).parent.joinpath(
            '../data/ap_user.json')
        userdata = json.loads(datafile.read_bytes())
        user = User.objects.create_user('mouse',
                                        '*****@*****.**',
                                        'mouseword',
                                        local=True)
        user.remote_id = 'https://example.com/user/mouse'
        user.save()
        User.objects.create_user('rat', '*****@*****.**', 'ratword', local=True)

        value = instance.field_from_activity(userdata)
        self.assertEqual(value, user)
Пример #10
0
    def test_foreign_key_from_activity_dict(self):
        ''' test recieving activity json '''
        instance = fields.ForeignKey(User, on_delete=models.CASCADE)
        datafile = pathlib.Path(__file__).parent.joinpath(
            '../data/ap_user.json')
        userdata = json.loads(datafile.read_bytes())
        # don't try to load the user icon
        del userdata['icon']

        # it shouldn't match with this unrelated user:
        unrelated_user = User.objects.create_user('rat',
                                                  '*****@*****.**',
                                                  'ratword',
                                                  local=True)
        with patch('bookwyrm.models.user.set_remote_server.delay'):
            value = instance.field_from_activity(userdata)
        self.assertIsInstance(value, User)
        self.assertNotEqual(value, unrelated_user)
        self.assertEqual(value.remote_id, 'https://example.com/user/mouse')
        self.assertEqual(value.name, 'MOUSE?? MOUSE!!')
Пример #11
0
        class TestPrivacyModel(ActivitypubMixin, BookWyrmModel):
            """real simple mock model because BookWyrmModel is abstract"""

            privacy_field = fields.PrivacyField()
            mention_users = fields.TagField(User)
            user = fields.ForeignKey(User, on_delete=models.CASCADE)