File: test_model_form_factory.py

package info (click to toggle)
wtforms-alchemy 0.19.0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 492 kB
  • sloc: python: 3,955; makefile: 119; sh: 11
file content (116 lines) | stat: -rw-r--r-- 3,596 bytes parent folder | download | duplicates (2)
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
import wtforms
from pytest import raises
from wtforms import Form

from tests import ModelFormTestCase
from wtforms_alchemy import (
    FormGenerator,
    model_form_factory,
    UnknownConfigurationOption,
)


class TestModelFormFactory(ModelFormTestCase):
    def test_supports_parameter_overriding(self):
        self.init()

        class MyFormGenerator(FormGenerator):
            pass

        defaults = {
            "all_fields_optional": True,
            "only_indexed_fields": True,
            "include_primary_keys": True,
            "include_foreign_keys": True,
            "strip_string_fields": True,
            "include_datetimes_with_default": True,
            "form_generator": True,
            "date_format": "%d-%m-%Y",
            "datetime_format": "%Y-%m-%dT%H:%M:%S",
        }
        ModelForm = model_form_factory(Form, **defaults)
        for key, value in defaults.items():
            assert getattr(ModelForm.Meta, key) == value

    def test_throws_exception_for_unknown_configuration_option(self):
        self.init()

        class SomeForm(Form):
            pass

        defaults = {"unknown": "something"}
        with raises(UnknownConfigurationOption):
            model_form_factory(SomeForm, **defaults)

    def test_supports_custom_base_class_with_model_form_factory(self):
        self.init()

        class SomeForm(Form):
            pass

        class TestCustomBase(model_form_factory(SomeForm)):
            class Meta:
                model = self.ModelTest

        assert isinstance(TestCustomBase(), SomeForm)

    def test_url_validator(self):
        form = model_form_factory(url_validator=None)
        assert form.Meta.url_validator is None

    def test_email_validator(self):
        form = model_form_factory(email_validator=None)
        assert form.Meta.email_validator is None

    def test_length_validator(self):
        form = model_form_factory(length_validator=None)
        assert form.Meta.length_validator is None

    def test_number_range_validator(self):
        form = model_form_factory(number_range_validator=None)
        assert form.Meta.number_range_validator is None

    def test_date_range_validator(self):
        form = model_form_factory(date_range_validator=None)
        assert form.Meta.date_range_validator is None

    def test_time_range_validator(self):
        form = model_form_factory(time_range_validator=None)
        assert form.Meta.time_range_validator is None

    def test_optional_validator(self):
        form = model_form_factory(optional_validator=None)
        assert form.Meta.optional_validator is None

    def test_unique_validator(self):
        form = model_form_factory(unique_validator=None)
        assert form.Meta.unique_validator is None

    def test_class_meta_wtforms2(self):
        self.init()

        class SomeForm(Form):
            class Meta:
                locales = ["fr"]
                foo = 9

        class OtherForm(SomeForm):
            class Meta:
                pass

        class TestCustomBase(model_form_factory(SomeForm)):
            class Meta:
                model = self.ModelTest

        form = TestCustomBase()
        other_form = OtherForm()
        assert isinstance(form.meta, wtforms.meta.DefaultMeta)
        assert form.meta.locales == ["fr"]
        assert hasattr(form.meta, "model")
        assert hasattr(form.meta, "csrf")

        assert form.meta.foo == 9
        # Create a side effect on the base meta.
        SomeForm.Meta.foo = 12
        assert other_form.meta.foo == 12
        assert form.meta.foo == 12