import pytest from django import forms from funkwhale_api.federation import webfinger def test_webfinger_clean_resource(): t, r = webfinger.clean_resource("acct:service@test.federation") assert t == "acct" assert r == "service@test.federation" @pytest.mark.parametrize( "resource,message", [ ("", "Invalid resource string"), ("service@test.com", "Missing webfinger resource type"), ("noop:service@test.com", "Invalid webfinger resource type"), ], ) def test_webfinger_clean_resource_errors(resource, message): with pytest.raises(forms.ValidationError) as excinfo: webfinger.clean_resource(resource) assert message == str(excinfo) def test_webfinger_clean_acct(settings): username, hostname = webfinger.clean_acct("library@test.federation") assert username == "library" assert hostname == "test.federation" @pytest.mark.parametrize( "resource,message", [ ("service", "Invalid format"), ("service@test.com", "Invalid hostname test.com"), ("noop@test.federation", "Invalid account"), ], ) def test_webfinger_clean_acct_errors(resource, message, settings): with pytest.raises(forms.ValidationError) as excinfo: webfinger.clean_resource(resource) assert message == str(excinfo) def test_webfinger_get_resource(r_mock): resource = "acct:test@test.webfinger" payload = { "subject": resource, "aliases": ["https://test.webfinger"], "links": [ { "rel": "self", "type": "application/activity+json", "href": "https://test.webfinger/user/test", } ], } r_mock.get( f"https://test.webfinger/.well-known/webfinger?resource={resource}", json=payload, ) data = webfinger.get_resource("acct:test@test.webfinger") assert data["actor_url"] == "https://test.webfinger/user/test" assert data["subject"] == resource