cg-engine / tests /test_engine.py
Godswill-IoT's picture
Upload 12 files
a70a668 verified
Raw
History Blame Contribute Delete
2.53 kB
import pytest
from app.services.career_engine import CareerGuidanceService
from app.services.graph_client import KnowledgeGraphClient
from app.contracts.dtos import MasteryLevel
@pytest.mark.asyncio
async def test_career_state_estimation():
# Setup
graph_client = KnowledgeGraphClient()
service = CareerGuidanceService(graph_client)
learner_id = "test_learner_123"
# Execution
readiness_reports = await service.estimate_career_state(learner_id)
# Verification
assert len(readiness_reports) > 0
# Current mock graph has 3 roles
assert len(readiness_reports) == 3
# Check logic for r1 (Data Scientist) - needs s1, s2, s3
# Learner has s1 (Competent), s2 (Novice)
# Missing s3
r1_report = next(r for r in readiness_reports if r.role_id == "r1")
assert r1_report.readiness_score < 1.0
assert len(r1_report.gaps) > 0
assert any(g.skill_id == "s3" for g in r1_report.gaps)
@pytest.mark.asyncio
async def test_path_generation():
graph_client = KnowledgeGraphClient()
service = CareerGuidanceService(graph_client)
learner_id = "test_learner_123"
paths = await service.generate_paths(learner_id, max_paths=2)
assert len(paths) <= 2
assert len(paths) > 0
first_path = paths[0]
assert first_path.target_role.role_id == "r1" # Mock sort puts r1 first/last depending on score, actually sort is desc score.
# checking logic:
# r1: 2/3 skills = 0.66
# r2: 1/1 skills = 1.0 (s2 is required, learner has s2) -> wait, s2 matches?
# learner has s1, s2. r2 needs s2. Matches = 1/1 = 1.0.
# r3: needs s1, s3, s4. Learner has s1. 1/3 = 0.33.
# So order should be r2, r1, r3.
# Let's verify the "best" path is indeed r2 (Data Analyst)
# The current mock implementation sort logic: sorted(readiness_reports, key=lambda x: x.readiness_score, reverse=True)
# Actually wait, r1 needs s1, s2, s3. Learner has s1, s2. So 2/3.
# r2 needs s2. Learner has s2. So 1/1.
assert paths[0].target_role.role_id == "r2"
assert paths[0].confidence_band == "high" # score 1.0 > 0.7
@pytest.mark.asyncio
async def test_activate_path():
graph_client = KnowledgeGraphClient()
service = CareerGuidanceService(graph_client)
learner_id = "test_learner_123"
contract = await service.activate_path(learner_id, "traj_123")
assert contract.learner_id == learner_id
assert contract.status == "active"