File size: 1,671 Bytes
9df97a2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import json
from pathlib import Path
from unittest.mock import patch

from fastapi import FastAPI
from fastapi.testclient import TestClient

from app.api.pipeline import router as pipeline_router

app = FastAPI()
app.include_router(pipeline_router)

client = TestClient(app)


def test_run_full_returns_decision_and_top_k():
    cv_path = Path('backend/uploads/txt/557dd1f18e7c4476996d4d8c808e2255_test1.txt')
    if not cv_path.exists():
        pytest.skip(f"CV sample not found: {cv_path}")

    job_payload = {
        'job_text': 'Python data science machine learning deep learning',
        'skills': ['python', 'machine learning'],
        'years_experience': 3,
        'top_k': 3,
    }

    with patch('app.services.matching_service.MatchingService.search_top_k_candidates', return_value=[
        {'rank': 1, 'index': 4, 'score': 0.9, 'file': 'backend/uploads/txt/160049e689fd42708e154cfa189c9c4d_cv.txt'},
        {'rank': 2, 'index': 2, 'score': 0.8, 'file': 'backend/uploads/txt/7505436675dc4cbbb9b64fa13c593136_cv.txt'},
    ]):
        response = client.post(
            '/api/pipeline/run-full',
            files={'cv': (cv_path.name, cv_path.read_bytes(), 'text/plain')},
            data={'job_json': json.dumps(job_payload)},
        )

    assert response.status_code == 200, response.text
    data = response.json()

    assert 'decision' in data
    assert 'top_k' in data
    assert 'results' in data['top_k']
    assert isinstance(data['top_k']['results'], list)
    assert len(data['top_k']['results']) == 2
    assert data['top_k']['results'][0]['rank'] == 1
    assert data['decision']['decision']['label'] in {'accept', 'review', 'reject'}