diff options
author | Mike Crute <mcrute@gmail.com> | 2015-07-18 11:40:32 -0700 |
---|---|---|
committer | Mike Crute <mcrute@gmail.com> | 2015-07-18 11:47:25 -0700 |
commit | c7f9c15c93bfc8010e109193a1e8214c7645553e (patch) | |
tree | 0acd4e695cb71ad9ecaa90455c31cd19603146bf /tests | |
parent | 1a84a62c101149df9cbc0fe5e17e88c117d8ac73 (diff) | |
download | pydora-c7f9c15c93bfc8010e109193a1e8214c7645553e.tar.bz2 pydora-c7f9c15c93bfc8010e109193a1e8214c7645553e.tar.xz pydora-c7f9c15c93bfc8010e109193a1e8214c7645553e.zip |
Allow list models to be indexed
Fixes #16
Diffstat (limited to 'tests')
-rw-r--r-- | tests/test_pandora/test_models.py | 42 |
1 files changed, 32 insertions, 10 deletions
diff --git a/tests/test_pandora/test_models.py b/tests/test_pandora/test_models.py index fda25d4..8d823c8 100644 --- a/tests/test_pandora/test_models.py +++ b/tests/test_pandora/test_models.py | |||
@@ -98,6 +98,7 @@ class TestPandoraModel(TestCase): | |||
98 | 98 | ||
99 | class TestSubModel(m.PandoraModel): | 99 | class TestSubModel(m.PandoraModel): |
100 | 100 | ||
101 | idx = m.Field("idx") | ||
101 | fieldS1 = m.Field("fieldS1") | 102 | fieldS1 = m.Field("fieldS1") |
102 | 103 | ||
103 | 104 | ||
@@ -105,25 +106,46 @@ class TestPandoraListModel(TestCase): | |||
105 | 106 | ||
106 | JSON_DATA = { | 107 | JSON_DATA = { |
107 | "field1": 42, | 108 | "field1": 42, |
108 | "field2": [{"fieldS1": "Foo" }, { "fieldS1": "Bar" }] | 109 | "field2": [ |
110 | { "idx": "foo", "fieldS1": "Foo" }, | ||
111 | { "idx": "bar", "fieldS1": "Bar" }, | ||
112 | ] | ||
109 | } | 113 | } |
110 | 114 | ||
111 | class TestModel(m.PandoraListModel): | 115 | class TestModel(m.PandoraListModel): |
112 | 116 | ||
113 | __list_key__ = "field2" | 117 | __list_key__ = "field2" |
114 | __list_model__ = TestSubModel | 118 | __list_model__ = TestSubModel |
119 | __index_key__ = "idx" | ||
115 | 120 | ||
116 | field1 = m.Field("field1") | 121 | field1 = m.Field("field1") |
117 | 122 | ||
123 | def setUp(self): | ||
124 | self.result = self.TestModel.from_json(None, self.JSON_DATA) | ||
125 | |||
118 | def test_creates_sub_models(self): | 126 | def test_creates_sub_models(self): |
119 | result = self.TestModel.from_json(None, self.JSON_DATA) | 127 | self.assertEqual(42, self.result.field1) |
120 | self.assertEqual(42, result.field1) | 128 | self.assertEqual(2, len(self.result)) |
121 | self.assertEqual(2, len(result)) | 129 | self.assertEqual("Foo", self.result[0].fieldS1) |
122 | self.assertEqual("Foo", result[0].fieldS1) | 130 | self.assertEqual("Bar", self.result[1].fieldS1) |
123 | self.assertEqual("Bar", result[1].fieldS1) | ||
124 | 131 | ||
125 | def test_repr(self): | 132 | def test_repr(self): |
126 | expected = ("TestModel(field1=42, [TestSubModel(fieldS1='Foo'), " | 133 | expected = ("TestModel(field1=42, [TestSubModel(fieldS1='Foo', " |
127 | "TestSubModel(fieldS1='Bar')])") | 134 | "idx='foo'), TestSubModel(fieldS1='Bar', idx='bar')])") |
128 | result = self.TestModel.from_json(None, self.JSON_DATA) | 135 | self.assertEqual(expected, repr(self.result)) |
129 | self.assertEqual(expected, repr(result)) | 136 | |
137 | def test_indexed_model(self): | ||
138 | self.assertEqual(["bar", "foo"], sorted(self.result.keys())) | ||
139 | self.assertEqual(self.result._index.items(), self.result.items()) | ||
140 | |||
141 | def test_getting_list_items(self): | ||
142 | self.assertEqual("Foo", self.result[0].fieldS1) | ||
143 | self.assertEqual("Bar", self.result[1].fieldS1) | ||
144 | |||
145 | def test_getting_dictionary_items(self): | ||
146 | self.assertEqual("Foo", self.result["foo"].fieldS1) | ||
147 | self.assertEqual("Bar", self.result["bar"].fieldS1) | ||
148 | |||
149 | def test_getting_keys_vs_indexes_are_identical(self): | ||
150 | self.assertEqual(self.result["foo"].fieldS1, self.result[0].fieldS1) | ||
151 | self.assertEqual(self.result["bar"].fieldS1, self.result[1].fieldS1) | ||