|
3 | 3 |
|
4 | 4 | from piccolo.columns import Column, ForeignKey, LazyTableReference, Varchar |
5 | 5 | from piccolo.table import Table |
6 | | -from tests.base import DBTestCase |
7 | | -from tests.example_app.tables import Band, Manager |
| 6 | +from tests.example_app.tables import Band, Concert, Manager |
8 | 7 |
|
9 | 8 |
|
10 | 9 | class Manager1(Table, tablename="manager"): |
@@ -172,32 +171,36 @@ def test_recursion_time(self): |
172 | 171 | self.assertTrue(end - start < 1.0) |
173 | 172 |
|
174 | 173 |
|
175 | | -class TestAllColumns(DBTestCase): |
176 | | - def setUp(self): |
177 | | - Manager.create_table().run_sync() |
178 | | - manager = Manager(name="Guido") |
179 | | - manager.save().run_sync() |
180 | | - |
181 | | - Band.create_table().run_sync() |
182 | | - Band(manager=manager, name="Pythonistas").save().run_sync() |
183 | | - |
184 | | - def tearDown(self): |
185 | | - Band.alter().drop_table().run_sync() |
186 | | - Manager.alter().drop_table().run_sync() |
187 | | - |
| 174 | +class TestAllColumns(TestCase): |
188 | 175 | def test_all_columns(self): |
189 | 176 | """ |
190 | 177 | Make sure you can retrieve all columns from a related table, without |
191 | 178 | explicitly specifying them. |
192 | 179 | """ |
193 | | - result = Band.select(Band.name, *Band.manager.all_columns()).run_sync() |
| 180 | + all_columns = Band.manager.all_columns() |
| 181 | + self.assertEqual(all_columns, [Band.manager.id, Band.manager.name]) |
| 182 | + |
| 183 | + # Make sure the call chains are also correct. |
194 | 184 | self.assertEqual( |
195 | | - result, |
196 | | - [ |
197 | | - { |
198 | | - "name": "Pythonistas", |
199 | | - "manager.id": 1, |
200 | | - "manager.name": "Guido", |
201 | | - } |
202 | | - ], |
| 185 | + all_columns[0]._meta.call_chain, Band.manager.id._meta.call_chain |
| 186 | + ) |
| 187 | + self.assertEqual( |
| 188 | + all_columns[1]._meta.call_chain, Band.manager.name._meta.call_chain |
| 189 | + ) |
| 190 | + |
| 191 | + def test_all_columns_deep(self): |
| 192 | + """ |
| 193 | + Make sure ``all_columns`` works when the joins are several layers deep. |
| 194 | + """ |
| 195 | + all_columns = Concert.band_1.manager.all_columns() |
| 196 | + self.assertEqual(all_columns, [Band.manager.id, Band.manager.name]) |
| 197 | + |
| 198 | + # Make sure the call chains are also correct. |
| 199 | + self.assertEqual( |
| 200 | + all_columns[0]._meta.call_chain, |
| 201 | + Concert.band_1.manager.id._meta.call_chain, |
| 202 | + ) |
| 203 | + self.assertEqual( |
| 204 | + all_columns[1]._meta.call_chain, |
| 205 | + Concert.band_1.manager.name._meta.call_chain, |
203 | 206 | ) |
0 commit comments