Skip to content
Snippets Groups Projects
test_nodeinfo.py 6.26 KiB
Newer Older
  • Learn to ignore specific revisions
  • import funkwhale_api
    from funkwhale_api.instance import nodeinfo
    
    Eliot Berriot's avatar
    Eliot Berriot committed
    from funkwhale_api.federation import actors
    
    from funkwhale_api.music import utils as music_utils
    
    
    
    def test_nodeinfo_dump(preferences, mocker):
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        preferences["instance__nodeinfo_stats_enabled"] = True
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        preferences["moderation__unauthenticated_report_types"] = [
            "takedown_request",
            "other",
            "other_category_that_doesnt_exist",
        ]
    
    
            "users": {"total": 1, "active_halfyear": 12, "active_month": 13},
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            "tracks": 2,
            "albums": 3,
            "artists": 4,
            "track_favorites": 5,
            "music_duration": 6,
            "listenings": 7,
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        mocker.patch("funkwhale_api.instance.stats.get", return_value=stats)
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            "version": "2.0",
            "software": {"name": "funkwhale", "version": funkwhale_api.__version__},
            "protocols": ["activitypub"],
            "services": {"inbound": [], "outbound": []},
            "openRegistrations": preferences["users__registration_enabled"],
    
            "usage": {"users": {"total": 1, "activeHalfyear": 12, "activeMonth": 13}},
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            "metadata": {
    
    Eliot Berriot's avatar
    Eliot Berriot committed
                "actorId": actors.get_service_actor().fid,
    
    Eliot Berriot's avatar
    Eliot Berriot committed
                "private": preferences["instance__nodeinfo_private"],
                "shortDescription": preferences["instance__short_description"],
                "longDescription": preferences["instance__long_description"],
                "nodeName": preferences["instance__name"],
    
                "terms": preferences["instance__terms"],
    
    Eliot Berriot's avatar
    Eliot Berriot committed
                "library": {
                    "federationEnabled": preferences["federation__enabled"],
                    "federationNeedsApproval": preferences[
                        "federation__music_needs_approval"
                    ],
    
                    "anonymousCanListen": not preferences[
    
    Eliot Berriot's avatar
    Eliot Berriot committed
                        "common__api_authentication_required"
                    ],
                    "tracks": {"total": stats["tracks"]},
                    "artists": {"total": stats["artists"]},
                    "albums": {"total": stats["albums"]},
                    "music": {"hours": stats["music_duration"]},
    
    Eliot Berriot's avatar
    Eliot Berriot committed
                "usage": {
                    "favorites": {"tracks": {"total": stats["track_favorites"]}},
                    "listenings": {"total": stats["listenings"]},
                },
    
                "supportedUploadExtensions": music_utils.SUPPORTED_EXTENSIONS,
    
                "allowList": {"enabled": False, "domains": None},
    
    Eliot Berriot's avatar
    Eliot Berriot committed
                "reportTypes": [
                    {
                        "type": "takedown_request",
                        "label": "Takedown request",
                        "anonymous": True,
                    },
                    {
                        "type": "invalid_metadata",
                        "label": "Invalid metadata",
                        "anonymous": False,
                    },
                    {
                        "type": "illegal_content",
                        "label": "Illegal content",
                        "anonymous": False,
                    },
                    {
                        "type": "offensive_content",
                        "label": "Offensive content",
                        "anonymous": False,
                    },
                    {"type": "other", "label": "Other", "anonymous": True},
                ],
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            },
    
        }
        assert nodeinfo.get() == expected
    
    
    def test_nodeinfo_dump_stats_disabled(preferences, mocker):
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        preferences["instance__nodeinfo_stats_enabled"] = False
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        preferences["moderation__unauthenticated_report_types"] = [
            "takedown_request",
            "other",
        ]
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            "version": "2.0",
            "software": {"name": "funkwhale", "version": funkwhale_api.__version__},
            "protocols": ["activitypub"],
            "services": {"inbound": [], "outbound": []},
            "openRegistrations": preferences["users__registration_enabled"],
    
            "usage": {"users": {"total": 0, "activeHalfyear": 0, "activeMonth": 0}},
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            "metadata": {
    
    Eliot Berriot's avatar
    Eliot Berriot committed
                "actorId": actors.get_service_actor().fid,
    
    Eliot Berriot's avatar
    Eliot Berriot committed
                "private": preferences["instance__nodeinfo_private"],
                "shortDescription": preferences["instance__short_description"],
                "longDescription": preferences["instance__long_description"],
                "nodeName": preferences["instance__name"],
    
                "terms": preferences["instance__terms"],
    
    Eliot Berriot's avatar
    Eliot Berriot committed
                "library": {
                    "federationEnabled": preferences["federation__enabled"],
                    "federationNeedsApproval": preferences[
                        "federation__music_needs_approval"
                    ],
    
                    "anonymousCanListen": not preferences[
    
    Eliot Berriot's avatar
    Eliot Berriot committed
                        "common__api_authentication_required"
                    ],
    
                "supportedUploadExtensions": music_utils.SUPPORTED_EXTENSIONS,
    
                "allowList": {"enabled": False, "domains": None},
    
    Eliot Berriot's avatar
    Eliot Berriot committed
                "reportTypes": [
                    {
                        "type": "takedown_request",
                        "label": "Takedown request",
                        "anonymous": True,
                    },
                    {
                        "type": "invalid_metadata",
                        "label": "Invalid metadata",
                        "anonymous": False,
                    },
                    {
                        "type": "illegal_content",
                        "label": "Illegal content",
                        "anonymous": False,
                    },
                    {
                        "type": "offensive_content",
                        "label": "Offensive content",
                        "anonymous": False,
                    },
                    {"type": "other", "label": "Other", "anonymous": True},
                ],
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            },
    
        }
        assert nodeinfo.get() == expected
    
    
    
    @pytest.mark.parametrize(
        "enabled, public, expected",
        [
            (True, True, {"enabled": True, "domains": ["allowed.example"]}),
            (True, False, {"enabled": True, "domains": None}),
            (False, False, {"enabled": False, "domains": None}),
        ],
    )
    def test_nodeinfo_allow_list_enabled(preferences, factories, enabled, public, expected):
        preferences["moderation__allow_list_enabled"] = enabled
        preferences["moderation__allow_list_public"] = public
        factories["federation.Domain"](name="allowed.example", allowed=True)
        factories["federation.Domain"](allowed=False)
        factories["federation.Domain"](allowed=None)
    
        assert nodeinfo.get()["metadata"]["allowList"] == expected