File size: 5,776 Bytes
358dfff
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
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()