funkwhale/api/tests/federation/test_webfinger.py

71 wiersze
1.9 KiB
Python

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