import uuid from datetime import datetime from sqlalchemy import Column, String, Text, DateTime, ForeignKey, Enum from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import relationship from app.database import Base from app.models.enums import TestState, TestResult class Test(Base): """ Test model representing a security test for a MITRE ATT&CK technique. Each test documents an attempt to validate coverage of a specific technique, including the procedure, tools used, and outcome. """ __tablename__ = "tests" id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) technique_id = Column(UUID(as_uuid=True), ForeignKey("techniques.id"), nullable=False) name = Column(String, nullable=False) description = Column(Text, nullable=True) platform = Column(String, nullable=True) procedure_text = Column(Text, nullable=True) tool_used = Column(String, nullable=True) execution_date = Column(DateTime, nullable=True) created_by = Column(UUID(as_uuid=True), ForeignKey("users.id"), nullable=True) result = Column(Enum(TestResult, name="testresult"), nullable=True) state = Column(Enum(TestState, name="teststate"), default=TestState.draft) validated_by = Column(UUID(as_uuid=True), ForeignKey("users.id"), nullable=True) validated_at = Column(DateTime, nullable=True) created_at = Column(DateTime, default=datetime.utcnow) # Relationships technique = relationship("Technique", back_populates="tests") evidences = relationship("Evidence", back_populates="test") creator = relationship("User", foreign_keys=[created_by]) validator = relationship("User", foreign_keys=[validated_by])