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'}
|