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!!")
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)
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')
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")
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!!')
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!!")
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)
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)
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)
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!!')
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)