Files
crypto_monitor/tests/test_journal_chart_async_lib.py
T
dekun 8f4ae8ad31 Speed up journal save with AJAX and async K-line charts.
Defer exchange chart generation to a background thread and save via XHR so fill-from-trade no longer blocks on full page reload.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-18 15:15:24 +08:00

56 lines
1.8 KiB
Python

from unittest import TestCase
from unittest.mock import MagicMock, patch
from lib.instance.journal_chart_async_lib import (
request_wants_journal_ajax,
schedule_journal_exchange_chart,
)
class _FakeHeaders(dict):
def get(self, key, default=None):
for k, v in self.items():
if str(k).lower() == str(key).lower():
return v
return default
class JournalChartAsyncLibTests(TestCase):
def test_request_wants_journal_ajax_xhr(self):
req = MagicMock()
req.headers = _FakeHeaders({"X-Requested-With": "XMLHttpRequest"})
req.form = {}
self.assertTrue(request_wants_journal_ajax(req))
def test_request_wants_journal_ajax_form(self):
req = MagicMock()
req.headers = _FakeHeaders({})
req.form = {"ajax": "1"}
self.assertTrue(request_wants_journal_ajax(req))
def test_request_wants_journal_ajax_plain(self):
req = MagicMock()
req.headers = _FakeHeaders({"Accept": "text/html"})
req.form = {}
self.assertFalse(request_wants_journal_ajax(req))
@patch("lib.instance.journal_chart_async_lib.threading.Thread")
def test_schedule_starts_daemon_thread(self, mock_thread_cls):
thread = MagicMock()
mock_thread_cls.return_value = thread
schedule_journal_exchange_chart(
entry_id="abc123",
exchange_symbol="BTC/USDT:USDT",
title_prefix="t",
journal_tfs=["5m", "15m"],
journal_limit=100,
marker_payload={},
upload_folder="/tmp",
generate_chart_fn=MagicMock(),
get_db_fn=MagicMock(),
)
mock_thread_cls.assert_called_once()
kwargs = mock_thread_cls.call_args.kwargs
self.assertTrue(kwargs.get("daemon"))
thread.start.assert_called_once()