61 lines
2.1 KiB
Python
61 lines
2.1 KiB
Python
import asyncio
|
|
import json
|
|
from ipaddress import IPv4Network
|
|
from typing import TYPE_CHECKING
|
|
|
|
import e.discord as discord_module
|
|
from e.discord import DiscordIPs
|
|
from e.discord import Service
|
|
|
|
if TYPE_CHECKING:
|
|
import pytest
|
|
import wreq
|
|
|
|
SAMPLE_PAYLOAD: dict[str, str | list[dict[str, str | list[str]]]] = {
|
|
"creationTime": "2026-08-04T18:01:19Z",
|
|
"syncToken": "4ce19406",
|
|
"notes": "discord egress",
|
|
"prefixes": [
|
|
{"ipv4Prefix": "104.196.222.45/32", "services": ["media"]},
|
|
{"ipv4Prefix": "34.138.218.50/32", "services": ["api"]},
|
|
],
|
|
}
|
|
|
|
|
|
def test_discord_ips_model_validate_json_parses_aliases() -> None:
|
|
"""Test that DiscordIPs.model_validate_json parses aliases."""
|
|
parsed: DiscordIPs = DiscordIPs.model_validate_json(json.dumps(SAMPLE_PAYLOAD))
|
|
|
|
assert parsed.creation_time.isoformat() == "2026-08-04T18:01:19+00:00"
|
|
assert parsed.sync_token == "4ce19406"
|
|
assert parsed.notes == "discord egress"
|
|
assert parsed.prefixes[0].ipv4_prefix == IPv4Network("104.196.222.45/32")
|
|
assert parsed.prefixes[0].services == [Service.MEDIA]
|
|
assert parsed.prefixes[1].services == [Service.API]
|
|
|
|
|
|
def test_get_discord_ips_fetches_and_validates_payload(monkeypatch: pytest.MonkeyPatch) -> None:
|
|
"""Test that get_discord_ips fetches the payload and validates it."""
|
|
|
|
class FakeResponse:
|
|
async def text(self) -> str:
|
|
return json.dumps(SAMPLE_PAYLOAD)
|
|
|
|
class FakeClient:
|
|
def __init__(self, *, emulation: wreq.Emulation) -> None:
|
|
assert emulation == discord_module.Emulation.Chrome149
|
|
|
|
async def get(self, url: str) -> FakeResponse:
|
|
assert url == "https://cdn.discordapp.com/ipranges/discord.json"
|
|
return FakeResponse()
|
|
|
|
monkeypatch.setattr(discord_module, "Client", FakeClient)
|
|
|
|
parsed: DiscordIPs = asyncio.run(discord_module.get_discord_ips())
|
|
|
|
assert isinstance(parsed, DiscordIPs)
|
|
assert parsed.notes == "discord egress"
|
|
assert [prefix.ipv4_prefix for prefix in parsed.prefixes] == [
|
|
IPv4Network("104.196.222.45/32"),
|
|
IPv4Network("34.138.218.50/32"),
|
|
]
|