aprsd/tests/cmds/test_webchat.py

87 lines
2.5 KiB
Python
Raw Normal View History

2022-12-13 15:25:46 -05:00
import typing as t
import unittest
from unittest import mock
from click.testing import CliRunner
import flask
import flask_socketio
from oslo_config import cfg
2022-12-13 15:25:46 -05:00
from aprsd import conf # noqa: F401
2022-12-13 15:25:46 -05:00
from aprsd.cmds import webchat # noqa
from aprsd.packets import core
2022-12-13 15:25:46 -05:00
from .. import fake
CONF = cfg.CONF
2022-12-13 15:25:46 -05:00
F = t.TypeVar("F", bound=t.Callable[..., t.Any])
class TestSendMessageCommand(unittest.TestCase):
def config_and_init(self, login=None, password=None):
CONF.callsign = fake.FAKE_TO_CALLSIGN
CONF.trace_enabled = False
CONF.watch_list.packet_keep_count = 1
2022-12-13 15:25:46 -05:00
if login:
CONF.aprs_network.login = login
2022-12-13 15:25:46 -05:00
if password:
CONF.aprs_network.password = password
2022-12-13 15:25:46 -05:00
CONF.admin.user = "admin"
CONF.admin.password = "password"
2022-12-13 15:25:46 -05:00
@mock.patch("aprsd.log.log.setup_logging")
def test_init_flask(self, mock_logging):
2022-12-13 15:25:46 -05:00
"""Make sure we get an error if there is no login and config."""
CliRunner()
self.config_and_init()
2022-12-13 15:25:46 -05:00
socketio = webchat.init_flask("DEBUG", False)
2022-12-13 15:25:46 -05:00
self.assertIsInstance(socketio, flask_socketio.SocketIO)
self.assertIsInstance(webchat.flask_app, flask.Flask)
2022-12-13 15:25:46 -05:00
@mock.patch("aprsd.packets.tracker.PacketTrack.remove")
@mock.patch("aprsd.cmds.webchat.socketio")
2022-12-13 15:25:46 -05:00
def test_process_ack_packet(
self,
mock_remove, mock_socketio,
2022-12-13 15:25:46 -05:00
):
self.config_and_init()
mock_socketio.emit = mock.MagicMock()
# Create an ACK packet
packet = fake.fake_ack_packet()
2024-02-27 14:21:04 -05:00
mock_queue = mock.MagicMock()
2022-12-13 15:25:46 -05:00
socketio = mock.MagicMock()
2024-02-27 14:21:04 -05:00
wcp = webchat.WebChatProcessPacketThread(mock_queue, socketio)
2022-12-13 15:25:46 -05:00
wcp.process_ack_packet(packet)
mock_remove.called_once()
mock_socketio.called_once()
2022-12-13 15:25:46 -05:00
2024-02-27 14:21:04 -05:00
@mock.patch("aprsd.threads.tx.send")
@mock.patch("aprsd.packets.PacketList.rx")
@mock.patch("aprsd.cmds.webchat.socketio")
def test_process_our_message_packet(
self,
2024-02-27 14:21:04 -05:00
mock_tx_send,
2022-12-13 15:25:46 -05:00
mock_packet_add,
mock_socketio,
2022-12-13 15:25:46 -05:00
):
self.config_and_init()
mock_socketio.emit = mock.MagicMock()
2022-12-13 15:25:46 -05:00
packet = fake.fake_packet(
message="blah",
msg_number=1,
message_format=core.PACKET_TYPE_MESSAGE,
2022-12-13 15:25:46 -05:00
)
2024-02-27 14:21:04 -05:00
mock_queue = mock.MagicMock()
2022-12-13 15:25:46 -05:00
socketio = mock.MagicMock()
2024-02-27 14:21:04 -05:00
wcp = webchat.WebChatProcessPacketThread(mock_queue, socketio)
2022-12-13 15:25:46 -05:00
wcp.process_our_message_packet(packet)
2022-12-13 15:25:46 -05:00
mock_packet_add.called_once()
mock_socketio.called_once()