63 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
import pytest
 | 
						|
 | 
						|
from funkwhale_api.moderation import mrf, mrf_policies
 | 
						|
 | 
						|
 | 
						|
@pytest.mark.parametrize(
 | 
						|
    "enabled, payload, kwargs, allowed_domains, expected",
 | 
						|
    [
 | 
						|
        # allow listing enabled, domain on allowed list -> nothing happens
 | 
						|
        (
 | 
						|
            True,
 | 
						|
            {"id": "http://allowed.example"},
 | 
						|
            {"sender_id": "http://allowed.example/actor"},
 | 
						|
            ["allowed.example"],
 | 
						|
            None,
 | 
						|
        ),
 | 
						|
        # allow listing enabled, domain NOT on allowed list -> message discarded
 | 
						|
        (
 | 
						|
            True,
 | 
						|
            {"id": "http://notallowed.example"},
 | 
						|
            {"sender_id": "http://notallowed.example/actor"},
 | 
						|
            ["allowed.example"],
 | 
						|
            mrf.Discard,
 | 
						|
        ),
 | 
						|
        # allow listing disabled -> policy skipped
 | 
						|
        (
 | 
						|
            False,
 | 
						|
            {"id": "http://allowed.example"},
 | 
						|
            {"sender_id": "http://allowed.example/actor"},
 | 
						|
            [],
 | 
						|
            mrf.Skip,
 | 
						|
        ),
 | 
						|
        # multiple domains to check, one is not allowed -> message discarded
 | 
						|
        (
 | 
						|
            True,
 | 
						|
            {"id": "http://allowed.example"},
 | 
						|
            {"sender_id": "http://notallowed.example/actor"},
 | 
						|
            ["allowed.example"],
 | 
						|
            mrf.Discard,
 | 
						|
        ),
 | 
						|
        # multiple domains to check, all allowed -> nothing happens
 | 
						|
        (
 | 
						|
            True,
 | 
						|
            {"id": "http://allowed.example"},
 | 
						|
            {"sender_id": "http://anotherallowed.example/actor"},
 | 
						|
            ["allowed.example", "anotherallowed.example"],
 | 
						|
            None,
 | 
						|
        ),
 | 
						|
    ],
 | 
						|
)
 | 
						|
def test_allow_list_policy(
 | 
						|
    enabled, payload, kwargs, expected, allowed_domains, preferences, factories
 | 
						|
):
 | 
						|
    preferences["moderation__allow_list_enabled"] = enabled
 | 
						|
    for d in allowed_domains:
 | 
						|
        factories["federation.Domain"](name=d, allowed=True)
 | 
						|
 | 
						|
    if expected:
 | 
						|
        with pytest.raises(expected):
 | 
						|
            mrf_policies.check_allow_list(payload, **kwargs)
 | 
						|
    else:
 | 
						|
        assert mrf_policies.check_allow_list(payload, **kwargs) == expected
 |