File: test_render_form.py

package info (click to toggle)
bootstrap-flask 2.2.0%2Bds1-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 25,396 kB
  • sloc: python: 2,218; makefile: 24
file content (138 lines) | stat: -rw-r--r-- 4,860 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
from flask import render_template_string
from flask_wtf import FlaskForm
from flask_bootstrap import SwitchField
from wtforms import IntegerRangeField, DecimalRangeField


def test_switch_field(app, client):

    class TestForm(FlaskForm):
        remember = SwitchField('Remember me', description='Just check this')

    @app.route('/switch')
    def test_switch():
        form = TestForm()
        return render_template_string('''
        {% from 'bootstrap5/form.html' import render_form %}
        {{ render_form(form) }}
        ''', form=form)

    response = client.get('/switch')
    data = response.get_data(as_text=True)
    assert 'Remember me' in data
    assert 'custom-control custom-switch' not in data
    assert 'form-check form-switch' in data
    assert 'role="switch"' in data
    assert '<small class="form-text text-muted">Just check this</small>' in data


# test render IntegerRangeField and DecimalRangeField
def test_range_fields(app, client):

    class TestForm(FlaskForm):
        decimal_slider = DecimalRangeField()
        integer_slider = IntegerRangeField(render_kw={'min': '0', 'max': '4'})

    @app.route('/range')
    def test_range():
        form = TestForm()
        return render_template_string('''
        {% from 'bootstrap5/form.html' import render_form %}
        {{ render_form(form) }}
        ''', form=form)

    response = client.get('/range')
    data = response.get_data(as_text=True)
    assert 'Decimal Slider' in data
    assert 'Integer Slider' in data
    assert 'form-range' in data


def test_form_group_class(app, client, hello_form):
    @app.route('/default')
    def test_default():
        form = hello_form()
        return render_template_string('''
                    {% from 'bootstrap5/form.html' import render_form %}
                    {{ render_form(form) }}
                    ''', form=form)

    @app.route('/custom')
    def test_custom():
        form = hello_form()
        return render_template_string('''
                    {% from 'bootstrap5/form.html' import render_form %}
                    {{ render_form(form, form_group_classes='mb-2') }}
                    ''', form=form)

    response = client.get('/default')
    data = response.get_data(as_text=True)
    assert '<div class="mb-3' in data
    response = client.get('/custom')
    data = response.get_data(as_text=True)
    assert '<div class="mb-3' not in data
    assert '<div class="mb-2' in data


def test_form_group_class_config(app, client, hello_form):
    app.config['BOOTSTRAP_FORM_GROUP_CLASSES'] = 'mb-4'

    @app.route('/config')
    def test_config():
        form = hello_form()
        return render_template_string('''
                        {% from 'bootstrap5/form.html' import render_form %}
                        {{ render_form(form) }}
                        ''', form=form)

    response = client.get('/config')
    data = response.get_data(as_text=True)
    assert '<div class="mb-3' not in data
    assert '<div class="mb-4' in data


def test_form_inline_classes(app, client, hello_form):
    @app.route('/default')
    def test_default():
        form = hello_form()
        return render_template_string('''
                    {% from 'bootstrap5/form.html' import render_form %}
                    {{ render_form(form, form_type='inline') }}
                    ''', form=form)

    @app.route('/custom')
    def test_custom():
        form = hello_form()
        return render_template_string('''
                    {% from 'bootstrap5/form.html' import render_form %}
                    {{ render_form(form, form_type='inline', form_inline_classes='custom-inline-classes') }}
                    ''', form=form)

    response = client.get('/default')
    data = response.get_data(as_text=True)
    assert '<div class="mb-3' not in data
    assert '<div class="col-12' in data
    assert 'row row-cols-lg-auto g-3 align-items-center' in data
    assert '<label class="sr-only' not in data
    assert '<label class="visually-hidden' in data
    response = client.get('/custom')
    data = response.get_data(as_text=True)
    assert 'row row-cols-lg-auto g-3 align-items-center' not in data
    assert 'custom-inline-classes' in data


def test_form_inline_classes_config(app, client, hello_form):
    app.config['BOOTSTRAP_FORM_INLINE_CLASSES'] = 'custom-inline-classes'

    @app.route('/config')
    def test_config():
        form = hello_form()
        return render_template_string('''
                        {% from 'bootstrap5/form.html' import render_form %}
                        {{ render_form(form, form_type='inline') }}
                        ''', form=form)

    response = client.get('/config')
    data = response.get_data(as_text=True)
    assert 'row row-cols-lg-auto g-3 align-items-center' not in data
    assert 'custom-inline-classes' in data