"""Pytest configuration and fixtures.""" import pytest from pathlib import Path from datetime import datetime from typing import List from hypothesis import settings, Verbosity from tagging_system.core.models import ( FileInfo, ContentAnalysis, TagStructure, FrontmatterData, ContentType, LanguageInfo ) from tagging_system.config import TaggingConfig # Configure hypothesis for property-based testing settings.register_profile("default", max_examples=100, verbosity=Verbosity.normal) settings.register_profile("ci", max_examples=1000, verbosity=Verbosity.verbose) settings.load_profile("default") @pytest.fixture def sample_file_info() -> FileInfo: """Create a sample FileInfo for testing.""" return FileInfo( path="100-project/AI/test.md", name="test.md", directory="100-project/AI", extension=".md", size=1024, created=datetime(2024, 1, 1, 12, 0, 0), modified=datetime(2024, 1, 2, 12, 0, 0), content="# Test File\n\nThis is a test file about AI and machine learning." ) @pytest.fixture def sample_content_analysis() -> ContentAnalysis: """Create a sample ContentAnalysis for testing.""" return ContentAnalysis( language=LanguageInfo.ENGLISH, content_type=ContentType.NOTE, topics=["ai", "machine-learning", "technology"], mentions={ 'tools': ['python', 'tensorflow'], 'technologies': ['ai', 'ml'], 'people': [], 'organizations': ['openai'] }, sentiment="neutral", complexity="intermediate" ) @pytest.fixture def sample_tag_structure() -> TagStructure: """Create a sample TagStructure for testing.""" return TagStructure( primary=["project"], hierarchical=["tech/ai", "tech/ml"], content=["python", "tensorflow"], meta=["lang/en", "type/note"], custom=["custom-tag"] ) @pytest.fixture def sample_frontmatter_data() -> FrontmatterData: """Create a sample FrontmatterData for testing.""" return FrontmatterData( title="Test File", tags=["project", "tech/ai", "python"], created="2024-01-01", updated="2024-01-02", type="note", lang="en", aliases=["test"], description="A test file for AI projects" ) @pytest.fixture def default_config() -> TaggingConfig: """Create a default TaggingConfig for testing.""" return TaggingConfig() @pytest.fixture def temp_vault_structure(tmp_path: Path) -> Path: """Create a temporary vault structure for testing.""" vault_root = tmp_path / "test_vault" # Create directory structure directories = [ "100-project/AI", "100-project/Infrastructure", "200-area/Productivity", "200-area/Health", "300-resources/Development", "400-archive", "Clippings", "ReadItLater Inbox" ] for directory in directories: (vault_root / directory).mkdir(parents=True, exist_ok=True) # Create sample files sample_files = [ ("100-project/AI/llm-notes.md", "# LLM Notes\n\nNotes about large language models."), ("200-area/Productivity/gtd.md", "# Getting Things Done\n\nProductivity methodology."), ("300-resources/Development/python.md", "# Python Resources\n\nPython development resources."), ("Clippings/article.md", "# Interesting Article\n\nClipped from web.") ] for file_path, content in sample_files: file_full_path = vault_root / file_path file_full_path.write_text(content, encoding='utf-8') return vault_root