SPB Git

spb/ai-atlas

Public
2.8 KB · 49 lines python
1import pytest23from aiatlas.connectors.research.arxiv import ArxivConnector, _arxiv_id, _split_names4from aiatlas.sdk.facts import Target5from tests.conftest import claims_of, extract_from_fixture, fixture_path678@pytest.fixture9def connector() -> ArxivConnector:10    return ArxivConnector({"atom_pages": 2})111213async def test_discover(connector):14    targets = await connector.discover(None)  # type: ignore[arg-type]15    assert [t.key for t in targets] == ["atom:0", "atom:1", "rss:cs.LG", "rss:cs.CL", "rss:cs.AI", "rss:cs.CV"]16    assert "start=200&max_results=200" in targets[1].url and connector.rate_per_min == 417    assert [t.key for t in await ArxivConnector().discover(None)] == ["rss:cs.LG", "rss:cs.CL", "rss:cs.AI", "rss:cs.CV"]   # Atom opt-in181920async def test_atom(connector):21    target = Target(url="https://export.arxiv.org/api/query?search_query=cat:cs.LG&start=0&max_results=200", doc_type="feed", key="atom:0")22    facts = await extract_from_fixture(connector, target, fixture_path("arxiv", "atom-page0.xml"), content_type="application/atom+xml")23    papers = [e for e in facts.entities if e.entity_type == "paper"]24    assert len(papers) == 200 and papers[0].identifiers == {"arxiv": "2609.11929"}       # version suffix stripped25    c = claims_of(facts, papers[0].name)26    assert c["primary_category"] == "cs.CV" and c["published_at"] == "2026-09-10T17:59:55+00:00"27    assert c["pdf_url"] == "https://arxiv.org/pdf/2609.11929" and c["authors"][0] == "Haiwen Diao" and c["abstract"].startswith("We launch SenseNova")28    assert c["comment"].startswith("Project page")29    authored = [r for r in facts.relations if r.predicate == "authored" and r.object is papers[0]]30    assert len(authored) == 3 and all(r.subject.entity_type == "researcher" for r in authored)31    assert not any(t.needs_llm for t in facts.targets) and facts.targets == []323334async def test_rss(connector):35    target = Target(url="https://rss.arxiv.org/rss/cs.LG", doc_type="feed", key="rss:cs.LG")36    facts = await extract_from_fixture(connector, target, fixture_path("arxiv", "rss-cs-lg.xml"), content_type="application/rss+xml")37    papers = [e for e in facts.entities if e.entity_type == "paper"]38    assert len(papers) >= 200 and papers[0].identifiers == {"arxiv": "2609.10559"}39    c = claims_of(facts, papers[0].name)40    assert c["authors"] == ["Wenzhe Jin", "Haina Tang"] and c["arxiv_announce_type"] == "new"41    assert c["abstract"].startswith("To address") and "Announce Type" not in c["abstract"]42    assert c["categories"] == ["cs.LG", "cs.CV"]434445def test_helpers():46    assert _arxiv_id("http://arxiv.org/abs/2609.11929v1") == "2609.11929"47    assert _arxiv_id("oai:arXiv.org:2609.10559v2") == "2609.10559"48    assert _split_names("Wenzhe Jin, Haina Tang and Someone Else") == ["Wenzhe Jin", "Haina Tang", "Someone Else"]49
Files · 0f064299de6124ef553ef1bf8a851ae63aeae373
Menu

Theme