Merge pull request #238 from mouse-reeve/incoming-update-user

Handle incoming update user activities
This commit is contained in:
Mouse Reeve 2020-10-19 08:05:44 -07:00 committed by GitHub
commit 1de3f34224
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 45 additions and 1 deletions

View file

@ -68,7 +68,7 @@ def shared_inbox(request):
'Like': handle_unfavorite,
},
'Update': {
'Person': None,# TODO: handle_update_user
'Person': handle_update_user,
'Document': handle_update_book,
},
}
@ -308,6 +308,20 @@ def handle_tag(activity):
status_builder.create_tag(user, book, activity['object']['name'])
@app.task
def handle_update_user(activity):
''' receive an updated user Person activity object '''
try:
user = models.User.objects.get(remote_id=activity['object']['id'])
except models.User.DoesNotExist:
# who is this person? who cares
return
activitypub.Person(
**activity['object']
).to_model(models.User, instance=user)
# model save() happens in the to_model function
@app.task
def handle_update_book(activity):
''' a remote instance changed a book (Document) '''

View file

@ -0,0 +1,30 @@
import json
import pathlib
from django.test import TestCase
from bookwyrm import models, incoming
class UpdateUser(TestCase):
def setUp(self):
self.user = models.User.objects.create_user(
'mouse', 'mouse@mouse.com', 'mouseword',
remote_id='https://example.com/user/mouse',
local=False,
localname='mouse'
)
datafile = pathlib.Path(__file__).parent.joinpath(
'../data/ap_user.json'
)
self.user_data = json.loads(datafile.read_bytes())
def test_handle_update_user(self):
self.assertIsNone(self.user.name)
self.assertEqual(self.user.localname, 'mouse')
incoming.handle_update_user({'object': self.user_data})
self.user = models.User.objects.get(id=self.user.id)
self.assertEqual(self.user.name, 'MOUSE?? MOUSE!!')
self.assertEqual(self.user.localname, 'mouse')