Make Like work again

pull/1/head
Thomas Sileo 2018-06-14 08:10:45 +02:00
rodzic 24e50b4fac
commit 31b9b40b35
4 zmienionych plików z 104 dodań i 19 usunięć

Wyświetl plik

@ -378,7 +378,7 @@ class BaseActivity(object, metaclass=_ActivityMeta):
) -> None:
raise NotImplementedError
def _undo_outbox(self) -> None:
def _undo_outbox(self, as_actor: "Person") -> None:
raise NotImplementedError
def _pre_process_from_inbox(self, as_actor: "Person") -> None:
@ -599,11 +599,11 @@ class Follow(BaseActivity):
BACKEND.undo_new_follower(as_actor, self)
def _undo_outbox(self) -> None:
def _undo_outbox(self, as_actor: "Person") -> None:
if BACKEND is None:
raise UninitializedBackendError
BACKEND.undo_new_following(self.get_actor(), self)
BACKEND.undo_new_following(as_actor, self)
def build_accept(self) -> BaseActivity:
return self._build_reply(ActivityType.ACCEPT)
@ -694,7 +694,7 @@ class Undo(BaseActivity):
# DB.outbox.update_one({'remote_id': obj.id}, {'$set': {'meta.undo': True}})
try:
obj._undo_outbox()
obj._undo_outbox(as_actor)
logger.debug(f"_undo_outbox called for {obj}")
except NotImplementedError:
logger.debug(f"_undo_outbox not implemented for {obj}")
@ -711,12 +711,16 @@ class Like(BaseActivity):
return [self.get_object().get_actor().id]
def _process_from_inbox(self, as_actor: "Person") -> None:
# ABC
self.inbox_like(self)
if BACKEND is None:
raise UninitializedBackendError
BACKEND.inbox_like(as_actor, self)
def _undo_inbox(self, as_actor: "Person") -> None:
# ABC
self.inbox_undo_like(as_actor, self)
if BACKEND is None:
raise UninitializedBackendError
BACKEND.inbox_undo_like(as_actor, self)
def _post_to_outbox(
self,
@ -725,12 +729,16 @@ class Like(BaseActivity):
activity: ObjectType,
recipients: List[str],
):
# ABC
self.outbox_like(self)
if BACKEND is None:
raise UninitializedBackendError
def _undo_outbox(self) -> None:
# ABC
self.outbox_undo_like(self)
BACKEND.outbox_like(as_actor, self)
def _undo_outbox(self, as_actor: "Person") -> None:
if BACKEND is None:
raise UninitializedBackendError
BACKEND.outbox_undo_like(as_actor, self)
def build_undo(self) -> BaseActivity:
return Undo(
@ -783,11 +791,11 @@ class Announce(BaseActivity):
# ABC
self.outbox_announce(self)
def _undo_outbox(self) -> None:
def _undo_outbox(self, as_actor: "Person") -> None:
if BACKEND is None:
raise UninitializedBackendError
BACKEND.outbox_undo_announce(self)
BACKEND.outbox_undo_announce(as_actor, self)
def build_undo(self) -> BaseActivity:
return Undo(object=self.to_dict(embed=True))

Wyświetl plik

@ -61,3 +61,19 @@ class Backend(abc.ABC):
@abc.abstractmethod
def inbox_update(self, as_actor: "ap.Person", activity: "ap.Update") -> None:
pass
@abc.abstractmethod
def inbox_like(self, as_actor: "ap.Person", activity: "ap.Like") -> None:
pass
@abc.abstractmethod
def inbox_undo_like(self, as_actor: "ap.Person", activity: "ap.Like") -> None:
pass
@abc.abstractmethod
def outbox_like(self, as_actor: "ap.Person", activity: "ap.Like") -> None:
pass
@abc.abstractmethod
def outbox_undo_like(self, as_actor: "ap.Person", activity: "ap.Like") -> None:
pass

Wyświetl plik

@ -195,16 +195,20 @@ class InMemBackend(Backend):
# return as_actor.id == activity.get_actor().id
return True # FIXME(tsileo): implement this
def inbox_like(self, activity: ap.Like) -> None:
@track_call
def inbox_like(self, as_actor: ap.Person, activity: ap.Like) -> None:
pass
def inbox_undo_like(self, activity: ap.Like) -> None:
@track_call
def inbox_undo_like(self, as_actor: ap.Person, activity: ap.Like) -> None:
pass
def outbox_like(self, activity: ap.Like) -> None:
@track_call
def outbox_like(self, as_actor: ap.Person, activity: ap.Like) -> None:
pass
def outbox_undo_like(self, activity: ap.Like) -> None:
@track_call
def outbox_undo_like(self, as_actor: ap.Person, activity: ap.Like) -> None:
pass
def inbox_announce(self, activity: ap.Announce) -> None:

Wyświetl plik

@ -494,3 +494,60 @@ def test_little_boxes_follow_and_new_create_note_and_delete():
lambda _delete: _assert_eq(_delete.id, delete.id),
),
)
def test_little_boxes_follow_and_new_create_note_and_like():
back, create = test_little_boxes_follow_and_new_create_note()
me = back.get_user("tom")
other = back.get_user("tom2")
outbox = ap.Outbox(me)
like = ap.Like(actor=me.id, object=create.get_object().id)
outbox.post(like)
back.assert_called_methods(
me,
(
"a Like activity is published",
"outbox_new",
lambda as_actor: _assert_eq(as_actor.id, me.id),
lambda activity: _assert_eq(activity.id, like.id),
),
(
'"outbox_create" hook is called',
"outbox_like",
lambda as_actor: _assert_eq(as_actor.id, me.id),
lambda _like: _assert_eq(_like.id, like.id),
),
(
"the Delete activity is posted to the note creator",
"post_to_remote_inbox",
lambda as_actor: _assert_eq(as_actor.id, me.id),
lambda payload: None,
lambda recipient: _assert_eq(recipient, other.inbox),
),
)
back.assert_called_methods(
other,
(
"receiving the Like, ensure we check the actor is not blocked",
"outbox_is_blocked",
lambda as_actor: _assert_eq(as_actor.id, other.id),
lambda remote_actor: _assert_eq(remote_actor, me.id),
),
(
"receiving the Delete activity",
"inbox_new",
lambda as_actor: _assert_eq(as_actor.id, other.id),
lambda activity: _assert_eq(activity.id, like.id),
),
(
'"inbox_like" hook is called',
"inbox_like",
lambda as_actor: _assert_eq(as_actor.id, other.id),
lambda _like: _assert_eq(_like.id, like.id),
),
)