aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMike Crute <mcrute@gmail.com>2015-07-17 20:45:17 -0700
committerMike Crute <mcrute@gmail.com>2015-07-17 20:45:17 -0700
commit9a2e05f3f2cbc2075d0bb1a192708f255dee6095 (patch)
tree54029033eeb519327b3dc38087b759d6a6e3196c /tests
parent199d4901b4b8a152e16c77186b566138fafa1718 (diff)
downloadpydora-9a2e05f3f2cbc2075d0bb1a192708f255dee6095.tar.bz2
pydora-9a2e05f3f2cbc2075d0bb1a192708f255dee6095.tar.xz
pydora-9a2e05f3f2cbc2075d0bb1a192708f255dee6095.zip
Add tests for base models
Diffstat (limited to 'tests')
-rw-r--r--tests/test_pandora/test_models.py129
1 files changed, 129 insertions, 0 deletions
diff --git a/tests/test_pandora/test_models.py b/tests/test_pandora/test_models.py
new file mode 100644
index 0000000..fda25d4
--- /dev/null
+++ b/tests/test_pandora/test_models.py
@@ -0,0 +1,129 @@
1from unittest import TestCase
2from datetime import datetime
3
4import pandora.models as m
5
6class TestField(TestCase):
7
8 def test_defaults(self):
9 field = m.Field("name")
10
11 self.assertEqual("name", field.field)
12 self.assertIsNone(field.default)
13 self.assertIsNone(field.formatter)
14
15
16class TestModelMetaClass(TestCase):
17
18 class TestModel(m.with_metaclass(m.ModelMetaClass, object)):
19
20 foo = "bar"
21 a_field = m.Field("testing")
22 __field__ = m.Field("testing")
23
24 def test_metaclass_defines_fields(self):
25 self.assertTrue("a_field" in self.TestModel._fields)
26 self.assertFalse("foo" in self.TestModel._fields)
27
28 def test_metaclass_ignores_dunder_fields(self):
29 self.assertFalse("__field__" in self.TestModel._fields)
30
31
32class TestPandoraModel(TestCase):
33
34 JSON_DATA = { "field2": ["test2"], "field3": 41 }
35
36 class TestModel(m.PandoraModel):
37
38 THE_LIST = []
39
40 field1 = m.Field("field1", default="a string")
41 field2 = m.Field("field2", default=THE_LIST)
42 field3 = m.Field("field3", formatter=lambda c, x: x + 1)
43
44 class NoFieldsModel(m.PandoraModel):
45 pass
46
47 class ExtraReprModel(m.PandoraModel):
48
49 def __repr__(self):
50 return self._base_repr("Foo")
51
52 def test_json_to_date(self):
53 expected = datetime(2015, 7, 18, 3, 8, 17)
54 result = m.PandoraModel.json_to_date(None, { "time": 1437188897616 })
55 # Python2.7 doesn't restore microseconds and we don't care about
56 # it anyhow so just remove it for this test
57 self.assertEqual(expected, result.replace(microsecond=0))
58
59 def test_init_sets_defaults(self):
60 model = self.TestModel(None)
61 self.assertEqual(model.field1, "a string")
62
63 def test_init_creates_new_instances_of_mutable_types(self):
64 model = self.TestModel(None)
65 self.assertEqual(model.field2, [])
66 self.assertFalse(model.field2 is self.TestModel.THE_LIST)
67
68 def test_populate_fields(self):
69 result = self.TestModel.from_json(None, self.JSON_DATA)
70 self.assertEqual("a string", result.field1)
71 self.assertEqual(["test2"], result.field2)
72
73 def test_populate_fields_calls_formatter(self):
74 result = self.TestModel.from_json(None, self.JSON_DATA)
75 self.assertEqual(42, result.field3)
76
77 def test_from_json_list(self):
78 json_list = [self.JSON_DATA, self.JSON_DATA]
79 result = self.TestModel.from_json_list(None, json_list)
80 self.assertEqual(2, len(result))
81 self.assertEqual("a string", result[1].field1)
82
83 def test_repr(self):
84 expected = "TestModel(field1='a string', field2=['test2'], field3=42)"
85 result = self.TestModel.from_json(None, self.JSON_DATA)
86 self.assertEqual(expected, repr(result))
87
88 def test_repr_with_extra(self):
89 expected = "ExtraReprModel(None, Foo)"
90 result = self.ExtraReprModel.from_json(None, self.JSON_DATA)
91 self.assertEqual(expected, repr(result))
92
93 def test_repr_with_no_fields(self):
94 expected = "NoFieldsModel(None)"
95 result = self.NoFieldsModel.from_json(None, self.JSON_DATA)
96 self.assertEqual(expected, repr(result))
97
98
99class TestSubModel(m.PandoraModel):
100
101 fieldS1 = m.Field("fieldS1")
102
103
104class TestPandoraListModel(TestCase):
105
106 JSON_DATA = {
107 "field1": 42,
108 "field2": [{"fieldS1": "Foo" }, { "fieldS1": "Bar" }]
109 }
110
111 class TestModel(m.PandoraListModel):
112
113 __list_key__ = "field2"
114 __list_model__ = TestSubModel
115
116 field1 = m.Field("field1")
117
118 def test_creates_sub_models(self):
119 result = self.TestModel.from_json(None, self.JSON_DATA)
120 self.assertEqual(42, result.field1)
121 self.assertEqual(2, len(result))
122 self.assertEqual("Foo", result[0].fieldS1)
123 self.assertEqual("Bar", result[1].fieldS1)
124
125 def test_repr(self):
126 expected = ("TestModel(field1=42, [TestSubModel(fieldS1='Foo'), "
127 "TestSubModel(fieldS1='Bar')])")
128 result = self.TestModel.from_json(None, self.JSON_DATA)
129 self.assertEqual(expected, repr(result))