kopia lustrzana https://github.com/snarfed/bridgy-fed
rodzic
54881ea707
commit
aeeea5590d
|
@ -314,7 +314,7 @@ class ProtocolReceiveTest(TestCase):
|
|||
create_as1 = {
|
||||
'id': 'fake:create',
|
||||
'objectType': 'activity',
|
||||
'verb': 'create',
|
||||
'verb': 'post',
|
||||
'actor': 'fake:user',
|
||||
'object': post_as1,
|
||||
}
|
||||
|
@ -328,7 +328,7 @@ class ProtocolReceiveTest(TestCase):
|
|||
status='complete',
|
||||
our_as1=create_as1,
|
||||
delivered=['shared:target'],
|
||||
type='create',
|
||||
type='post',
|
||||
labels=['user', 'activity', 'feed'],
|
||||
users=[g.user.key, self.alice.key, self.bob.key],
|
||||
)
|
||||
|
@ -453,7 +453,7 @@ class ProtocolReceiveTest(TestCase):
|
|||
create_as1 = {
|
||||
'id': 'fake:create',
|
||||
'objectType': 'activity',
|
||||
'verb': 'create',
|
||||
'verb': 'post',
|
||||
'actor': 'fake:user',
|
||||
'object': reply_as1,
|
||||
}
|
||||
|
@ -467,13 +467,54 @@ class ProtocolReceiveTest(TestCase):
|
|||
status='complete',
|
||||
our_as1=create_as1,
|
||||
delivered=['fake:post:target'],
|
||||
type='create',
|
||||
type='post',
|
||||
labels=['user', 'activity', 'notification'],
|
||||
users=[g.user.key, self.alice.key],
|
||||
)
|
||||
|
||||
self.assertEqual([(obj, 'fake:post:target')], Fake.sent)
|
||||
|
||||
def test_create_reply_bare_object(self):
|
||||
self.make_followers()
|
||||
|
||||
reply_as1 = {
|
||||
'id': 'fake:reply',
|
||||
'objectType': 'note',
|
||||
'inReplyTo': 'fake:post',
|
||||
'author': 'fake:alice',
|
||||
}
|
||||
Fake.fetchable['fake:post'] = {
|
||||
'objectType': 'note',
|
||||
'id': 'fake:post',
|
||||
'author': 'fake:bob',
|
||||
}
|
||||
self.assertEqual('OK', Fake.receive('fake:reply', our_as1=reply_as1))
|
||||
|
||||
self.assert_object('fake:reply',
|
||||
our_as1=reply_as1,
|
||||
type='note',
|
||||
users=[g.user.key],
|
||||
)
|
||||
|
||||
create_as1 = {
|
||||
'id': 'fake:reply#bridgy-fed-create',
|
||||
'objectType': 'activity',
|
||||
'verb': 'post',
|
||||
'actor': 'http://bf/fake/fake:user/ap',
|
||||
'object': reply_as1,
|
||||
'published': '2022-01-02T03:04:05+00:00',
|
||||
}
|
||||
obj = self.assert_object('fake:reply#bridgy-fed-create',
|
||||
status='complete',
|
||||
our_as1=create_as1,
|
||||
delivered=['fake:post:target'],
|
||||
type='post',
|
||||
labels=['user', 'activity', 'notification'],
|
||||
users=[g.user.key, self.bob.key],
|
||||
)
|
||||
|
||||
self.assertEqual([(obj, 'fake:post:target')], Fake.sent)
|
||||
|
||||
# def test_update_reply(self):
|
||||
# self.make_followers()
|
||||
|
||||
|
@ -505,7 +546,7 @@ class ProtocolReceiveTest(TestCase):
|
|||
'inReplyTo': 'fake:post',
|
||||
}
|
||||
create_as1 = {
|
||||
'objectType': 'create',
|
||||
'objectType': 'post',
|
||||
'id': 'fake:create',
|
||||
'object': reply_as1,
|
||||
}
|
||||
|
@ -513,7 +554,7 @@ class ProtocolReceiveTest(TestCase):
|
|||
|
||||
self.assert_object('fake:create',
|
||||
our_as1=reply_as1,
|
||||
type='create',
|
||||
type='post',
|
||||
users=[g.user.key],
|
||||
# not feed since it's a reply
|
||||
# not notification since it doesn't involve the user
|
||||
|
|
25
web.py
25
web.py
|
@ -692,9 +692,12 @@ def _targets(obj):
|
|||
"""
|
||||
logger.info('Finding recipients and their targets')
|
||||
|
||||
inner_obj_as1 = as1.get_object(obj.as1)
|
||||
|
||||
# if there's in-reply-to, like-of, or repost-of, they're the targets.
|
||||
# otherwise, it's all followers. sort so order is deterministic for tests.
|
||||
orig_ids = sorted(as1.get_ids(obj.as1, 'inReplyTo'))
|
||||
orig_ids = sorted(as1.get_ids(obj.as1, 'inReplyTo') +
|
||||
as1.get_ids(inner_obj_as1, 'inReplyTo'))
|
||||
verb = obj.as1.get('verb')
|
||||
if orig_ids:
|
||||
logger.info(f'original object ids from inReplyTo: {orig_ids}')
|
||||
|
@ -724,16 +727,24 @@ def _targets(obj):
|
|||
# TODO: attach orig_obj's author/actor to obj.users
|
||||
|
||||
target = protocol.target_for(orig_obj)
|
||||
if target:
|
||||
targets[Target(protocol=protocol.LABEL, uri=target)] = orig_obj
|
||||
logger.info(f'Target for {id} is {target}')
|
||||
if not target:
|
||||
# TODO: surface errors like this somehow?
|
||||
logger.error(f"Can't find delivery target for {id}")
|
||||
continue
|
||||
|
||||
# TODO: surface errors like this somehow?
|
||||
logger.error(f"Can't find delivery target for {id}")
|
||||
logger.info(f'Target for {id} is {target}')
|
||||
targets[Target(protocol=protocol.LABEL, uri=target)] = orig_obj
|
||||
orig_user = orig_obj.as1.get('author') or orig_obj.as1.get('actor')
|
||||
if orig_user:
|
||||
user_key = protocol.key_for(orig_user)
|
||||
logger.info(f'Recipient is {user_key}')
|
||||
if user_key not in obj.users:
|
||||
obj.users.append(user_key)
|
||||
if 'notification' not in obj.labels:
|
||||
obj.labels.append('notification')
|
||||
|
||||
|
||||
# deliver to followers?
|
||||
inner_obj_as1 = as1.get_object(obj.as1)
|
||||
is_reply = (obj.type == 'comment' or
|
||||
(inner_obj_as1 and inner_obj_as1.get('inReplyTo')))
|
||||
if obj.type == 'share' or (obj.type in ('post', 'update') and not is_reply):
|
||||
|
|
Ładowanie…
Reference in New Issue