89 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
| import pytest
 | |
| from dynamic_preferences import types
 | |
| from dynamic_preferences.registries import global_preferences_registry
 | |
| from rest_framework import serializers
 | |
| 
 | |
| from funkwhale_api.common import preferences as common_preferences
 | |
| 
 | |
| 
 | |
| @pytest.fixture
 | |
| def string_list_pref(preferences):
 | |
|     @global_preferences_registry.register
 | |
|     class P(common_preferences.StringListPreference):
 | |
|         default = ["hello"]
 | |
|         section = "test"
 | |
|         name = "string_list"
 | |
| 
 | |
|     yield
 | |
|     del global_preferences_registry["test"]["string_list"]
 | |
| 
 | |
| 
 | |
| @pytest.mark.parametrize(
 | |
|     "input,output",
 | |
|     [
 | |
|         (["a", "b", "c"], "a,b,c"),
 | |
|         (["a", "c", "b"], "a,b,c"),
 | |
|         (("a", "c", "b"), "a,b,c"),
 | |
|         ([], None),
 | |
|     ],
 | |
| )
 | |
| def test_string_list_serializer_to_db(input, output):
 | |
|     common_preferences.StringListSerializer.to_db(input) == output
 | |
| 
 | |
| 
 | |
| @pytest.mark.parametrize(
 | |
|     "input,output", [("a,b,c", ["a", "b", "c"]), (None, []), ("", [])]
 | |
| )
 | |
| def test_string_list_serializer_to_python(input, output):
 | |
|     common_preferences.StringListSerializer.to_python(input) == output
 | |
| 
 | |
| 
 | |
| def test_string_list_pref_default(string_list_pref, preferences):
 | |
|     assert preferences["test__string_list"] == ["hello"]
 | |
| 
 | |
| 
 | |
| def test_string_list_pref_set(string_list_pref, preferences):
 | |
|     preferences["test__string_list"] = ["world", "hello"]
 | |
|     assert preferences["test__string_list"] == ["hello", "world"]
 | |
| 
 | |
| 
 | |
| class PreferenceDataSerializer(serializers.Serializer):
 | |
|     name = serializers.CharField()
 | |
|     optional = serializers.BooleanField(required=False)
 | |
| 
 | |
| 
 | |
| @pytest.fixture
 | |
| def serialized_preference(db):
 | |
|     @global_preferences_registry.register
 | |
|     class TestSerialized(common_preferences.SerializedPreference):
 | |
|         section = types.Section("test")
 | |
|         name = "serialized"
 | |
|         data_serializer_class = PreferenceDataSerializer
 | |
|         default = None
 | |
|         required = False
 | |
| 
 | |
|     yield
 | |
|     del global_preferences_registry["test"]["serialized"]
 | |
| 
 | |
| 
 | |
| @pytest.mark.parametrize(
 | |
|     "value", [{"name": "hello"}, {"name": "hello", "optional": True}]
 | |
| )
 | |
| def test_get_serialized_preference(value, preferences, serialized_preference):
 | |
|     pref_id = "test__serialized"
 | |
|     # default value
 | |
|     assert preferences[pref_id] is None
 | |
| 
 | |
|     preferences[pref_id] = value
 | |
|     assert preferences[pref_id] == value
 | |
| 
 | |
| 
 | |
| @pytest.mark.parametrize(
 | |
|     "value", [{"noop": "hello"}, {"name": "hello", "optional": None}, "noop"]
 | |
| )
 | |
| def test_get_serialized_preference_error(value, preferences, serialized_preference):
 | |
|     pref_id = "test__serialized"
 | |
| 
 | |
|     with pytest.raises(common_preferences.JSONSerializer.exception):
 | |
|         preferences[pref_id] = value
 |