def test_rendering_boolean_field(self): from rest_framework.renderers import HTMLFormRenderer class ExampleSerializer(serializers.Serializer): bool_field = serializers.BooleanField( style={ 'base_template': 'checkbox.html', 'template_pack': 'rest_framework/vertical' }) serializer = ExampleSerializer(data={'bool_field': True}) assert serializer.is_valid() renderer = HTMLFormRenderer() rendered = renderer.render_field(serializer['bool_field'], {}) expected_packed = ( '<divclass="form-group">' '<divclass="checkbox">' '<label>' '<inputtype="checkbox"name="bool_field"value="true"checked>' 'Boolfield' '</label>' '</div>' '</div>') rendered_packed = ''.join(rendered.split()) assert rendered_packed == expected_packed
def test_rendering_nested_fields_with_not_mappable_value(self): from rest_framework.renderers import HTMLFormRenderer class Nested(serializers.Serializer): text_field = serializers.CharField() class ExampleSerializer(serializers.Serializer): nested = Nested() serializer = ExampleSerializer(data={'nested': 1}) assert not serializer.is_valid() renderer = HTMLFormRenderer() for field in serializer: rendered = renderer.render_field(field, {}) expected_packed = ( '<fieldset>' '<legend>Nested</legend>' '<divclass="form-group">' '<label>Textfield</label>' '<inputname="nested.text_field"class="form-control"type="text"value="">' '</div>' '</fieldset>') rendered_packed = ''.join(rendered.split()) assert rendered_packed == expected_packed
def render_field(field): """ Render a API serializer field as a form element. This is an alternative implementation of `rest_framework`'s `render_field` that does not require the `style` parameter. """ renderer = HTMLFormRenderer() return renderer.render_field(field, {})
def test_hidden_field_rendering(self): class TestSerializer(serializers.Serializer): published = serializers.HiddenField(default=True) serializer = TestSerializer(data={}) serializer.is_valid() renderer = HTMLFormRenderer() field = serializer['published'] rendered = renderer.render_field(field, {}) assert rendered == ''
def test_rendering_nested_fields_with_none_value(self): from rest_framework.renderers import HTMLFormRenderer class Nested1(serializers.Serializer): text_field = serializers.CharField() class Nested2(serializers.Serializer): nested1 = Nested1(allow_null=True) text_field = serializers.CharField() class ExampleSerializer(serializers.Serializer): nested2 = Nested2() serializer = ExampleSerializer( data={'nested2': { 'nested1': None, 'text_field': 'test' }}) assert serializer.is_valid() renderer = HTMLFormRenderer() for field in serializer: rendered = renderer.render_field(field, {}) expected_packed = ( '<fieldset>' '<legend>Nested2</legend>' '<fieldset>' '<legend>Nested1</legend>' '<divclass="form-group">' '<label>Textfield</label>' '<inputname="nested2.nested1.text_field"class="form-control"type="text">' '</div>' '</fieldset>' '<divclass="form-group">' '<label>Textfield</label>' '<inputname="nested2.text_field"class="form-control"type="text"value="test">' '</div>' '</fieldset>') rendered_packed = ''.join(rendered.split()) assert rendered_packed == expected_packed
def test_rendering_boolean_field(self): from rest_framework.renderers import HTMLFormRenderer class ExampleSerializer(serializers.Serializer): bool_field = serializers.BooleanField( style={'base_template': 'checkbox.html', 'template_pack': 'rest_framework/vertical'}) serializer = ExampleSerializer(data={'bool_field': True}) assert serializer.is_valid() renderer = HTMLFormRenderer() rendered = renderer.render_field(serializer['bool_field'], {}) expected_packed = ( '<divclass="form-group">' '<divclass="checkbox">' '<label>' '<inputtype="checkbox"name="bool_field"value="true"checked>' 'Boolfield' '</label>' '</div>' '</div>' ) rendered_packed = ''.join(rendered.split()) assert rendered_packed == expected_packed
def test_rendering_nested_fields_with_none_value(self): from rest_framework.renderers import HTMLFormRenderer class Nested1(serializers.Serializer): text_field = serializers.CharField() class Nested2(serializers.Serializer): nested1 = Nested1(allow_null=True) text_field = serializers.CharField() class ExampleSerializer(serializers.Serializer): nested2 = Nested2() serializer = ExampleSerializer(data={'nested2': {'nested1': None, 'text_field': 'test'}}) assert serializer.is_valid() renderer = HTMLFormRenderer() for field in serializer: rendered = renderer.render_field(field, {}) expected_packed = ( '<fieldset>' '<legend>Nested2</legend>' '<fieldset>' '<legend>Nested1</legend>' '<divclass="form-group">' '<label>Textfield</label>' '<inputname="nested2.nested1.text_field"class="form-control"type="text">' '</div>' '</fieldset>' '<divclass="form-group">' '<label>Textfield</label>' '<inputname="nested2.text_field"class="form-control"type="text"value="test">' '</div>' '</fieldset>' ) rendered_packed = ''.join(rendered.split()) assert rendered_packed == expected_packed