import re from django.conf import settings from django.test import TestCase from localized_fields.value import LocalizedValue from localized_fields.widgets import LocalizedFieldWidget class LocalizedFieldWidgetTestCase(TestCase): """Tests the workings of the :see:LocalizedFieldWidget class.""" @staticmethod def test_widget_creation(): """Tests whether a widget is created for every language correctly.""" widget = LocalizedFieldWidget() assert len(widget.widgets) == len(settings.LANGUAGES) assert len(set(widget.widgets)) == len(widget.widgets) @staticmethod def test_decompress(): """Tests whether a :see:LocalizedValue instance can correctly be "decompressed" over the available widgets.""" localized_value = LocalizedValue() for lang_code, lang_name in settings.LANGUAGES: localized_value.set(lang_code, lang_name) widget = LocalizedFieldWidget() decompressed_values = widget.decompress(localized_value) for (lang_code, _), value in zip( settings.LANGUAGES, decompressed_values ): assert localized_value.get(lang_code) == value @staticmethod def test_decompress_none(): """Tests whether the :see:LocalizedFieldWidget correctly handles :see:None.""" widget = LocalizedFieldWidget() decompressed_values = widget.decompress(None) for _, value in zip(settings.LANGUAGES, decompressed_values): assert not value @staticmethod def test_get_context_required(): """Tests whether the :see:get_context correctly handles 'required' attribute, separately for each subwidget.""" widget = LocalizedFieldWidget() widget.widgets[0].is_required = True widget.widgets[1].is_required = False context = widget.get_context( name="test", value=LocalizedValue(), attrs=dict(required=True) ) assert context["widget"]["subwidgets"][0]["attrs"]["required"] assert "required" not in context["widget"]["subwidgets"][1]["attrs"] @staticmethod def test_get_context_langs(): """Tests whether the :see:get_context contains 'lang_code' and 'lang_name' attribute for each subwidget.""" widget = LocalizedFieldWidget() context = widget.get_context( name="test", value=LocalizedValue(), attrs=dict() ) subwidgets_context = context["widget"]["subwidgets"] for widget, context in zip(widget.widgets, subwidgets_context): assert "lang_code" in context assert "lang_name" in context assert widget.lang_code == context["lang_code"] assert widget.lang_name == context["lang_name"] @staticmethod def test_render(): """Tests whether the :see:LocalizedFieldWidget correctly render.""" widget = LocalizedFieldWidget() output = widget.render(name="title", value=None) assert bool(re.search(r"