| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- # -*- coding: utf-8 -*-
- import pytest
- from unittest.mock import patch, MagicMock
- from app.visa_free_config_fetchers.vfs_fetcher import _select_candidate_with_llm
- def test_select_candidate_with_llm():
- candidates = [
- {"code": "A", "name": "Option A"},
- {"code": "B", "name": "Option B"}
- ]
- prompt_context = "选择 Option B"
- mock_resp = MagicMock()
- mock_resp.status_code = 200
- mock_resp.json.return_value = {
- "choices": [
- {"message": {"content": "1"}}
- ]
- }
- with patch("curl_cffi.requests.post", return_value=mock_resp):
- selected = _select_candidate_with_llm(candidates, prompt_context)
- assert selected == {"code": "B", "name": "Option B"}
- from app.visa_free_config_fetchers.vfs_fetcher import VFSFetcher
- def test_fetch_external_vac_info_success():
- fetcher = VFSFetcher()
- mock_centers = [
- {
- "isoCode": "NTDB",
- "centerName": "Netherlands Visa Application Center - Dublin",
- "address": "130 Francis Street, Dublin"
- }
- ]
- mock_cats = [
- {
- "visaCategoryCode": "TA",
- "name": "Short Stay Visa"
- }
- ]
- mock_subcats = [
- {
- "subCategoryCode": "To",
- "subCategoryName": "Tourist"
- }
- ]
- def mock_get(url, **kwargs):
- resp = MagicMock()
- resp.status_code = 200
- if "master/center" in url:
- resp.json.return_value = mock_centers
- elif "master/visacategory" in url:
- resp.json.return_value = mock_cats
- elif "master/subvisacategory" in url:
- resp.json.return_value = mock_subcats
- else:
- resp.status_code = 404
- return resp
- with patch("curl_cffi.requests.get", side_effect=mock_get):
- res = fetcher.fetch_external_vac_info("ie", "nl", "tourist", "dub")
- assert res["vac_code"] == "NTDB"
- assert res["center_name"] == "Netherlands Visa Application Center - Dublin"
- assert res["category_code"] == "TA"
- assert res["subcategory_code"] == "To"
- def test_fetch_external_vac_info_hard_failure():
- fetcher = VFSFetcher()
- mock_resp = MagicMock()
- mock_resp.status_code = 500
- with patch("curl_cffi.requests.get", return_value=mock_resp):
- with pytest.raises(RuntimeError):
- fetcher.fetch_external_vac_info("ie", "nl", "tourist", "nonexistent")
- def test_fetch_free_config_fallback_to_external():
- fetcher = VFSFetcher()
- mock_ext = {
- "routing_key": "slot.test.nl.tourist",
- "vac_code": "TEST",
- "center_name": "Test Center",
- "address": "Test Address",
- "category_code": "CAT",
- "category_name": "Cat Name",
- "subcategory_code": "SUB",
- "subcategory_name": "Sub Name"
- }
- with patch.object(fetcher, "fetch_external_vac_info", return_value=mock_ext):
- config = fetcher.fetch_free_config("ie", "nl", "tourist", "unknown_vac_code")
- assert "slot.test.nl.tourist" in config["apt_configs"]
- assert config["apt_configs"]["slot.test.nl.tourist"]["vac_code"] == "TEST"
|