Skip to content
Snippets Groups Projects
test_api.py 2.6 KiB
Newer Older
  • Learn to ignore specific revisions
  • Eliot Berriot's avatar
    Eliot Berriot committed
    import aiohttp
    import marshmallow
    import pytest
    
    from funkwhale_cli import api
    
    
    async def test_fetch_nodeinfo(session, responses):
        domain = "test.domain"
        well_known_payload = {
            "links": [
                {
                    "rel": "http://nodeinfo.diaspora.software/ns/schema/2.0",
                    "href": "https://test.domain/nodeinfo/2.0/",
                }
            ]
        }
        payload = {"hello": "world"}
        responses.get(
            "https://test.domain/.well-known/nodeinfo", payload=well_known_payload
        )
        responses.get("https://test.domain/nodeinfo/2.0/", payload=payload)
        result = await api.fetch_nodeinfo(session, domain)
        assert result == payload
    
    
    def test_clean_nodeinfo():
        payload = {
            "version": "2.0",
            "software": {"name": "funkwhale", "version": "0.18-dev+git.b575999e"},
            "openRegistrations": False,
            "usage": {"users": {"total": 78, "activeHalfyear": 42, "activeMonth": 23}},
            "metadata": {
                "private": False,
                "nodeName": "Test Domain",
                "library": {
                    "federationEnabled": True,
                    "federationNeedsApproval": True,
                    "anonymousCanListen": True,
                    "tracks": {"total": 98552},
                    "artists": {"total": 9831},
                    "albums": {"total": 10872},
                    "music": {"hours": 7650.678055555555},
                },
                "usage": {
                    "favorites": {"tracks": {"total": 1683}},
                    "listenings": {"total": 50294},
                },
            },
        }
        expected = {
            "software": {
                "name": "funkwhale",
                "version": {
                    "major": 0,
                    "minor": 18,
                    "patch": 0,
                    "prerelease": "dev",
                    "build": "git.b575999e",
                },
            },
            "openRegistrations": False,
            "usage": {"users": {"total": 78, "activeHalfyear": 42, "activeMonth": 23}},
            "metadata": {
                "private": False,
                "nodeName": "Test Domain",
                "library": {
                    "federationEnabled": True,
                    "anonymousCanListen": True,
                    "tracks": {"total": 98552},
                    "artists": {"total": 9831},
                    "albums": {"total": 10872},
                    "music": {"hours": 7650},
                },
                "usage": {"listenings": {"total": 50294}},
            },
        }
        result = api.clean_nodeinfo(payload)
        assert result == expected
    
    
    def test_clean_nodeinfo_raises_on_validation_failure():
        payload = {}
        with pytest.raises(marshmallow.ValidationError):
            api.clean_nodeinfo({})