Spaces:
Sleeping
Sleeping
| """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, | |
| ) | |
| 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" | |