from pathlib import Path from services.context_compressor import extract_request_spec, merge_request_spec, render_request_spec from services.region_registry import resolve_region from services.ocean_batch import parse_ocean_batch_request ROOT=Path(__file__).resolve().parents[1] def test_version(): assert (ROOT/"VERSION").read_text(encoding="utf-8").strip()=="4.6.15" def test_squid_center_uses_repository_membership(): js=(ROOT/"static"/"js"/"app.js").read_text(encoding="utf-8") api=(ROOT/"routes"/"datasets.py").read_text(encoding="utf-8") assert "repository_domains" in api assert "file_count_by_repository" in api assert "domains.includes(domain)" in js assert "squid_file_count" in js assert "实时仓库文件树口径" in js def test_single_ocean_export_forces_managed_proxy(): js=(ROOT/"static"/"js"/"app.js").read_text(encoding="utf-8") assert "data-ocean-managed-download" in js assert "downloadWithProgress(urls[0],name" in js assert "浏览器不直接访问学校/ngrok" in js def test_followup_depth_layer_context(): base=merge_request_spec(None,"查询2002年8月西北太平洋 SST,导出 CSV",revision=False) updated=merge_request_spec(base,"其中200米层的",revision=True) assert updated.get("depth") rendered=render_request_spec(updated) assert "200" in rendered assert "SST" in rendered or "sst" in rendered.lower() assert "2002" in rendered assert "西北太平洋" in rendered def test_layer_is_structured(): p=extract_request_spec("还是这个区域,第5层,换成SSH") assert p["layer"]=="5" assert "zos" in p["variables"] def test_region_is_deterministic(): a=resolve_region("查询西太平洋 SST") b=resolve_region("再查询一次西太平洋 SSH") assert a==b assert a["bbox"]=={"lon_min":120.0,"lon_max":180.0,"lat_min":-30.0,"lat_max":30.0} def test_explicit_bbox_overrides_registry(): x=resolve_region("西太平洋 130°E-140°E 20°N-30°N") assert x["source"]=="explicit_coordinates" assert x["bbox"]["lon_min"]==130.0 def test_batch_uses_registry(): p=parse_ocean_batch_request("查询2002年8月西北太平洋 SST 并导出 CSV") assert p is not None assert p["region_name"]=="西北太平洋" assert p["bbox"]["lat_max"]==60.0 def test_multitask_parser_accepts_task_colon_and_isolates_context(): js=(ROOT/"static"/"js"/"app.js").read_text(encoding="utf-8") assert "任务\\s*)?(\\d+)" in js assert "[MULTITASK_CHILD]" in js assert "[TARGET_CHILD_TASK]" in js assert "history:[]" in js assert "data-parallel-active" in js assert "runParallelChild(task,i,board,originalPrompt)" in js