kopia lustrzana https://gitlab.com/marnanel/chapeau
test_update() passes
rodzic
972377aafa
commit
e26e2781d6
|
@ -47,9 +47,13 @@ def create(fields,
|
||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
result = deserialise(fields)
|
result = deserialise(fields)
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
except Exception as e:
|
||||||
|
logger.info("%s: can't deserialise: %s",
|
||||||
|
address, repr(e))
|
||||||
|
return None
|
||||||
|
|
||||||
def deserialise(fields,
|
def deserialise(fields,
|
||||||
address = None,
|
address = None,
|
||||||
|
@ -301,11 +305,26 @@ def on_announce(fields, address):
|
||||||
|
|
||||||
return reblog
|
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(
|
user = trilby_models.RemotePerson(
|
||||||
remote_url = fields['id'],
|
remote_url = fields['id'],
|
||||||
)
|
)
|
||||||
|
logger.debug("%s: creating new user",
|
||||||
|
address)
|
||||||
|
|
||||||
for fieldsname, fieldname in [
|
for fieldsname, fieldname in [
|
||||||
('preferredUsername', 'username'),
|
('preferredUsername', 'username'),
|
||||||
|
@ -322,6 +341,9 @@ def on_person(fields, address):
|
||||||
('movedTo', 'moved_to'),
|
('movedTo', 'moved_to'),
|
||||||
]:
|
]:
|
||||||
if fieldsname in fields:
|
if fieldsname in fields:
|
||||||
|
logger.debug('%s: %s = %s',
|
||||||
|
address, fieldname, fields[fieldsname])
|
||||||
|
|
||||||
setattr(user,
|
setattr(user,
|
||||||
fieldname,
|
fieldname,
|
||||||
fields[fieldsname])
|
fields[fieldsname])
|
||||||
|
@ -406,6 +428,29 @@ def on_like(fields, address):
|
||||||
|
|
||||||
return like
|
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):
|
def on_collection(fields, address):
|
||||||
|
|
||||||
result = sombrero_collections.Collection(
|
result = sombrero_collections.Collection(
|
||||||
|
|
|
@ -3,6 +3,7 @@ from kepi.bowler_pub.tests import create_remote_person
|
||||||
from unittest import skip
|
from unittest import skip
|
||||||
from kepi.bowler_pub.create import create
|
from kepi.bowler_pub.create import create
|
||||||
from kepi.bowler_pub.models import *
|
from kepi.bowler_pub.models import *
|
||||||
|
import kepi.trilby_api.models as trilby_models
|
||||||
import httpretty
|
import httpretty
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
@ -12,14 +13,14 @@ SENDER_ID = 'https://example.com/actor'
|
||||||
TOTALLY = "Totally modified now"
|
TOTALLY = "Totally modified now"
|
||||||
|
|
||||||
# XXX Why does this only test updating of profiles?
|
# 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
|
@httpretty.activate
|
||||||
def test_update_profile(self):
|
def test_update_profile(self):
|
||||||
|
|
||||||
sender = create_remote_person(
|
create_remote_person(
|
||||||
name = 'jeremy',
|
name = 'jeremy',
|
||||||
remote_url = SENDER_ID,
|
remote_url = SENDER_ID,
|
||||||
auto_fetch = True,
|
auto_fetch = True,
|
||||||
|
@ -31,13 +32,18 @@ class TestUpdate(TestCase):
|
||||||
'type': 'Update',
|
'type': 'Update',
|
||||||
'actor': SENDER_ID,
|
'actor': SENDER_ID,
|
||||||
'object': {
|
'object': {
|
||||||
'display_name': TOTALLY,
|
'id': SENDER_ID,
|
||||||
|
'name': TOTALLY,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.info('Submitting Update activity: %s', create_form)
|
logger.info('Submitting Update activity: %s', create_form)
|
||||||
create(create_form)
|
create(create_form)
|
||||||
|
|
||||||
|
sender = trilby_models.RemotePerson.objects.get(
|
||||||
|
remote_url = SENDER_ID,
|
||||||
|
)
|
||||||
|
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
sender.display_name,
|
sender.display_name,
|
||||||
TOTALLY,
|
TOTALLY,
|
||||||
|
|
Ładowanie…
Reference in New Issue