71 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			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
 |