kopia lustrzana https://gitlab.com/marnanel/chapeau
test_update() passes
rodzic
972377aafa
commit
e26e2781d6
|
@ -47,9 +47,13 @@ def create(fields,
|
|||
)
|
||||
return
|
||||
|
||||
try:
|
||||
result = deserialise(fields)
|
||||
|
||||
return result
|
||||
except Exception as e:
|
||||
logger.info("%s: can't deserialise: %s",
|
||||
address, repr(e))
|
||||
return None
|
||||
|
||||
def deserialise(fields,
|
||||
address = None,
|
||||
|
@ -301,11 +305,26 @@ def on_announce(fields, address):
|
|||
|
||||
return reblog
|
||||
|
||||
def on_person(fields, address):
|
||||
def on_person(fields, address,
|
||||
update_existing = False):
|
||||
|
||||
if update_existing:
|
||||
try:
|
||||
user = trilby_models.RemotePerson.objects.get(
|
||||
remote_url = fields['id'],
|
||||
)
|
||||
logger.debug("%s: updating existing user %s",
|
||||
address, user)
|
||||
except trilby_models.RemotePerson.DoesNotExist:
|
||||
logger.debug("%s: can't update %s because they don't exist",
|
||||
address, fields['id'])
|
||||
return None
|
||||
else:
|
||||
user = trilby_models.RemotePerson(
|
||||
remote_url = fields['id'],
|
||||
)
|
||||
logger.debug("%s: creating new user",
|
||||
address)
|
||||
|
||||
for fieldsname, fieldname in [
|
||||
('preferredUsername', 'username'),
|
||||
|
@ -322,6 +341,9 @@ def on_person(fields, address):
|
|||
('movedTo', 'moved_to'),
|
||||
]:
|
||||
if fieldsname in fields:
|
||||
logger.debug('%s: %s = %s',
|
||||
address, fieldname, fields[fieldsname])
|
||||
|
||||
setattr(user,
|
||||
fieldname,
|
||||
fields[fieldsname])
|
||||
|
@ -406,6 +428,29 @@ def on_like(fields, address):
|
|||
|
||||
return like
|
||||
|
||||
def on_update(fields, address):
|
||||
|
||||
# TODO: According to the spec, "Update" is partial
|
||||
# if we're getting the message from a local user,
|
||||
# but total if we're getting it from a remote user.
|
||||
# Since we don't currently support ActivityPub from
|
||||
# local users, we treat all updates as total for now.
|
||||
# See https://gitlab.com/marnanel/kepi/-/issues/8 .
|
||||
|
||||
handler = on_person # FIXME there are other possibilities!
|
||||
# See https://gitlab.com/marnanel/kepi/-/issues/63 .
|
||||
|
||||
logger.debug('%s: on_update %s', address, fields)
|
||||
|
||||
changes = fields['object']
|
||||
|
||||
logger.debug('%s: -- changes: %s', address, changes)
|
||||
|
||||
result = handler(changes, address,
|
||||
update_existing = True)
|
||||
|
||||
return result
|
||||
|
||||
def on_collection(fields, address):
|
||||
|
||||
result = sombrero_collections.Collection(
|
||||
|
|
|
@ -3,6 +3,7 @@ from kepi.bowler_pub.tests import create_remote_person
|
|||
from unittest import skip
|
||||
from kepi.bowler_pub.create import create
|
||||
from kepi.bowler_pub.models import *
|
||||
import kepi.trilby_api.models as trilby_models
|
||||
import httpretty
|
||||
import logging
|
||||
|
||||
|
@ -12,14 +13,14 @@ SENDER_ID = 'https://example.com/actor'
|
|||
TOTALLY = "Totally modified now"
|
||||
|
||||
# XXX Why does this only test updating of profiles?
|
||||
# XXX I thought we should update items as well.
|
||||
# See https://gitlab.com/marnanel/kepi/-/issues/63 .
|
||||
|
||||
class TestUpdate(TestCase):
|
||||
class Tests(TestCase):
|
||||
|
||||
@httpretty.activate
|
||||
def test_update_profile(self):
|
||||
|
||||
sender = create_remote_person(
|
||||
create_remote_person(
|
||||
name = 'jeremy',
|
||||
remote_url = SENDER_ID,
|
||||
auto_fetch = True,
|
||||
|
@ -31,13 +32,18 @@ class TestUpdate(TestCase):
|
|||
'type': 'Update',
|
||||
'actor': SENDER_ID,
|
||||
'object': {
|
||||
'display_name': TOTALLY,
|
||||
'id': SENDER_ID,
|
||||
'name': TOTALLY,
|
||||
},
|
||||
}
|
||||
|
||||
logger.info('Submitting Update activity: %s', create_form)
|
||||
create(create_form)
|
||||
|
||||
sender = trilby_models.RemotePerson.objects.get(
|
||||
remote_url = SENDER_ID,
|
||||
)
|
||||
|
||||
self.assertEqual(
|
||||
sender.display_name,
|
||||
TOTALLY,
|
||||
|
|
Ładowanie…
Reference in New Issue