106 lines
3.7 KiB
Python
106 lines
3.7 KiB
Python
from sqlalchemy import inspect, text
|
|
|
|
from services.shared.db import engine
|
|
from services.shared.sql_init import init_sql_schema
|
|
|
|
|
|
def test_init_sql_schema_backfills_voice_events_source_event_id():
|
|
with engine.begin() as conn:
|
|
conn.execute(text("DROP TABLE IF EXISTS voice_events"))
|
|
conn.execute(
|
|
text(
|
|
"""
|
|
CREATE TABLE voice_events (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
event_id VARCHAR(64) NOT NULL UNIQUE,
|
|
event_type VARCHAR(64) NOT NULL,
|
|
call_id VARCHAR(128) NOT NULL,
|
|
interaction_id VARCHAR(64) NULL,
|
|
payload_json TEXT NOT NULL,
|
|
created_at VARCHAR(64) NOT NULL
|
|
)
|
|
"""
|
|
)
|
|
)
|
|
|
|
init_sql_schema()
|
|
|
|
inspector = inspect(engine)
|
|
columns = {item["name"] for item in inspector.get_columns("voice_events")}
|
|
indexes = {item["name"] for item in inspector.get_indexes("voice_events")}
|
|
|
|
assert "source_event_id" in columns
|
|
assert "ix_voice_events_source_event_id" in indexes
|
|
|
|
|
|
def test_init_sql_schema_backfills_whatsapp_message_runtime_columns():
|
|
with engine.begin() as conn:
|
|
conn.execute(text("DROP TABLE IF EXISTS whatsapp_messages"))
|
|
conn.execute(
|
|
text(
|
|
"""
|
|
CREATE TABLE whatsapp_messages (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
message_id VARCHAR(64) NOT NULL UNIQUE,
|
|
text TEXT NOT NULL,
|
|
payload_json TEXT NOT NULL,
|
|
created_at VARCHAR(64) NOT NULL
|
|
)
|
|
"""
|
|
)
|
|
)
|
|
|
|
init_sql_schema()
|
|
|
|
inspector = inspect(engine)
|
|
columns = {item["name"] for item in inspector.get_columns("whatsapp_messages")}
|
|
indexes = {item["name"] for item in inspector.get_indexes("whatsapp_messages")}
|
|
|
|
assert "thread_id" in columns
|
|
assert "chat_id" in columns
|
|
assert "interaction_id" in columns
|
|
assert "customer_id" in columns
|
|
assert "delivery_status" in columns
|
|
assert "author_type" in columns
|
|
assert "ix_whatsapp_messages_chat_external_unique" in indexes
|
|
assert "idx_whatsapp_messages_next_delivery_attempt_at" in indexes
|
|
|
|
|
|
def test_init_sql_schema_backfills_ai_session_context_summary_columns():
|
|
with engine.begin() as conn:
|
|
conn.execute(text("DROP TABLE IF EXISTS ai_sessions"))
|
|
conn.execute(
|
|
text(
|
|
"""
|
|
CREATE TABLE ai_sessions (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
session_id VARCHAR(64) NOT NULL UNIQUE,
|
|
channel VARCHAR(32) NOT NULL,
|
|
thread_id VARCHAR(64) NULL,
|
|
interaction_id VARCHAR(64) NULL,
|
|
customer_id VARCHAR(64) NULL,
|
|
agent_profile VARCHAR(64) NOT NULL,
|
|
language VARCHAR(16) NULL,
|
|
status VARCHAR(32) NOT NULL,
|
|
summary_text TEXT NOT NULL,
|
|
last_user_message_id VARCHAR(64) NULL,
|
|
last_ai_message_id VARCHAR(64) NULL,
|
|
handoff_reason TEXT NULL,
|
|
created_at VARCHAR(64) NOT NULL,
|
|
updated_at VARCHAR(64) NOT NULL,
|
|
closed_at VARCHAR(64) NULL
|
|
)
|
|
"""
|
|
)
|
|
)
|
|
|
|
init_sql_schema()
|
|
|
|
inspector = inspect(engine)
|
|
columns = {item["name"] for item in inspector.get_columns("ai_sessions")}
|
|
indexes = {item["name"] for item in inspector.get_indexes("ai_sessions")}
|
|
|
|
assert "context_summary_json" in columns
|
|
assert "context_summary_updated_at" in columns
|
|
assert "idx_ai_sessions_context_summary_updated_at" in indexes
|