import pytest import os from app.grabber.github_grabber import GitHubGrabber from app.models.source import SourceConfig, SourceType class TestGrabberIntegration: @pytest.mark.asyncio async def test_extract_from_fixture_http(self): fixture_path = os.path.join( os.path.dirname(__file__), "../fixtures/github_raw_http.txt" ) with open(fixture_path, "r") as f: content = f.read() grabber = GitHubGrabber() proxies = await grabber.parse_content(content, SourceType.GITHUB_RAW) assert len(proxies) >= 4 assert all(p.protocol == "http" for p in proxies) assert all(1 <= p.port <= 65535 for p in proxies) @pytest.mark.asyncio async def test_extract_from_fixture_mixed(self): fixture_path = os.path.join( os.path.dirname(__file__), "../fixtures/github_raw_mixed.txt" ) with open(fixture_path, "r") as f: content = f.read() grabber = GitHubGrabber() proxies = await grabber.parse_content(content, SourceType.GENERIC_TEXT) protocols = {p.protocol for p in proxies} assert "http" in protocols assert len(proxies) >= 3 @pytest.mark.asyncio async def test_base64_subscription_fixture(self): fixture_path = os.path.join( os.path.dirname(__file__), "../fixtures/subscription_vmess.txt" ) with open(fixture_path, "r") as f: content = f.read().strip() grabber = GitHubGrabber() proxies = await grabber.parse_content(content, SourceType.SUBSCRIPTION_BASE64) assert len(proxies) >= 1 @pytest.mark.integration @pytest.mark.asyncio async def test_real_github_url_skip(self): pytest.skip("Real URL test - run with: pytest -m integration")