Files
meshcore-bot/tests/test_models.py
T
agessaman 23da88c37d refactor(shared): create shared/ package and migrate foundation modules
Move models.py, db_manager.py, db_migrations.py, and security_utils.py
from modules/ to a new shared/ top-level package that can be imported by
both the bot and the web viewer without coupling them.

Update all imports across ~75 files (commands, service plugins, tests,
web viewer, generate_website.py). No logic changes — pure file moves and
import path updates.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-18 17:19:46 -07:00

93 lines
2.9 KiB
Python

"""Tests for modules/models.py — MeshMessage dataclass."""
from shared.models import MeshMessage
class TestMeshMessageDefaults:
"""MeshMessage default values."""
def test_content_is_required(self):
msg = MeshMessage(content="hello")
assert msg.content == "hello"
def test_optional_fields_default_to_none(self):
msg = MeshMessage(content="test")
assert msg.sender_id is None
assert msg.sender_pubkey is None
assert msg.channel is None
assert msg.hops is None
assert msg.path is None
assert msg.timestamp is None
assert msg.snr is None
assert msg.rssi is None
assert msg.elapsed is None
assert msg.routing_info is None
def test_is_dm_defaults_false(self):
msg = MeshMessage(content="test")
assert msg.is_dm is False
class TestMeshMessageConstruction:
"""MeshMessage construction with various field combinations."""
def test_channel_message(self):
msg = MeshMessage(content="ping", channel="general", sender_id="Alice")
assert msg.content == "ping"
assert msg.channel == "general"
assert msg.sender_id == "Alice"
assert msg.is_dm is False
def test_dm_message(self):
msg = MeshMessage(content="hello", is_dm=True, sender_pubkey="deadbeef")
assert msg.is_dm is True
assert msg.channel is None
assert msg.sender_pubkey == "deadbeef"
def test_routing_info_dict(self):
routing = {"path_nodes": ["01", "7e"], "route_type": "FLOOD"}
msg = MeshMessage(content="data", routing_info=routing)
assert msg.routing_info == routing
assert msg.routing_info["route_type"] == "FLOOD"
def test_numeric_fields(self):
msg = MeshMessage(
content="test",
hops=3,
timestamp=1700000000,
snr=5.5,
rssi=-80,
)
assert msg.hops == 3
assert msg.timestamp == 1700000000
assert msg.snr == 5.5
assert msg.rssi == -80
def test_path_field(self):
msg = MeshMessage(content="test", path="01,7e,86")
assert msg.path == "01,7e,86"
def test_elapsed_field(self):
msg = MeshMessage(content="test", elapsed="1.23s")
assert msg.elapsed == "1.23s"
class TestMeshMessageEquality:
"""MeshMessage dataclass equality."""
def test_equal_messages(self):
msg1 = MeshMessage(content="ping", channel="general", sender_id="Alice")
msg2 = MeshMessage(content="ping", channel="general", sender_id="Alice")
assert msg1 == msg2
def test_different_content_not_equal(self):
msg1 = MeshMessage(content="ping")
msg2 = MeshMessage(content="pong")
assert msg1 != msg2
def test_different_channel_not_equal(self):
msg1 = MeshMessage(content="ping", channel="general")
msg2 = MeshMessage(content="ping", channel="test")
assert msg1 != msg2