fix(common): support list type_filter and fix translation function shadowing in assets preferences

This commit is contained in:
kdeterme 2026-10-05 18:22:47 +02:00
parent 288921b4aa
commit 384a2b29c3
2 changed files with 38 additions and 4 deletions

View file

@ -290,6 +290,40 @@ class AssetsIndexPreferencesTests(TestCase):
self.assertFalse(response.context["has_url_thematics"]) self.assertFalse(response.context["has_url_thematics"])
self.assertEqual(response.context["selected_thematics"], ["sign", "roads"]) self.assertEqual(response.context["selected_thematics"], ["sign", "roads"])
def test_save_assets_index_preferences_with_type_filter_list(self):
self.client.force_login(self.superuser)
save_url = reverse("common:save_assets_index_preferences")
payload = {
"thematics": ["sign"],
"categories": [],
"models": [],
"conditional_filters": {},
"type_filter": ["assets", "locations", "management_zones"],
"status_filters": [],
"validation_status_filters": [],
"include_no_geom": True,
}
response = self.client.post(save_url, json.dumps(payload), content_type="application/json")
self.assertEqual(response.status_code, 200)
self.assertTrue(response.json().get("success"))
from common.models import UserConfig
config = UserConfig.objects.get(user=self.superuser)
self.assertEqual(
config.assets_index_preferences.get("type_filter"),
["assets", "locations", "management_zones"]
)
def test_save_assets_index_preferences_invalid_type_filter_returns_400(self):
self.client.force_login(self.superuser)
save_url = reverse("common:save_assets_index_preferences")
payload = {
"type_filter": 12345,
}
response = self.client.post(save_url, json.dumps(payload), content_type="application/json")
self.assertEqual(response.status_code, 400)
self.assertIn("error", response.json())
class UserConfigCopyTests(TestCase): class UserConfigCopyTests(TestCase):

View file

@ -674,7 +674,7 @@ def save_assets_index_preferences(request):
return JsonResponse({'error': _('Format de filtres thématiques invalide')}, status=400) return JsonResponse({'error': _('Format de filtres thématiques invalide')}, status=400)
if visible_columns is not None and not isinstance(visible_columns, list): if visible_columns is not None and not isinstance(visible_columns, list):
return JsonResponse({'error': _('Format de colonnes visibles invalide')}, status=400) return JsonResponse({'error': _('Format de colonnes visibles invalide')}, status=400)
if not isinstance(type_filter, str): if not (isinstance(type_filter, str) or (isinstance(type_filter, list) and all(isinstance(x, str) for x in type_filter))):
return JsonResponse({'error': _('Format de filtre type invalide')}, status=400) return JsonResponse({'error': _('Format de filtre type invalide')}, status=400)
if not isinstance(status_filters, list): if not isinstance(status_filters, list):
return JsonResponse({'error': _('Format de filtres statut invalide')}, status=400) return JsonResponse({'error': _('Format de filtres statut invalide')}, status=400)
@ -682,7 +682,7 @@ def save_assets_index_preferences(request):
return JsonResponse({'error': _('Format de filtres statut de validation invalide')}, status=400) return JsonResponse({'error': _('Format de filtres statut de validation invalide')}, status=400)
try: try:
user_config, _ = UserConfig.objects.get_or_create(user=request.user) user_config, _created = UserConfig.objects.get_or_create(user=request.user)
existing_prefs = user_config.assets_index_preferences or {} existing_prefs = user_config.assets_index_preferences or {}
existing_visible_columns = existing_prefs.get('visible_columns', []) if isinstance(existing_prefs, dict) else [] existing_visible_columns = existing_prefs.get('visible_columns', []) if isinstance(existing_prefs, dict) else []
if not isinstance(existing_visible_columns, list): if not isinstance(existing_visible_columns, list):
@ -825,9 +825,9 @@ def set_language(request):
response = django_set_language(request) response = django_set_language(request)
if request.user.is_authenticated and request.method == 'POST': if request.user.is_authenticated and request.method == 'POST':
lang_code = request.POST.get('language') lang_code = request.POST.get('language')
valid_langs = [code for code, _ in getattr(settings, 'LANGUAGES', [('fr', 'Français'), ('nl', 'Nederlands'), ('en', 'English')])] valid_langs = [code for code, _lang_name in getattr(settings, 'LANGUAGES', [('fr', 'Français'), ('nl', 'Nederlands'), ('en', 'English')])]
if lang_code and lang_code in valid_langs: if lang_code and lang_code in valid_langs:
config, _ = UserConfig.objects.get_or_create(user=request.user) config, _created = UserConfig.objects.get_or_create(user=request.user)
if config.preferred_language != lang_code: if config.preferred_language != lang_code:
config.preferred_language = lang_code config.preferred_language = lang_code
config.save(update_fields=['preferred_language']) config.save(update_fields=['preferred_language'])