2023-12-11 14:02:50 +02:00
|
|
|
from dataclasses import dataclass, field
|
|
|
|
|
from marshmallow_dataclass import class_schema
|
|
|
|
|
from typing import Optional, Union
|
|
|
|
|
import math
|
|
|
|
|
import allure
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@dataclass
|
|
|
|
|
class MessageRpcResponse:
|
|
|
|
|
payload: str
|
|
|
|
|
contentTopic: str
|
|
|
|
|
version: Optional[int]
|
|
|
|
|
timestamp: Optional[int]
|
|
|
|
|
ephemeral: Optional[bool]
|
|
|
|
|
meta: Optional[str]
|
2024-05-13 15:14:14 +03:00
|
|
|
rate_limit_proof: Optional[dict] = field(default_factory=dict)
|
|
|
|
|
|
|
|
|
|
|
2023-12-11 14:02:50 +02:00
|
|
|
class WakuMessage:
|
2024-04-17 08:37:31 +03:00
|
|
|
def __init__(self, message_response, schema=MessageRpcResponse):
|
|
|
|
|
self.schema = schema
|
2023-12-11 14:02:50 +02:00
|
|
|
self.received_messages = message_response
|
2024-04-17 08:37:31 +03:00
|
|
|
self.message_rpc_response_schema = class_schema(self.schema)()
|
2023-12-11 14:02:50 +02:00
|
|
|
|
|
|
|
|
@allure.step
|
|
|
|
|
def assert_received_message(self, sent_message, index=0):
|
2024-04-17 08:37:31 +03:00
|
|
|
message = self.message_rpc_response_schema.load(self.received_messages[index])
|
2023-12-11 14:02:50 +02:00
|
|
|
|
|
|
|
|
def assert_fail_message(field_name):
|
|
|
|
|
return f"Incorrect field: {field_name}. Published: {sent_message[field_name]} Received: {getattr(message, field_name)}"
|
|
|
|
|
|
|
|
|
|
assert message.payload == sent_message["payload"], assert_fail_message("payload")
|
2024-05-20 13:10:53 +03:00
|
|
|
assert message.contentTopic == sent_message["contentTopic"], assert_fail_message("contentTopic")
|
2023-12-11 14:02:50 +02:00
|
|
|
if sent_message.get("timestamp") is not None:
|
|
|
|
|
if isinstance(sent_message["timestamp"], float):
|
|
|
|
|
assert math.isclose(float(message.timestamp), sent_message["timestamp"], rel_tol=1e-9), assert_fail_message("timestamp")
|
|
|
|
|
else:
|
|
|
|
|
assert str(message.timestamp) == str(sent_message["timestamp"]), assert_fail_message("timestamp")
|
|
|
|
|
if "version" in sent_message:
|
|
|
|
|
assert str(message.version) == str(sent_message["version"]), assert_fail_message("version")
|
|
|
|
|
if "meta" in sent_message:
|
|
|
|
|
assert str(message.meta) == str(sent_message["meta"]), assert_fail_message("meta")
|
|
|
|
|
if "ephemeral" in sent_message:
|
|
|
|
|
assert str(message.ephemeral) == str(sent_message["ephemeral"]), assert_fail_message("ephemeral")
|