File: test_webob.py

package info (click to toggle)
wtforms 3.2.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,064 kB
  • sloc: python: 5,264; makefile: 27; sh: 17
file content (95 lines) | stat: -rw-r--r-- 2,230 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
import pytest

from wtforms.fields import Field
from wtforms.form import BaseForm
from wtforms.utils import unset_value
from wtforms.utils import WebobInputWrapper

try:
    from webob.multidict import MultiDict

    has_webob = True
except ImportError:
    has_webob = False


class MockMultiDict:
    def __init__(self, tuples):
        self.tuples = tuples

    def __len__(self):
        return len(self.tuples)

    def __iter__(self):
        for k, _ in self.tuples:
            yield k

    def __contains__(self, key):
        for k, _ in self.tuples:
            if k == key:
                return True
        return False

    def getall(self, key):
        result = []
        for k, v in self.tuples:
            if key == k:
                result.append(v)
        return result


class SneakyField(Field):
    def __init__(self, sneaky_callable, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.sneaky_callable = sneaky_callable

    def process(self, formdata, data=unset_value, **kwargs):
        self.sneaky_callable(formdata)


@pytest.fixture
def webob_class():
    return MultiDict if has_webob else MockMultiDict


@pytest.fixture
def test_values():
    return [("a", "Apple"), ("b", "Banana"), ("a", "Cherry")]


@pytest.fixture()
def empty_mdict(webob_class):
    return webob_class([])


@pytest.fixture()
def filled_mdict(webob_class, test_values):
    return webob_class(test_values)


def test_automatic_wrapping(filled_mdict):
    def _check(formdata):
        assert isinstance(formdata, WebobInputWrapper)

    form = BaseForm({"a": SneakyField(_check)})
    form.process(filled_mdict)


def test_empty(empty_mdict):
    formdata = WebobInputWrapper(empty_mdict)
    assert not formdata
    assert len(formdata) == 0
    assert list(formdata) == []
    assert formdata.getlist("fake") == []


def test_filled(filled_mdict):
    formdata = WebobInputWrapper(filled_mdict)
    assert formdata
    assert len(formdata) == 3
    assert list(formdata) == ["a", "b", "a"]
    assert "b" in formdata
    assert "fake" not in formdata
    assert formdata.getlist("a") == ["Apple", "Cherry"]
    assert formdata.getlist("b") == ["Banana"]
    assert formdata.getlist("fake") == []