Add top level MQTT topic parsing to a separate file

This commit is contained in:
Mads Marquart
2020-01-20 16:46:26 +01:00
parent 0a6bf221e6
commit 01f8578dea
11 changed files with 281 additions and 178 deletions

View File

@@ -153,7 +153,9 @@ def test_message_reply(session):
def test_parse_client_delta_unknown(session):
assert UnknownEvent(data={"abc": 10}) == parse_client_delta(session, {"abc": 10})
assert UnknownEvent(
source="client payload", data={"abc": 10}
) == parse_client_delta(session, {"abc": 10})
def test_parse_client_payloads_empty(session):

View File

@@ -272,4 +272,6 @@ def test_noop(session):
def test_parse_delta_unknown(session):
assert UnknownEvent(data={"abc": 10}) == parse_delta(session, {"abc": 10})
assert UnknownEvent(source="Delta class", data={"abc": 10}) == parse_delta(
session, {"abc": 10}
)

View File

@@ -951,4 +951,6 @@ def test_plan_participation(session):
def test_parse_delta_unknown(session):
assert UnknownEvent(data={"abc": 10}) == parse_delta(session, {"abc": 10})
assert UnknownEvent(source="Delta type", data={"abc": 10}) == parse_delta(
session, {"abc": 10}
)

137
tests/test_event.py Normal file
View File

@@ -0,0 +1,137 @@
import datetime
from fbchat import (
_util,
User,
Group,
Message,
ParseError,
UnknownEvent,
Typing,
FriendRequest,
Presence,
ReactionEvent,
UnfetchedThreadEvent,
ActiveStatus,
)
from fbchat._event import parse_delta, parse_events
def test_t_ms_full(session):
"""A full example of parsing of data in /t_ms."""
payload = {
"deltas": [
{
"deltaMessageReaction": {
"threadKey": {"threadFbId": 4321},
"messageId": "mid.$XYZ",
"action": 0,
"userId": 1234,
"reaction": "😢",
"senderId": 1234,
"offlineThreadingId": "1122334455",
}
}
]
}
data = {
"deltas": [
{
"payload": [ord(x) for x in _util.json_minimal(payload)],
"class": "ClientPayload",
},
{"class": "NoOp",},
{
"forceInsert": False,
"messageId": "mid.$ABC",
"threadKey": {"threadFbId": "4321"},
"class": "ForcedFetch",
},
],
"firstDeltaSeqId": 111111,
"lastIssuedSeqId": 111113,
"queueEntityId": 1234,
}
thread = Group(session=session, id="4321")
assert [
ReactionEvent(
author=User(session=session, id="1234"),
thread=thread,
message=Message(thread=thread, id="mid.$XYZ"),
reaction="😢",
),
UnfetchedThreadEvent(
thread=thread, message=Message(thread=thread, id="mid.$ABC"),
),
] == list(parse_events(session, "/t_ms", data))
def test_thread_typing(session):
data = {"sender_fbid": 1234, "state": 0, "type": "typ", "thread": "4321"}
(event,) = parse_events(session, "/thread_typing", data)
assert event == Typing(
author=User(session=session, id="1234"),
thread=Group(session=session, id="4321"),
status=False,
)
def test_orca_typing_notifications(session):
data = {"type": "typ", "sender_fbid": 1234, "state": 1}
(event,) = parse_events(session, "/orca_typing_notifications", data)
assert event == Typing(
author=User(session=session, id="1234"),
thread=User(session=session, id="1234"),
status=True,
)
def test_friend_request(session):
data = {"type": "jewel_requests_add", "from": "1234"}
(event,) = parse_events(session, "/legacy_web", data)
assert event == FriendRequest(author=User(session=session, id="1234"))
def test_orca_presence_inc(session):
data = {
"list_type": "inc",
"list": [
{"u": 1234, "p": 0, "l": 1500000000, "vc": 74},
{"u": 2345, "p": 2, "c": 9969664, "vc": 10},
],
}
(event,) = parse_events(session, "/orca_presence", data)
la = datetime.datetime(2017, 7, 14, 2, 40, tzinfo=datetime.timezone.utc)
assert event == Presence(
statuses={
"1234": ActiveStatus(active=False, last_active=la),
"2345": ActiveStatus(active=True),
},
full=False,
)
def test_orca_presence_full(session):
data = {
"list_type": "full",
"list": [
{"u": 1234, "p": 2, "c": 5767242},
{"u": 2345, "p": 2, "l": 1500000000},
{"u": 3456, "p": 2, "c": 9961482},
{"u": 4567, "p": 0, "l": 1500000000},
{"u": 5678, "p": 0},
{"u": 6789, "p": 2, "c": 14168154},
],
}
(event,) = parse_events(session, "/orca_presence", data)
la = datetime.datetime(2017, 7, 14, 2, 40, tzinfo=datetime.timezone.utc)
assert event == Presence(
statuses={
"1234": ActiveStatus(active=True),
"2345": ActiveStatus(active=True, last_active=la),
"3456": ActiveStatus(active=True),
"4567": ActiveStatus(active=False, last_active=la),
"5678": ActiveStatus(active=False),
"6789": ActiveStatus(active=True),
},
full=True,
)