diff --git a/loko/common/tests.py b/loko/common/tests.py index e6957e9..f0ab794 100644 --- a/loko/common/tests.py +++ b/loko/common/tests.py @@ -290,6 +290,40 @@ class AssetsIndexPreferencesTests(TestCase): self.assertFalse(response.context["has_url_thematics"]) 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): diff --git a/loko/common/views.py b/loko/common/views.py index b9e49f6..1683737 100644 --- a/loko/common/views.py +++ b/loko/common/views.py @@ -674,7 +674,7 @@ def save_assets_index_preferences(request): return JsonResponse({'error': _('Format de filtres thématiques invalide')}, status=400) if visible_columns is not None and not isinstance(visible_columns, list): 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) if not isinstance(status_filters, list): 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) 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_visible_columns = existing_prefs.get('visible_columns', []) if isinstance(existing_prefs, dict) else [] if not isinstance(existing_visible_columns, list): @@ -825,9 +825,9 @@ def set_language(request): response = django_set_language(request) if request.user.is_authenticated and request.method == 'POST': 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: - 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: config.preferred_language = lang_code config.save(update_fields=['preferred_language'])