File: test_i18n.py

package info (click to toggle)
flask-wtf 1.2.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 428 kB
  • sloc: python: 1,313; makefile: 22; sh: 10
file content (68 lines) | stat: -rw-r--r-- 2,051 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
import pytest
from flask import request
from wtforms import StringField
from wtforms.validators import DataRequired
from wtforms.validators import Length

from flask_wtf import FlaskForm

pytest.importorskip("flask_wtf.i18n", reason="Flask-Babel is not installed.")


class NameForm(FlaskForm):
    class Meta:
        csrf = False

    name = StringField(validators=[DataRequired(), Length(min=8)])


def test_no_extension(app, client):
    @app.route("/", methods=["POST"])
    def index():
        form = NameForm()
        form.validate()
        assert form.name.errors[0] == "This field is required."

    client.post("/", headers={"Accept-Language": "zh-CN,zh;q=0.8"})


def test_i18n(app, client):
    try:
        from flask_babel import Babel
    except ImportError:
        pytest.skip("Flask-Babel must be installed.")

    def get_locale():
        return request.accept_languages.best_match(["en", "zh"], "en")

    Babel(app, locale_selector=get_locale)

    @app.route("/", methods=["POST"])
    def index():
        form = NameForm()
        form.validate()

        if not app.config.get("WTF_I18N_ENABLED", True):
            assert form.name.errors[0] == "This field is required."
        elif not form.name.data:
            assert form.name.errors[0] == "该字段是必填字段。"
        else:
            assert form.name.errors[0] == "字段长度必须至少 8 个字符。"

    client.post("/", headers={"Accept-Language": "zh-CN,zh;q=0.8"})
    client.post("/", headers={"Accept-Language": "zh"}, data={"name": "short"})
    app.config["WTF_I18N_ENABLED"] = False
    client.post("/", headers={"Accept-Language": "zh"})


def test_outside_request():
    pytest.importorskip("babel")
    from flask_wtf.i18n import translations

    s = "This field is required."
    assert translations.gettext(s) == s

    ss = "Field must be at least %(min)d character long."
    sp = "Field must be at least %(min)d character long."
    assert translations.ngettext(ss, sp, 1) == ss
    assert translations.ngettext(ss, sp, 2) == sp