"""Tests for followup_research models."""

from local_deep_research.followup_research.models import FollowUpRequest


class TestFollowUpRequest:
    """Tests for FollowUpRequest dataclass."""

    def test_create_with_required_fields(self):
        """Create request with only required fields."""
        request = FollowUpRequest(
            parent_research_id="parent-123",
            question="What is the follow-up question?",
        )

        assert request.parent_research_id == "parent-123"
        assert request.question == "What is the follow-up question?"
        assert request.strategy == "source-based"  # Default
        assert request.max_iterations == 1  # Default
        assert request.questions_per_iteration == 3  # Default

    def test_create_with_all_fields(self):
        """Create request with all fields specified."""
        request = FollowUpRequest(
            parent_research_id="parent-456",
            question="Custom question",
            strategy="iterative",
            max_iterations=5,
            questions_per_iteration=10,
        )

        assert request.parent_research_id == "parent-456"
        assert request.question == "Custom question"
        assert request.strategy == "iterative"
        assert request.max_iterations == 5
        assert request.questions_per_iteration == 10

    def test_to_dict(self):
        """to_dict returns dictionary with all fields."""
        request = FollowUpRequest(
            parent_research_id="parent-789",
            question="Test question",
            strategy="enhanced",
            max_iterations=2,
            questions_per_iteration=5,
        )

        result = request.to_dict()

        assert isinstance(result, dict)
        assert result["parent_research_id"] == "parent-789"
        assert result["question"] == "Test question"
        assert result["strategy"] == "enhanced"
        assert result["max_iterations"] == 2
        assert result["questions_per_iteration"] == 5

    def test_to_dict_with_defaults(self):
        """to_dict includes default values."""
        request = FollowUpRequest(
            parent_research_id="parent-abc",
            question="Question with defaults",
        )

        result = request.to_dict()

        assert result["strategy"] == "source-based"
        assert result["max_iterations"] == 1
        assert result["questions_per_iteration"] == 3

    def test_empty_question(self):
        """Create request with empty question (edge case)."""
        request = FollowUpRequest(
            parent_research_id="parent-123",
            question="",
        )

        assert request.question == ""
