feat: daily Markdown export admin action
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
102
tests/test_admin_export.py
Normal file
102
tests/test_admin_export.py
Normal file
@@ -0,0 +1,102 @@
|
||||
"""Tests for Markdown export functionality."""
|
||||
from datetime import datetime, timezone
|
||||
|
||||
import pytest
|
||||
|
||||
from openclaw.models import Session, Message
|
||||
from openclaw.export import generate_markdown_report
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def db_session(db):
|
||||
s = Session.objects.create(
|
||||
session_id="report-test",
|
||||
agent_name="xingyao",
|
||||
source_node="macmini",
|
||||
model_provider="anthropic",
|
||||
model_id="claude-sonnet-4-6",
|
||||
total_tokens=45230,
|
||||
start_time=datetime(2026, 4, 5, 10, 0, tzinfo=timezone.utc),
|
||||
)
|
||||
Message.objects.create(
|
||||
session=s,
|
||||
message_id="m1",
|
||||
parent_id="root",
|
||||
role="user",
|
||||
content_text="Help me fix this bug",
|
||||
timestamp=datetime(2026, 4, 5, 10, 23, tzinfo=timezone.utc),
|
||||
)
|
||||
Message.objects.create(
|
||||
session=s,
|
||||
message_id="m2",
|
||||
parent_id="m1",
|
||||
role="assistant",
|
||||
content_text="The bug is on line 45...",
|
||||
timestamp=datetime(2026, 4, 5, 10, 23, 30, tzinfo=timezone.utc),
|
||||
)
|
||||
return s
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
class TestMarkdownExport:
|
||||
def test_basic_report(self, db_session):
|
||||
md = generate_markdown_report(
|
||||
messages=db_session.messages.order_by("created_at"),
|
||||
date_str="2026-04-05",
|
||||
)
|
||||
assert "# Daily Report: 2026-04-05" in md
|
||||
assert "Help me fix this bug" in md
|
||||
assert "The bug is on line 45..." in md
|
||||
|
||||
def test_thinking_content_stripped(self, db):
|
||||
s = Session.objects.create(
|
||||
session_id="thinking-test",
|
||||
agent_name="test",
|
||||
source_node="macmini",
|
||||
start_time=datetime(2026, 4, 5, 10, 0, tzinfo=timezone.utc),
|
||||
)
|
||||
Message.objects.create(
|
||||
session=s,
|
||||
message_id="m3",
|
||||
parent_id="root",
|
||||
role="assistant",
|
||||
content_text="Final answer",
|
||||
raw_content=[
|
||||
{"type": "thinking", "thinking": "Let me think about this..."},
|
||||
{"type": "text", "text": "Final answer"},
|
||||
],
|
||||
timestamp=datetime(2026, 4, 5, 10, 30, tzinfo=timezone.utc),
|
||||
)
|
||||
md = generate_markdown_report(
|
||||
messages=s.messages.order_by("created_at"),
|
||||
date_str="2026-04-05",
|
||||
)
|
||||
assert "Let me think about this..." not in md
|
||||
assert "Final answer" in md
|
||||
|
||||
def test_tool_call_formatting(self, db):
|
||||
s = Session.objects.create(
|
||||
session_id="tool-test",
|
||||
agent_name="test",
|
||||
source_node="macmini",
|
||||
model_id="test-model",
|
||||
total_tokens=100,
|
||||
start_time=datetime(2026, 4, 5, 10, 0, tzinfo=timezone.utc),
|
||||
)
|
||||
Message.objects.create(
|
||||
session=s,
|
||||
message_id="m4",
|
||||
parent_id="root",
|
||||
role="assistant",
|
||||
content_text="I'll run a command",
|
||||
raw_content=[
|
||||
{"type": "text", "text": "I'll run a command"},
|
||||
],
|
||||
timestamp=datetime(2026, 4, 5, 10, 30, tzinfo=timezone.utc),
|
||||
)
|
||||
md = generate_markdown_report(
|
||||
messages=s.messages.order_by("created_at"),
|
||||
date_str="2026-04-05",
|
||||
)
|
||||
assert "test-model" in md
|
||||
assert "100" in md
|
||||
Reference in New Issue
Block a user