forked from rembish/mongoengine-mls
/
tests.py
135 lines (100 loc) · 3.6 KB
/
tests.py
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
# coding=utf-8
from locale import setlocale, LC_ALL
from uuid import uuid4
try:
from mongoengine.errors import ValidationError
except ImportError:
from mongoengine.base import ValidationError
from mls import mls
from mongoengine.connection import connect
from mongoengine.document import Document
from mongoengine.fields import StringField
from os import environ
from unittest import TestCase as BaseTestCase
from six import u
from mongoengine_mls import MultiLingualField
class Country(Document):
meta = {"collection": uuid4().hex}
code = StringField(required=True, min_length=2, max_length=2)
name = MultiLingualField()
nullable = MultiLingualField(null=True)
@classmethod
def by_code(cls, code):
return cls.objects(code=code).first()
def __repr__(self):
return "<%s[%s]>" % (self.__class__.__name__, self.code)
class TestCase(BaseTestCase):
def setUp(self):
setlocale(LC_ALL, "en_US.UTF_8")
connect(
db=environ.get("TEST_DB", "test"),
host=environ.get("TEST_HOST", "localhost"),
port=environ.get("TEST_PORT", 27017),
)
Country(
code="ru", name=mls(ru=u("Россия"), en="Russia", cs="Rusko")
).save()
Country(
code="cz", name=mls(
ru=u("Чехия"),
en="Czech Republic",
cs=u("Česko")
)
).save()
def test_read(self):
ru = Country.by_code("ru")
self.assertEqual(ru.code, "ru")
self.assertEqual(ru.name, "Russia")
def test_save(self):
ru = Country.by_code("ru")
ru.name <<= "Russian Federation"
ru.save()
ru2 = Country.by_code("ru")
self.assertEqual(repr(ru2.name), "en'Russian Federation'")
self.assertEqual(ru2.name >> "cs", u("Rusko"))
def test_rewrite_with_list(self):
cz = Country.by_code("cz")
self.assertTrue(isinstance(cz.name, mls))
cz.name = [
{"language": "cs", "value": u("Česká republika")},
{"language": "en", "value": "Czech Republic"},
{"language": "ru", "value": u("Чешская Республика")},
]
cz.save()
cz2 = Country.by_code("cz")
self.assertEqual(cz2.name >> "ru", u("Чешская Республика"))
def test_rewrite_with_dict(self):
ru2 = Country.by_code("ru")
ru2.name = {
"ru": u("Российская Федерация"),
"cs": u("Ruská federace"),
"en": "Russian Federation"
}
ru2.save()
ru3 = Country.by_code("ru")
self.assertEqual(ru3.name.translate_to("cs"), u("Ruská federace"))
def test_remove_other(self):
cz2 = Country.by_code("cz")
cz2.name = u("Czech Republic") # Removing all mutations except en_US
cz2.save()
cz3 = Country.by_code("cz")
self.assertEqual(str(cz3.name), "Czech Republic")
self.assertEqual(cz3.name >> "cs", u("Czech Republic"))
def test_invalids(self):
xy = Country(code="xy")
xy.name = ["foo", "bar"]
self.assertRaises(ValidationError, xy.save)
xy.name = 123
self.assertRaises(ValidationError, xy.save)
def test_nullable(self):
xy = Country(code="xy")
xy.nullable = None
xy.save()
xy2 = Country.by_code("xy")
self.assertTrue(xy2.nullable is None)
xy2.nullable = "XY"
xy2.save()
xy3 = Country.by_code("xy")
self.assertEqual(xy3.nullable, "XY")
def tearDown(self):
Country.drop_collection()