File size: 2,672 Bytes
4e9b744
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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

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"]