From 78ab2b1607f6bb27319fe55bfeaac3a3125bf667 Mon Sep 17 00:00:00 2001 From: CleverThis Date: Tue, 28 Apr 2026 09:23:33 +0000 Subject: [PATCH] test(providers): add TDD failing test for GEMINI missing from FALLBACK_ORDER Adds a BDD scenario tagged @tdd_issue @tdd_issue_4750 @tdd_expected_fail that captures the bug: when only GEMINI_API_KEY is set (without GOOGLE_API_KEY), ProviderRegistry.get_default_provider_type() returns None instead of ProviderType.GEMINI because GEMINI is absent from FALLBACK_ORDER. The @tdd_expected_fail tag inverts the result so CI passes while the bug exists. Once the fix is applied, the tag must be removed. ISSUES CLOSED: #10896 --- .../tdd_gemini_fallback_order_4750_steps.py | 70 +++++++++++++++++++ .../tdd_gemini_fallback_order_4750.feature | 11 +++ 2 files changed, 81 insertions(+) create mode 100644 features/steps/tdd_gemini_fallback_order_4750_steps.py create mode 100644 features/tdd_gemini_fallback_order_4750.feature diff --git a/features/steps/tdd_gemini_fallback_order_4750_steps.py b/features/steps/tdd_gemini_fallback_order_4750_steps.py new file mode 100644 index 000000000..91c74fb44 --- /dev/null +++ b/features/steps/tdd_gemini_fallback_order_4750_steps.py @@ -0,0 +1,70 @@ +"""Step definitions for TDD test: ProviderType.GEMINI missing from FALLBACK_ORDER. + +Issue: #4750 — ProviderType.GEMINI missing from ProviderRegistry.FALLBACK_ORDER +TDD Issue: #10896 + +This test captures the bug: when only GEMINI_API_KEY is set (without GOOGLE_API_KEY), +get_default_provider_type() returns None instead of ProviderType.GEMINI because +GEMINI is absent from FALLBACK_ORDER. + +The @tdd_expected_fail tag inverts the result so CI passes while the bug exists. +Once the fix is applied (adding ProviderType.GEMINI to FALLBACK_ORDER), the +@tdd_expected_fail tag must be removed and the test must pass normally. +""" + +from __future__ import annotations + +import os +from typing import Any +from unittest.mock import MagicMock + +from behave import given, then, when # type: ignore[import-untyped] + +from cleveragents.providers.registry import ProviderRegistry, ProviderType + + +def _make_gemini_only_settings() -> Any: + """Return a fake Settings-like object with only gemini_api_key set.""" + settings = MagicMock() + settings.openai_api_key = None + settings.anthropic_api_key = None + settings.google_api_key = None + settings.gemini_api_key = "sk-gemini-test-key" + settings.azure_api_key = None + settings.openrouter_api_key = None + settings.cohere_api_key = None + settings.groq_api_key = None + settings.together_api_key = None + settings.default_provider = None + settings.default_model = None + settings.azure_openai_endpoint = None + settings.azure_openai_api_version = None + settings.azure_openai_deployment = None + settings.openrouter_organization = None + return settings + + +@given("a ProviderRegistry configured with only gemini_api_key set") +def step_tdd_registry_gemini_only(context: Any) -> None: + context.tdd_registry = ProviderRegistry(settings=_make_gemini_only_settings()) + + +@given("CLEVERAGENTS_DEFAULT_PROVIDER is not set for tdd test") +def step_tdd_unset_default_provider(context: Any) -> None: + context.original_provider_env = os.environ.get("CLEVERAGENTS_DEFAULT_PROVIDER") + os.environ.pop("CLEVERAGENTS_DEFAULT_PROVIDER", None) + + +@when("I call get_default_provider_type on the tdd registry") +def step_tdd_call_get_default_provider_type(context: Any) -> None: + context.tdd_result = context.tdd_registry.get_default_provider_type() + + +@then("the tdd result should be ProviderType.GEMINI") +def step_tdd_result_should_be_gemini(context: Any) -> None: + assert context.tdd_result == ProviderType.GEMINI, ( + f"Expected ProviderType.GEMINI but got {context.tdd_result!r}. " + f"Bug: ProviderType.GEMINI is missing from ProviderRegistry.FALLBACK_ORDER. " + f"When only GEMINI_API_KEY is set, get_default_provider_type() returns None " + f"instead of ProviderType.GEMINI." + ) diff --git a/features/tdd_gemini_fallback_order_4750.feature b/features/tdd_gemini_fallback_order_4750.feature new file mode 100644 index 000000000..882e2f08e --- /dev/null +++ b/features/tdd_gemini_fallback_order_4750.feature @@ -0,0 +1,11 @@ +Feature: TDD: ProviderType.GEMINI missing from ProviderRegistry.FALLBACK_ORDER + As a user who configures only GEMINI_API_KEY + I want get_default_provider_type() to return ProviderType.GEMINI via the fallback chain + So that Gemini-only users can use auto-discovery without setting GOOGLE_API_KEY + + @tdd_issue @tdd_issue_4750 @tdd_expected_fail + Scenario: Gemini-only user gets GEMINI as default provider via fallback order + Given a ProviderRegistry configured with only gemini_api_key set + And CLEVERAGENTS_DEFAULT_PROVIDER is not set for tdd test + When I call get_default_provider_type on the tdd registry + Then the tdd result should be ProviderType.GEMINI -- 2.52.0