import pytest from src.services.search_service import SearchService class TestSearchService: def setup_method(self): self.service = SearchService() def test_detect_job_type(self): assert self.service._detect_job_type("Cherche Senior Data Scientist NLP") == "DATA_SCIENTIST" assert self.service._detect_job_type("Offre Data Analyst PowerBI") == "DATA_ANALYST" assert self.service._detect_job_type("Besoin d'un ML Engineer pour la prod") == "DATA_ENGINEER" assert self.service._detect_job_type("Développeur Python Backend") == "GENERAL_TECH" def test_extract_action_verbs_found(self): text = "J'ai pu optimiser les performances et déployer le modèle en production." verbs = self.service._extract_action_verbs(text, self.service.VERB_MAPPINGS["DATA_ENGINEER"]) assert "optimiser" in verbs assert "déployer" in verbs assert len(verbs) >= 2 def test_extract_action_verbs_analyst(self): text = "J'ai réalisé des visualisations et présenté des insights." verbs = self.service._extract_action_verbs(text, self.service.VERB_MAPPINGS["DATA_ANALYST"]) assert "visualiser" in verbs or "présenter" in verbs def test_extract_action_verbs_none(self): text = "J'ai fait de la gestion de projet et de la rédaction." verbs = self.service._extract_action_verbs(text, self.service.VERB_MAPPINGS["DATA_ENGINEER"]) assert len(verbs) == 0 def test_detect_reconversion_true(self): cv_text = "Après un bootcamp intensif en Data Science, je cherche..." job_desc = "Cherche Data Scientist junior." is_reconversion, reason = self.service._detect_reconversion(cv_text, job_desc) assert is_reconversion is True assert "bootcamp" in reason def test_detect_reconversion_false(self): cv_text = "Ingénieur diplomé avec 5 ans d'expérience." job_desc = "Cherche Senior Dev." is_reconversion, reason = self.service._detect_reconversion(cv_text, job_desc) assert is_reconversion is False assert "Parcours classique" in reason def test_analyze_gap_structure(self): cv_text = "Développeur Python avec expérience en optimiser et monitorer." job_desc = "Cherche expert Python pour optimiser le backend." result = self.service.analyze_gap(cv_text, job_desc) assert "semantic_score" in result assert "production_mindset_score" in result assert "is_reconversion" in result assert "production_verbs_found" in result assert "optimiser" in result["production_verbs_found"]