File: test_select_field.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 (78 lines) | stat: -rw-r--r-- 3,346 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
from decimal import Decimal

import sqlalchemy as sa
from wtforms_components import SelectField

from tests import ModelFormTestCase


class MultiDict(dict):
    def getlist(self, key):
        return [self[key]]


class TestSelectFieldDefaultValue(ModelFormTestCase):
    def test_option_selected_by_field_default_value(self):
        choices = [("1", "1"), ("2", "2")]
        self.init(type_=sa.Integer, default="1", info={"choices": choices})
        form = self.form_class(MultiDict({"test_column": "2"}))
        assert '<option selected value="2">2</option>' in str(form.test_column)


class TestSelectFieldCoerce(ModelFormTestCase):
    def test_integer_coerces_values_to_integers(self):
        choices = [("1", "1"), ("2", "2")]
        self.init(type_=sa.Integer, info={"choices": choices})
        form = self.form_class(MultiDict({"test_column": "2"}))
        assert form.test_column.data == 2

    def test_nullable_integer_coerces_values_to_integers(self):
        choices = [("1", "1"), ("2", "2")]
        self.init(type_=sa.Integer, nullable=True, info={"choices": choices})
        form = self.form_class(MultiDict({"test_column": "2"}))
        assert form.test_column.data == 2

    def test_integer_coerces_empty_strings_to_nulls(self):
        choices = [("1", "1"), ("2", "2")]
        self.init(type_=sa.Integer, info={"choices": choices})
        form = self.form_class(MultiDict({"test_column": ""}))
        assert form.test_column.data is None

    def test_big_integer_coerces_values_to_integers(self):
        choices = [("1", "1"), ("2", "2")]
        self.init(type_=sa.BigInteger, info={"choices": choices})
        self.assert_type("test_column", SelectField)
        form = self.form_class(MultiDict({"test_column": "2"}))
        assert form.test_column.data == 2

    def test_small_integer_coerces_values_to_integers(self):
        choices = [("1", "1"), ("2", "2")]
        self.init(type_=sa.SmallInteger, info={"choices": choices})
        form = self.form_class(MultiDict({"test_column": "2"}))
        assert form.test_column.data == 2

    def test_numeric_coerces_values_to_decimals(self):
        choices = [("1.0", "1.0"), ("2.0", "2.0")]
        self.init(type_=sa.Numeric, info={"choices": choices})
        form = self.form_class(MultiDict({"test_column": "2.0"}))
        assert form.test_column.data == Decimal("2.0")

    def test_float_coerces_values_to_floats(self):
        choices = [("1.0", "1.0"), ("2.0", "2.0")]
        self.init(type_=sa.Float, info={"choices": choices})
        form = self.form_class(MultiDict({"test_column": "2.0"}))
        assert form.test_column.data == 2.0

    def test_unicode_coerces_values_to_unicode_strings(self):
        choices = [("1.0", "1.0"), ("2.0", "2.0")]
        self.init(type_=sa.Unicode(255), info={"choices": choices})
        form = self.form_class(MultiDict({"test_column": "2.0"}))
        assert form.test_column.data == "2.0"
        assert isinstance(form.test_column.data, str)

    def test_unicode_text_coerces_values_to_unicode_strings(self):
        choices = [("1.0", "1.0"), ("2.0", "2.0")]
        self.init(type_=sa.UnicodeText, info={"choices": choices})
        form = self.form_class(MultiDict({"test_column": "2.0"}))
        assert form.test_column.data == "2.0"
        assert isinstance(form.test_column.data, str)