"""Tests for new SQLAlchemy models.""" import pytest from sqlalchemy import create_engine from sqlalchemy.orm import Session from app.core.database import Base from app.core.models import ( AuditLog, Checkpoint, FeedbackEntry, TokenUsageRecord, ) @pytest.fixture def db_session(): """Create a test database session.""" engine = create_engine("sqlite:///./test_new_models.db") Base.metadata.create_all(bind=engine) session = Session(engine) yield session session.close() Base.metadata.drop_all(bind=engine) def test_audit_log_creation(db_session): """Test creating an audit log entry.""" entry = AuditLog( user_id=1, action="prd.create", resource_type="prd_document", resource_id="test-session-id", details={"key": "value"}, ip_address="192.168.1.1", ) db_session.add(entry) db_session.commit() assert entry.id is not None assert entry.action == "prd.create" assert entry.details == {"key": "value"} def test_token_usage_record(db_session): """Test creating a token usage record.""" record = TokenUsageRecord( user_id=1, project_id=1, operation="prd_generation", model="gpt-4", input_tokens=1500, output_tokens=3000, total_tokens=4500, cost_usd=0.15, latency_ms=2500, ) db_session.add(record) db_session.commit() assert record.id is not None assert record.total_tokens == 4500 assert record.cost_usd == 0.15 def test_checkpoint_creation(db_session): """Test creating a checkpoint.""" checkpoint = Checkpoint( checkpoint_id="test-uuid-123", project_id=1, session_id="test-session", role="product_owner", message="PRD evaluation complete", status="pending", ) db_session.add(checkpoint) db_session.commit() assert checkpoint.checkpoint_id == "test-uuid-123" assert checkpoint.status == "pending" def test_checkpoint_approval(db_session): """Test approving a checkpoint.""" checkpoint = Checkpoint( checkpoint_id="test-uuid-456", role="judge", message="Judge evaluation", status="pending", ) db_session.add(checkpoint) db_session.commit() checkpoint.status = "approved" db_session.commit() retrieved = db_session.query(Checkpoint).filter_by( checkpoint_id="test-uuid-456" ).first() assert retrieved.status == "approved" def test_feedback_entry_creation(db_session): """Test creating a feedback entry.""" entry = FeedbackEntry( feedback_id="FB-001", title="Missing features", status="open", source="judge", phase=3, detail="PRD is missing key features section", ) db_session.add(entry) db_session.commit() assert entry.id is not None assert entry.feedback_id == "FB-001" assert entry.status == "open" def test_feedback_resolution(db_session): """Test resolving a feedback entry.""" entry = FeedbackEntry( feedback_id="FB-002", title="Test feedback", status="open", source="judge", detail="Test detail", ) db_session.add(entry) db_session.commit() entry.status = "resolved" entry.resolution = "Fixed" db_session.commit() retrieved = db_session.query(FeedbackEntry).filter_by( feedback_id="FB-002" ).first() assert retrieved.status == "resolved" assert retrieved.resolution == "Fixed"