feat: implement mvp with email-first login flow and langgraph architecture

This commit is contained in:
Yunxiao Xu
2026-02-09 23:22:30 -08:00
parent af227d40e6
commit 5a943b902a
79 changed files with 8200 additions and 1 deletions

View File

@@ -0,0 +1,44 @@
import logging
import pytest
import io
import json
from ea_chatbot.utils.logging import ContextLoggerAdapter, JsonFormatter
@pytest.fixture
def json_log_capture():
"""Fixture to capture JSON logs."""
log_stream = io.StringIO()
logger = logging.getLogger("test_context")
logger.setLevel(logging.INFO)
for handler in logger.handlers[:]:
logger.removeHandler(handler)
handler = logging.StreamHandler(log_stream)
handler.setFormatter(JsonFormatter())
logger.addHandler(handler)
return logger, log_stream
def test_context_logger_adapter_injects_metadata(json_log_capture):
"""Test that ContextLoggerAdapter injects metadata into the log record."""
logger, log_stream = json_log_capture
adapter = ContextLoggerAdapter(logger, {"run_id": "123", "node_name": "test_node"})
adapter.info("test message")
data = json.loads(log_stream.getvalue())
assert data["message"] == "test message"
assert data["run_id"] == "123"
assert data["node_name"] == "test_node"
def test_context_logger_adapter_override_metadata(json_log_capture):
"""Test that extra metadata can be provided during call."""
logger, log_stream = json_log_capture
adapter = ContextLoggerAdapter(logger, {"run_id": "123"})
# Passing extra context via the 'extra' parameter in standard logging
# Note: Our adapter should handle merging this.
adapter.info("test message", extra={"node_name": "dynamic_node"})
data = json.loads(log_stream.getvalue())
assert data["run_id"] == "123"
assert data["node_name"] == "dynamic_node"