from pathlib import Path
ROOT=Path(__file__).resolve().parents[1]
def read(x): return (ROOT/x).read_text(encoding='utf-8')
def test_v017_router_ui_version():
 m=read('app/main.py'); a=read('app/api/v017.py')
 assert 'v017_router' in m  and '/federated-query' in m
 for route in ['/jobs','/cancel','/page','/joins','/quotas','/usage']: assert route in a
 assert (ROOT/'app/static/federated-query.html').exists()
def test_v017_models_migration():
 e=read('app/models/entities.py'); s=read('migrations/017_federated_query_mesh.sql')
 for n in ['FederatedQueryJob','FederatedJoinDefinition','QueryQuota','QueryUsageLedger']: assert f'class {n}' in e
 for t in ['federated_query_jobs_v017','federated_join_definitions_v017','query_quotas_v017','query_usage_ledger_v017']: assert t in s
def test_v017_security_and_paging():
 s=read('app/services/federated_query.py')
 for token in ['enforce_quota','cancel_requested','cursor_for','decode_cursor','QueryUsageLedger','application_hash_join']: assert token in s
def test_v017_docs():
 for f in ['USER_GUIDE_V017.md','ADMIN_GUIDE_V017.md','HOMOLOGATION_V017.md']: assert (ROOT/f).exists()
