Spaces:
Paused
Paused
| """ | |
| High-quality tests for browser_utils/thinking_normalizer.py (minimal mocking). | |
| Focus: Test real normalization logic with minimal mocks. | |
| Note: Some tests mock DEFAULT_THINKING_BUDGET and ENABLE_THINKING_BUDGET for predictability. | |
| """ | |
| from unittest.mock import patch | |
| def test_normalize_reasoning_effort_none_uses_default(): | |
| """ | |
| Test scenario: reasoning_effort is None, use default configuration | |
| Strategy: Mock configuration values, test default behavior | |
| """ | |
| from browser_utils.thinking_normalizer import normalize_reasoning_effort | |
| with ( | |
| patch("browser_utils.thinking_normalizer.ENABLE_THINKING_BUDGET", True), | |
| patch("browser_utils.thinking_normalizer.DEFAULT_THINKING_BUDGET", 10000), | |
| ): | |
| result = normalize_reasoning_effort(None) | |
| assert result.thinking_enabled is True | |
| assert result.budget_enabled is True | |
| assert result.budget_value == 10000 | |
| assert result.original_value is None | |
| def test_normalize_reasoning_effort_zero_disables(): | |
| """ | |
| Test scenario: reasoning_effort = 0 disables thinking mode | |
| Verify: thinking_enabled = False | |
| """ | |
| from browser_utils.thinking_normalizer import normalize_reasoning_effort | |
| result = normalize_reasoning_effort(0) | |
| assert result.thinking_enabled is False | |
| assert result.budget_enabled is False | |
| assert result.budget_value is None | |
| assert result.original_value == 0 | |
| def test_normalize_reasoning_effort_string_zero_disables(): | |
| """ | |
| Test scenario: reasoning_effort = "0" (string) disables thinking mode | |
| Verify: String "0" is also handled correctly | |
| """ | |
| from browser_utils.thinking_normalizer import normalize_reasoning_effort | |
| result = normalize_reasoning_effort("0") | |
| assert result.thinking_enabled is False | |
| assert result.budget_enabled is False | |
| assert result.budget_value is None | |
| assert result.original_value == "0" | |
| def test_normalize_reasoning_effort_none_string_no_budget(): | |
| """ | |
| Test scenario: reasoning_effort = "none" enables thinking, no budget limit | |
| Verify: thinking_enabled = True, budget_enabled = False | |
| """ | |
| from browser_utils.thinking_normalizer import normalize_reasoning_effort | |
| result = normalize_reasoning_effort("none") | |
| assert result.thinking_enabled is True | |
| assert result.budget_enabled is False | |
| assert result.budget_value is None | |
| assert result.original_value == "none" | |
| def test_normalize_reasoning_effort_minus_one_string_no_budget(): | |
| """ | |
| Test scenario: reasoning_effort = "-1" (string) enables thinking, no budget limit | |
| Verify: String "-1" is equivalent to "none" | |
| """ | |
| from browser_utils.thinking_normalizer import normalize_reasoning_effort | |
| result = normalize_reasoning_effort("-1") | |
| assert result.thinking_enabled is True | |
| assert result.budget_enabled is False | |
| assert result.budget_value is None | |
| assert result.original_value == "-1" | |
| def test_normalize_reasoning_effort_minus_one_int_no_budget(): | |
| """ | |
| Test scenario: reasoning_effort = -1 (integer) enables thinking, no budget limit | |
| Verify: Integer -1 is equivalent to "none" | |
| """ | |
| from browser_utils.thinking_normalizer import normalize_reasoning_effort | |
| result = normalize_reasoning_effort(-1) | |
| assert result.thinking_enabled is True | |
| assert result.budget_enabled is False | |
| assert result.budget_value is None | |
| assert result.original_value == -1 | |
| def test_normalize_reasoning_effort_preset_low(): | |
| """ | |
| Test scenario: reasoning_effort = "low" (preset value) | |
| Verify: thinking_enabled = True, budget_enabled = False (determined by _should_enable_from_raw) | |
| """ | |
| from browser_utils.thinking_normalizer import normalize_reasoning_effort | |
| result = normalize_reasoning_effort("low") | |
| assert result.thinking_enabled is True | |
| assert result.budget_enabled is False | |
| assert result.budget_value is None | |
| assert result.original_value == "low" | |
| def test_normalize_reasoning_effort_preset_medium(): | |
| """ | |
| Test scenario: reasoning_effort = "medium" (preset value) | |
| Verify: thinking_enabled = True, budget_enabled = False (determined by _should_enable_from_raw) | |
| """ | |
| from browser_utils.thinking_normalizer import normalize_reasoning_effort | |
| result = normalize_reasoning_effort("medium") | |
| assert result.thinking_enabled is True | |
| assert result.budget_enabled is False | |
| assert result.budget_value is None | |
| assert result.original_value == "medium" | |
| def test_normalize_reasoning_effort_preset_high(): | |
| """ | |
| Test scenario: reasoning_effort = "high" (preset value) | |
| Verify: thinking_enabled = True, budget_enabled = False (determined by _should_enable_from_raw) | |
| """ | |
| from browser_utils.thinking_normalizer import normalize_reasoning_effort | |
| result = normalize_reasoning_effort("high") | |
| assert result.thinking_enabled is True | |
| assert result.budget_enabled is False | |
| assert result.budget_value is None | |
| assert result.original_value == "high" | |
| def test_normalize_reasoning_effort_positive_integer(): | |
| """ | |
| Test scenario: reasoning_effort = 5000 (positive integer budget) | |
| Verify: Enable thinking and set specific budget value | |
| """ | |
| from browser_utils.thinking_normalizer import normalize_reasoning_effort | |
| result = normalize_reasoning_effort(5000) | |
| assert result.thinking_enabled is True | |
| assert result.budget_enabled is True | |
| assert result.budget_value == 5000 | |
| assert result.original_value == 5000 | |
| def test_normalize_reasoning_effort_string_number(): | |
| """ | |
| Test scenario: reasoning_effort = "8000" (string number) | |
| Verify: String number correctly parsed | |
| """ | |
| from browser_utils.thinking_normalizer import normalize_reasoning_effort | |
| result = normalize_reasoning_effort("8000") | |
| assert result.thinking_enabled is True | |
| assert result.budget_enabled is True | |
| assert result.budget_value == 8000 | |
| assert result.original_value == "8000" | |
| def test_normalize_reasoning_effort_invalid_string_uses_default(): | |
| """ | |
| Test scenario: reasoning_effort = "invalid" (invalid string) | |
| Verify: Use default configuration | |
| """ | |
| from browser_utils.thinking_normalizer import normalize_reasoning_effort | |
| with patch("browser_utils.thinking_normalizer.ENABLE_THINKING_BUDGET", False): | |
| result = normalize_reasoning_effort("invalid") | |
| assert result.thinking_enabled is False | |
| assert result.budget_enabled is False | |
| assert result.budget_value is None | |
| assert result.original_value == "invalid" | |
| def test_normalize_reasoning_effort_negative_number_uses_default(): | |
| """ | |
| Test scenario: reasoning_effort = -5 (negative number, not -1) | |
| Verify: Use default configuration | |
| """ | |
| from browser_utils.thinking_normalizer import normalize_reasoning_effort | |
| with ( | |
| patch("browser_utils.thinking_normalizer.ENABLE_THINKING_BUDGET", True), | |
| patch("browser_utils.thinking_normalizer.DEFAULT_THINKING_BUDGET", 10000), | |
| ): | |
| result = normalize_reasoning_effort(-5) | |
| assert result.thinking_enabled is True | |
| assert result.budget_enabled is True | |
| assert result.budget_value == 10000 | |
| assert result.original_value == -5 | |
| def test_normalize_reasoning_effort_case_insensitive(): | |
| """ | |
| Test scenario: reasoning_effort string is case-insensitive | |
| Verify: "NONE", "None", "none" are all correctly handled | |
| """ | |
| from browser_utils.thinking_normalizer import normalize_reasoning_effort | |
| for value in ["NONE", "None", "none"]: | |
| result = normalize_reasoning_effort(value) | |
| assert result.thinking_enabled is True | |
| assert result.budget_enabled is False | |
| assert result.original_value == value | |
| def test_parse_budget_value_positive_int(): | |
| """ | |
| Test scenario: _parse_budget_value parses positive integer | |
| Verify: Return original integer value | |
| """ | |
| from browser_utils.thinking_normalizer import _parse_budget_value | |
| assert _parse_budget_value(1000) == 1000 | |
| assert _parse_budget_value(5000) == 5000 | |
| assert _parse_budget_value(1) == 1 | |
| def test_parse_budget_value_zero_returns_none(): | |
| """ | |
| Test scenario: _parse_budget_value parses 0 | |
| Verify: 0 is not a valid budget, return None | |
| """ | |
| from browser_utils.thinking_normalizer import _parse_budget_value | |
| assert _parse_budget_value(0) is None | |
| def test_parse_budget_value_negative_returns_none(): | |
| """ | |
| Test scenario: _parse_budget_value parses negative number | |
| Verify: Negative number is not a valid budget, return None | |
| """ | |
| from browser_utils.thinking_normalizer import _parse_budget_value | |
| assert _parse_budget_value(-100) is None | |
| assert _parse_budget_value(-1) is None | |
| def test_parse_budget_value_string_number(): | |
| """ | |
| Test scenario: _parse_budget_value parses string number | |
| Verify: "1000" → 1000 | |
| """ | |
| from browser_utils.thinking_normalizer import _parse_budget_value | |
| assert _parse_budget_value("1000") == 1000 | |
| assert _parse_budget_value("5000") == 5000 | |
| def test_parse_budget_value_string_with_whitespace(): | |
| """ | |
| Test scenario: _parse_budget_value parses string with whitespace | |
| Verify: " 1000 " → 1000 (parse after trimming) | |
| """ | |
| from browser_utils.thinking_normalizer import _parse_budget_value | |
| assert _parse_budget_value(" 1000 ") == 1000 | |
| def test_parse_budget_value_invalid_string(): | |
| """ | |
| Test scenario: _parse_budget_value parses invalid string | |
| Verify: Return None | |
| """ | |
| from browser_utils.thinking_normalizer import _parse_budget_value | |
| assert _parse_budget_value("invalid") is None | |
| assert _parse_budget_value("abc123") is None | |
| assert _parse_budget_value("") is None | |
| def test_format_directive_log_disabled(): | |
| """ | |
| Test scenario: Format log (thinking mode disabled) | |
| Verify: Log contains "Disabling thinking mode" | |
| """ | |
| from browser_utils.thinking_normalizer import ( | |
| ThinkingDirective, | |
| format_directive_log, | |
| ) | |
| directive = ThinkingDirective( | |
| thinking_enabled=False, | |
| budget_enabled=False, | |
| budget_value=None, | |
| original_value=0, | |
| ) | |
| log = format_directive_log(directive) | |
| assert "disabled" in log.lower() | |
| assert "0" in log | |
| def test_format_directive_log_enabled_with_budget(): | |
| """ | |
| Test scenario: Format log (thinking mode enabled, with budget limit) | |
| Verify: Log contains budget value | |
| """ | |
| from browser_utils.thinking_normalizer import ( | |
| ThinkingDirective, | |
| format_directive_log, | |
| ) | |
| directive = ThinkingDirective( | |
| thinking_enabled=True, | |
| budget_enabled=True, | |
| budget_value=8000, | |
| original_value="medium", | |
| ) | |
| log = format_directive_log(directive) | |
| assert "budget" in log.lower() | |
| assert "8000" in log | |
| assert "medium" in log | |
| def test_format_directive_log_enabled_no_budget(): | |
| """ | |
| Test scenario: Format log (thinking mode enabled, no budget limit) | |
| Verify: Log contains "no budget limit" | |
| """ | |
| from browser_utils.thinking_normalizer import ( | |
| ThinkingDirective, | |
| format_directive_log, | |
| ) | |
| directive = ThinkingDirective( | |
| thinking_enabled=True, | |
| budget_enabled=False, | |
| budget_value=None, | |
| original_value="none", | |
| ) | |
| log = format_directive_log(directive) | |
| assert "unlimited" in log.lower() | |
| assert "none" in log.lower() | |