from integrations.ai_integration.ai_factory import AIGeneratorFactory, AIProvider from integrations.ai_integration.mock_ai_generator import MockAIGenerator from integrations.ai_integration.openai_generator import OpenAIGenerator from integrations.ai_integration.anthropic_generator import AnthropicGenerator from integrations.ai_integration.google_ai_generator import GoogleAIGenerator def test_factory_pattern(): """Test the AI generator factory pattern""" print("Testing AI Generator Factory Pattern...") # Test creating a mock generator print("\n1. Creating Mock AI Generator...") try: mock_generator = AIGeneratorFactory.create_generator(AIProvider.MOCK) print(f" [PASS] Successfully created: {type(mock_generator).__name__}") assert isinstance(mock_generator, MockAIGenerator) print(" [PASS] Correct type instantiated") except Exception as e: print(f" [FAIL] Failed to create mock generator: {e}") # Test creating an OpenAI generator print("\n2. Creating OpenAI Generator...") try: openai_generator = AIGeneratorFactory.create_generator(AIProvider.OPENAI) print(f" [PASS] Successfully created: {type(openai_generator).__name__}") assert isinstance(openai_generator, OpenAIGenerator) print(" [PASS] Correct type instantiated") except NotImplementedError as e: print(f" [PASS] OpenAI generator correctly raises NotImplementedError: {e}") except Exception as e: print(f" [FAIL] Unexpected error: {e}") # Test creating an Anthropic generator print("\n3. Creating Anthropic Generator...") try: anthropic_generator = AIGeneratorFactory.create_generator(AIProvider.ANTHROPIC) print(f" [PASS] Successfully created: {type(anthropic_generator).__name__}") assert isinstance(anthropic_generator, AnthropicGenerator) print(" [PASS] Correct type instantiated") except NotImplementedError as e: print(f" [PASS] Anthropic generator correctly raises NotImplementedError: {e}") except Exception as e: print(f" [FAIL] Unexpected error: {e}") # Test creating a Google AI generator print("\n4. Creating Google AI Generator...") try: google_generator = AIGeneratorFactory.create_generator(AIProvider.GOOGLE) print(f" [PASS] Successfully created: {type(google_generator).__name__}") assert isinstance(google_generator, GoogleAIGenerator) print(" [PASS] Correct type instantiated") except NotImplementedError as e: print(f" [PASS] Google AI generator correctly raises NotImplementedError: {e}") except Exception as e: print(f" [FAIL] Unexpected error: {e}") # Test getting available providers print("\n5. Getting available providers...") try: providers = AIGeneratorFactory.get_available_providers() print(f" Available providers: {[p.value for p in providers]}") expected_providers = [AIProvider.MOCK, AIProvider.OPENAI, AIProvider.ANTHROPIC, AIProvider.GOOGLE] assert len(providers) == len(expected_providers), f"Expected {len(expected_providers)} providers, got {len(providers)}" print(" [PASS] Correct number of providers returned") except Exception as e: print(f" [FAIL] Failed to get providers: {e}") # Test creating a generator with non-existent provider print("\n6. Testing non-existent provider...") try: fake_generator = AIGeneratorFactory.create_generator("FAKE_PROVIDER") print(" [FAIL] Should have raised an error for non-existent provider") except ValueError as e: print(f" [PASS] Correctly raised ValueError for non-existent provider: {e}") except Exception as e: print(f" [WARN] Raised unexpected error: {e}") print("\n[PASS] All factory pattern tests completed successfully!") def test_mock_generator_functionality(): """Test the mock generator's functionality""" print("\n\nTesting Mock Generator Functionality...") # Create a mock generator generator = AIGeneratorFactory.create_generator(AIProvider.MOCK) # Prepare job information job_info = { "title": "Senior Python Developer", "seniority": "senior", "description": "Looking for experienced Python developers familiar with Django, Flask, and cloud technologies", "skill_categories": ["python", "django", "flask", "sql", "cloud"] } # Generate questions try: questions = generator.generate_questions( title="Backend Development Skills Assessment", questions_types=["choose_one", "text_based"], additional_note="Focus on Django and cloud deployment", job_info=job_info ) print(f" Generated {len(questions)} questions successfully") assert len(questions) == 2, f"Expected 2 questions, got {len(questions)}" for i, q in enumerate(questions): print(f" Question {i+1}: {q.text[:50]}...") assert q.id, "Question should have an ID" assert q.text, "Question should have text" assert q.weight >= 1 and q.weight <= 5, f"Weight should be between 1-5, got {q.weight}" assert q.skill_categories, "Question should have skill categories" assert q.type.value in ["choose_one", "choose_many", "text_based"], f"Invalid question type: {q.type.value}" print(" [PASS] Mock generator functionality test passed") except Exception as e: print(f" [FAIL] Mock generator functionality test failed: {e}") if __name__ == "__main__": test_factory_pattern() test_mock_generator_functionality()