piccolo 1.15.0__py3-none-any.whl → 1.16.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- piccolo/__init__.py +1 -1
- piccolo/testing/test_case.py +120 -0
- {piccolo-1.15.0.dist-info → piccolo-1.16.0.dist-info}/METADATA +1 -1
- {piccolo-1.15.0.dist-info → piccolo-1.16.0.dist-info}/RECORD +35 -33
- tests/columns/test_array.py +2 -1
- tests/columns/test_bigint.py +2 -1
- tests/columns/test_boolean.py +1 -1
- tests/columns/test_bytea.py +1 -1
- tests/columns/test_choices.py +2 -1
- tests/columns/test_date.py +1 -1
- tests/columns/test_double_precision.py +1 -1
- tests/columns/test_interval.py +1 -1
- tests/columns/test_json.py +1 -1
- tests/columns/test_jsonb.py +2 -1
- tests/columns/test_numeric.py +1 -1
- tests/columns/test_primary_key.py +1 -1
- tests/columns/test_readable.py +1 -1
- tests/columns/test_real.py +1 -1
- tests/columns/test_reference.py +1 -1
- tests/columns/test_reserved_column_names.py +1 -1
- tests/columns/test_smallint.py +2 -2
- tests/columns/test_time.py +2 -1
- tests/columns/test_timestamp.py +1 -1
- tests/columns/test_timestamptz.py +1 -1
- tests/columns/test_uuid.py +1 -1
- tests/columns/test_varchar.py +2 -2
- tests/query/functions/base.py +1 -1
- tests/query/functions/test_datetime.py +2 -1
- tests/query/functions/test_math.py +1 -1
- tests/table/test_refresh.py +2 -1
- tests/testing/test_test_case.py +65 -0
- {piccolo-1.15.0.dist-info → piccolo-1.16.0.dist-info}/LICENSE +0 -0
- {piccolo-1.15.0.dist-info → piccolo-1.16.0.dist-info}/WHEEL +0 -0
- {piccolo-1.15.0.dist-info → piccolo-1.16.0.dist-info}/entry_points.txt +0 -0
- {piccolo-1.15.0.dist-info → piccolo-1.16.0.dist-info}/top_level.txt +0 -0
piccolo/__init__.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__VERSION__ = "1.
|
1
|
+
__VERSION__ = "1.16.0"
|
@@ -0,0 +1,120 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
import typing as t
|
4
|
+
from unittest import IsolatedAsyncioTestCase, TestCase
|
5
|
+
|
6
|
+
from piccolo.engine import Engine, engine_finder
|
7
|
+
from piccolo.table import (
|
8
|
+
Table,
|
9
|
+
create_db_tables,
|
10
|
+
create_db_tables_sync,
|
11
|
+
drop_db_tables,
|
12
|
+
drop_db_tables_sync,
|
13
|
+
)
|
14
|
+
|
15
|
+
|
16
|
+
class TableTest(TestCase):
|
17
|
+
"""
|
18
|
+
Identical to :class:`AsyncTableTest <piccolo.testing.test_case.AsyncTableTest>`,
|
19
|
+
except it only work for sync tests. Only use this if you can't make your
|
20
|
+
tests async (perhaps you're on Python 3.7 where ``IsolatedAsyncioTestCase``
|
21
|
+
isn't available).
|
22
|
+
|
23
|
+
For example::
|
24
|
+
|
25
|
+
class TestBand(TableTest):
|
26
|
+
tables = [Band]
|
27
|
+
|
28
|
+
def test_band(self):
|
29
|
+
...
|
30
|
+
|
31
|
+
""" # noqa: E501
|
32
|
+
|
33
|
+
tables: t.List[t.Type[Table]]
|
34
|
+
|
35
|
+
def setUp(self) -> None:
|
36
|
+
create_db_tables_sync(*self.tables)
|
37
|
+
|
38
|
+
def tearDown(self) -> None:
|
39
|
+
drop_db_tables_sync(*self.tables)
|
40
|
+
|
41
|
+
|
42
|
+
class AsyncTableTest(IsolatedAsyncioTestCase):
|
43
|
+
"""
|
44
|
+
Used for tests where we need to create Piccolo tables - they will
|
45
|
+
automatically be created and dropped.
|
46
|
+
|
47
|
+
For example::
|
48
|
+
|
49
|
+
class TestBand(AsyncTableTest):
|
50
|
+
tables = [Band]
|
51
|
+
|
52
|
+
async def test_band(self):
|
53
|
+
...
|
54
|
+
|
55
|
+
"""
|
56
|
+
|
57
|
+
tables: t.List[t.Type[Table]]
|
58
|
+
|
59
|
+
async def asyncSetUp(self) -> None:
|
60
|
+
await create_db_tables(*self.tables)
|
61
|
+
|
62
|
+
async def asyncTearDown(self) -> None:
|
63
|
+
await drop_db_tables(*self.tables)
|
64
|
+
|
65
|
+
|
66
|
+
class AsyncTransactionTest(IsolatedAsyncioTestCase):
|
67
|
+
"""
|
68
|
+
Wraps each test in a transaction, which is automatically rolled back when
|
69
|
+
the test finishes.
|
70
|
+
|
71
|
+
.. warning::
|
72
|
+
Python 3.11 and above only.
|
73
|
+
|
74
|
+
If your test suite just contains ``AsyncTransactionTest`` tests, then you
|
75
|
+
can setup your database tables once before your test suite runs. Any
|
76
|
+
changes made to your tables by the tests will be rolled back automatically.
|
77
|
+
|
78
|
+
Here's an example::
|
79
|
+
|
80
|
+
from piccolo.testing.test_case import AsyncTransactionTest
|
81
|
+
|
82
|
+
|
83
|
+
class TestBandEndpoint(AsyncTransactionTest):
|
84
|
+
|
85
|
+
async def test_band_response(self):
|
86
|
+
\"\"\"
|
87
|
+
Make sure the endpoint returns a 200.
|
88
|
+
\"\"\"
|
89
|
+
band = Band({Band.name: "Pythonistas"})
|
90
|
+
await band.save()
|
91
|
+
|
92
|
+
# Using an API testing client, like httpx:
|
93
|
+
response = await client.get(f"/bands/{band.id}/")
|
94
|
+
self.assertEqual(response.status_code, 200)
|
95
|
+
|
96
|
+
We add a ``Band`` to the database, but any subsequent tests won't see it,
|
97
|
+
as the changes are rolled back automatically.
|
98
|
+
|
99
|
+
"""
|
100
|
+
|
101
|
+
# We use `engine_finder` to find the current `Engine`, but you can
|
102
|
+
# explicity set it here if you prefer:
|
103
|
+
#
|
104
|
+
# class MyTest(AsyncTransactionTest):
|
105
|
+
# db = DB
|
106
|
+
#
|
107
|
+
# ...
|
108
|
+
#
|
109
|
+
db: t.Optional[Engine] = None
|
110
|
+
|
111
|
+
async def asyncSetUp(self) -> None:
|
112
|
+
db = self.db or engine_finder()
|
113
|
+
assert db is not None
|
114
|
+
self.transaction = db.transaction()
|
115
|
+
# This is only available in Python 3.11 and above:
|
116
|
+
await self.enterAsyncContext(cm=self.transaction) # type: ignore
|
117
|
+
|
118
|
+
async def asyncTearDown(self):
|
119
|
+
await super().asyncTearDown()
|
120
|
+
await self.transaction.rollback()
|
@@ -1,4 +1,4 @@
|
|
1
|
-
piccolo/__init__.py,sha256=
|
1
|
+
piccolo/__init__.py,sha256=ysxGt_oXPqT-SJ1UbC7NdyUSaoEEi94z0BdzyvNNY2Y,23
|
2
2
|
piccolo/custom_types.py,sha256=7HMQAze-5mieNLfbQ5QgbRQgR2abR7ol0qehv2SqROY,604
|
3
3
|
piccolo/main.py,sha256=1VsFV67FWTUikPTysp64Fmgd9QBVa_9wcwKfwj2UCEA,5117
|
4
4
|
piccolo/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -175,6 +175,7 @@ piccolo/query/methods/update.py,sha256=LfWqIXEl1aecc0rkVssTFmwyD6wXGhlKcTrUVhtlE
|
|
175
175
|
piccolo/testing/__init__.py,sha256=pRFSqRInfx95AakOq54atmvqoB-ue073q2aR8u8zR40,83
|
176
176
|
piccolo/testing/model_builder.py,sha256=lVEiEe71xrH8SSjzFc2l0s-VaCXHeg9Bo5oAYOEbLrI,6545
|
177
177
|
piccolo/testing/random_builder.py,sha256=0LkGpanQ7P1R82gLIMQyK9cm1LdZkPvxbShTEf3jeH4,2128
|
178
|
+
piccolo/testing/test_case.py,sha256=JHQCIAeuO6H2ZbcFHQUhlvUWVFjzKoakDlqVYJvYhtg,3281
|
178
179
|
piccolo/utils/__init__.py,sha256=SDFFraauI9Op8dCRkreQv1dwUcab8Mi1eC-n0EwlTy8,36
|
179
180
|
piccolo/utils/dictionary.py,sha256=8vRPxgaXadDVhqihP1UxL7nUBgM6Gpe_Eu3xJq7zzGM,1886
|
180
181
|
piccolo/utils/encoding.py,sha256=CtSODJOkT3TVHfGlTDXozDsClBCJbGGqluc6_UlJ-7c,1761
|
@@ -244,33 +245,33 @@ tests/apps/user/commands/test_change_permissions.py,sha256=uVKEiT1EKot3VA2TDETdQ
|
|
244
245
|
tests/apps/user/commands/test_create.py,sha256=iJ3Tti62rHwvdcTwNXrc5JPam6vR1qxKRdMN456vm3o,2250
|
245
246
|
tests/apps/user/commands/test_list.py,sha256=ipPfGdW6fH7q-Jc7JcYUvlioGmH9GQU0WImZGC2m-XQ,2840
|
246
247
|
tests/columns/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
247
|
-
tests/columns/test_array.py,sha256=
|
248
|
+
tests/columns/test_array.py,sha256=niIkAPRQp49bkpbctaMgpcDai4TMAbM9qkrTGhPFsQY,11627
|
248
249
|
tests/columns/test_base.py,sha256=CTqCNcrqAJTjLXe3MCZgTczrmB3jcVRcOpU4FilpLoQ,3918
|
249
|
-
tests/columns/test_bigint.py,sha256=
|
250
|
-
tests/columns/test_boolean.py,sha256=
|
251
|
-
tests/columns/test_bytea.py,sha256
|
252
|
-
tests/columns/test_choices.py,sha256=
|
250
|
+
tests/columns/test_bigint.py,sha256=KzfiItv0cYQZR35V_TL485AitDnOZQfTzC3C2YCLSn4,1058
|
251
|
+
tests/columns/test_boolean.py,sha256=qm0tg-gKcoYHNV1WVFxgbG4CsngxAJlg-hsGeTNklN8,1626
|
252
|
+
tests/columns/test_bytea.py,sha256=doN8S1eFVU4ntSXIg4IgMSZcbvqW1WJ-AEm3OjKLGkI,1382
|
253
|
+
tests/columns/test_choices.py,sha256=q8TLe7nvGERXyGO_XEryEBR-DuWwFY1jPpscsrXjdXo,4066
|
253
254
|
tests/columns/test_combination.py,sha256=BuBwR7k5X1EkOWraZpjqU6gvtb6ow_k-7N1KQBiW2RA,1681
|
254
|
-
tests/columns/test_date.py,sha256=
|
255
|
+
tests/columns/test_date.py,sha256=QLC6kJMQwM-1mbUP4ksJVM7P8WwjzGZyynH3rHHdSew,1030
|
255
256
|
tests/columns/test_db_column_name.py,sha256=v0QFOQp_atqzMB1n40simVwHeBDi5nyN1N2bSPX5k6w,7670
|
256
257
|
tests/columns/test_defaults.py,sha256=rwlU1fXt3cCl7C51eLlZXqgWkE-K5W0pHvTrwkAKyCo,2896
|
257
|
-
tests/columns/test_double_precision.py,sha256=
|
258
|
+
tests/columns/test_double_precision.py,sha256=7rhcSfDkb2fBh_zEG4UGwD_GW1sy6U9-8NooHuCS09Q,544
|
258
259
|
tests/columns/test_get_sql_value.py,sha256=mKgsInN374jzV99y9mg_ZiG-AvnJgz36SZi89xL7RZM,1768
|
259
|
-
tests/columns/test_interval.py,sha256=
|
260
|
-
tests/columns/test_json.py,sha256=
|
261
|
-
tests/columns/test_jsonb.py,sha256=
|
262
|
-
tests/columns/test_numeric.py,sha256=
|
263
|
-
tests/columns/test_primary_key.py,sha256=
|
264
|
-
tests/columns/test_readable.py,sha256=
|
265
|
-
tests/columns/test_real.py,sha256=
|
266
|
-
tests/columns/test_reference.py,sha256
|
267
|
-
tests/columns/test_reserved_column_names.py,sha256=
|
268
|
-
tests/columns/test_smallint.py,sha256=
|
269
|
-
tests/columns/test_time.py,sha256=
|
270
|
-
tests/columns/test_timestamp.py,sha256=
|
271
|
-
tests/columns/test_timestamptz.py,sha256=
|
272
|
-
tests/columns/test_uuid.py,sha256=
|
273
|
-
tests/columns/test_varchar.py,sha256=
|
260
|
+
tests/columns/test_interval.py,sha256=2M18pfoGxLLosEvwTmuC4zQkM6jWwU0Nv2fqViW3xOs,2780
|
261
|
+
tests/columns/test_json.py,sha256=_cziJvw2uT8e_4u9lKhmU56lgQeE7bEqCXYf6AzfChA,3482
|
262
|
+
tests/columns/test_jsonb.py,sha256=eJQoxpyuQ4yrX-GMJhRkZntyd4tX6M6RhAxYn2-ISII,6727
|
263
|
+
tests/columns/test_numeric.py,sha256=AkTvdvjSsfRsMM79tx4AskUpsTizGBLMY_tC2OII9U4,751
|
264
|
+
tests/columns/test_primary_key.py,sha256=foNG9eTQUJ5yiEVQ7faIEMycW_VuZ7vgzknYXaZ-QXM,4886
|
265
|
+
tests/columns/test_readable.py,sha256=xKVfJuxZcfyncNVKXNryl2WFREX655jwD9DxiLArQiU,758
|
266
|
+
tests/columns/test_real.py,sha256=O_lwiNU4RIHSMY33QuWT0WTvNzV-2ATYYtdbI46E42c,511
|
267
|
+
tests/columns/test_reference.py,sha256=-pDKZl0kjRHz17U-_bldHD4rpg7Ga27lIzXMKOazbWA,2344
|
268
|
+
tests/columns/test_reserved_column_names.py,sha256=S39hq9Ex8QXlbnfjlPLtzwaxICTkXe43Nr2um1S37jI,1419
|
269
|
+
tests/columns/test_smallint.py,sha256=5tm8BpyUmun7uIROaKBgSb27dGu-waqtQAAvpvS66ek,1024
|
270
|
+
tests/columns/test_time.py,sha256=eQ4S-FMhULvkp6OwQaMbheBgQUVFCJ9JGMsKFpsM_vg,1597
|
271
|
+
tests/columns/test_timestamp.py,sha256=vD7F0J_8rZkX_PngfjaMcs5Ugq3lM8GUJXzU7cQLNZM,1686
|
272
|
+
tests/columns/test_timestamptz.py,sha256=P7zblPC6Fjjdk6iOhVUGIKnFFzbbUPVNSY98qbuqE7U,2630
|
273
|
+
tests/columns/test_uuid.py,sha256=taFYNvRZjQztMPbTQHYtwQutvcLnKPt6_aUxsf2o04Q,372
|
274
|
+
tests/columns/test_varchar.py,sha256=fbwBdimHoGaylfrqkFIgQ5m2q80umSoUNHIwofM6j_c,721
|
274
275
|
tests/columns/m2m/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
275
276
|
tests/columns/m2m/base.py,sha256=uH92ECQuY5AjpQXPySwrlruZPZzB4LH2V2FUSXmHRLQ,14563
|
276
277
|
tests/columns/m2m/test_m2m.py,sha256=0ObmIHUJF6CZoNBznc5xXVr5_BbGBqOmWwtpg8IcPt4,13055
|
@@ -303,10 +304,10 @@ tests/query/test_gather.py,sha256=okWANrBoh0Ut1RomWoffiWNpFqiITF6qti-Aa3uYtRk,73
|
|
303
304
|
tests/query/test_querystring.py,sha256=QrqyjwUlFlf5LrsJ7DgjCruq811I0UvrDFPud6rfZNI,5019
|
304
305
|
tests/query/test_slots.py,sha256=I9ZjAYqAJNSFAWg9UyAqy7bm-Z52KiyQ2C_yHk2qqqI,1010
|
305
306
|
tests/query/functions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
306
|
-
tests/query/functions/base.py,sha256=
|
307
|
-
tests/query/functions/test_datetime.py,sha256=
|
307
|
+
tests/query/functions/base.py,sha256=XbLpoSp05PPbGl7aSPW29GGrDKL2B-KsCxji7GhhPNI,515
|
308
|
+
tests/query/functions/test_datetime.py,sha256=X_5LR9XouPiQL-GQWen-NtokunCBHDuZ5gk9elNJNd4,3000
|
308
309
|
tests/query/functions/test_functions.py,sha256=510fqRrOrAZ9NyFoZtlF6lIdiiLriWhZ7vvveWZ8rsc,1984
|
309
|
-
tests/query/functions/test_math.py,sha256=
|
310
|
+
tests/query/functions/test_math.py,sha256=wHaGQdEKISI8WeG9zGVNv62IrWSp4mMH3dPxVxoHy3s,1286
|
310
311
|
tests/query/functions/test_string.py,sha256=RMojkBUzw1Ikrb3nTa7VjJ4FsKfrjpuHUyxQDA-F5Cs,1800
|
311
312
|
tests/query/functions/test_type_conversion.py,sha256=WeYR9UfJnbidle07-akQ1g9hFCd93qT8xUhDF3c58n4,3235
|
312
313
|
tests/query/mixins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -336,7 +337,7 @@ tests/table/test_objects.py,sha256=bir86ks-Ngy8x9Eu9bekOrh6twBYdEkIgTdbBWY6x9s,8
|
|
336
337
|
tests/table/test_output.py,sha256=ZnpPbgVp79JcB6E_ooWQxOpOlhkwNUlMxC-1LSIEc2Y,4304
|
337
338
|
tests/table/test_raw.py,sha256=9PTvYngQi41nYd5lKzkJdTqsEcwrdOXcvZjq-W26CwQ,1683
|
338
339
|
tests/table/test_ref.py,sha256=eYNRnYHzNMXuMbV3B1ca5EidpIg4500q6hr1ccuVaso,269
|
339
|
-
tests/table/test_refresh.py,sha256
|
340
|
+
tests/table/test_refresh.py,sha256=-BaLS6fZiR2RtQaFa7D9WGBjrbrss1-tt5xz1NE_m8E,9250
|
340
341
|
tests/table/test_repr.py,sha256=uahz3_GffGQrf2mDE-4-Pu4AmSLBAyso6-9rbohCl58,446
|
341
342
|
tests/table/test_select.py,sha256=jgeiahIlNFVijxYb3a54g1sJWVfH3llaYrsTBmdicrs,40390
|
342
343
|
tests/table/test_str.py,sha256=eztWNULcjARR1fr9X5n4tojhDNgDfatVyNHwuYrzHAo,1731
|
@@ -353,6 +354,7 @@ tests/table/instance/test_to_dict.py,sha256=gkiYkmcI5qcy5E-ERWWmO-Q8uyVSFfcpJ8d5
|
|
353
354
|
tests/testing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
354
355
|
tests/testing/test_model_builder.py,sha256=bgs-cOYXtnrfgWydU2sZvs2N_Lt2T7La7AAMfIsOev4,6206
|
355
356
|
tests/testing/test_random_builder.py,sha256=Upz9P1bhICVo0udI6Li-5eEdrXKbv8rMMLe0uK6pqB0,1694
|
357
|
+
tests/testing/test_test_case.py,sha256=qyDWYT44EZNyuWhaZXgSOpX48RaRw5u4FgNi87FYt2k,1691
|
356
358
|
tests/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
357
359
|
tests/utils/test_dictionary.py,sha256=GdWujlYQy6t09p2aQHPibkkPNbBYwkFwomKrVnztJTo,1480
|
358
360
|
tests/utils/test_encoding.py,sha256=x1CHLm0rRheZaXz7at3SgkgcrZOmtMB-NtvJC77wQKE,326
|
@@ -365,9 +367,9 @@ tests/utils/test_sql_values.py,sha256=vzxRmy16FfLZPH-sAQexBvsF9MXB8n4smr14qoEOS5
|
|
365
367
|
tests/utils/test_sync.py,sha256=9ytVo56y2vPQePvTeIi9lHIouEhWJbodl1TmzkGFrSo,799
|
366
368
|
tests/utils/test_table_reflection.py,sha256=SIzuat-IpcVj1GCFyOWKShI8YkhdOPPFH7qVrvfyPNE,3794
|
367
369
|
tests/utils/test_warnings.py,sha256=NvSC_cvJ6uZcwAGf1m-hLzETXCqprXELL8zg3TNLVMw,269
|
368
|
-
piccolo-1.
|
369
|
-
piccolo-1.
|
370
|
-
piccolo-1.
|
371
|
-
piccolo-1.
|
372
|
-
piccolo-1.
|
373
|
-
piccolo-1.
|
370
|
+
piccolo-1.16.0.dist-info/LICENSE,sha256=zFIpi-16uIJ420UMIG75NU0JbDBykvrdnXcj5U_EYBI,1059
|
371
|
+
piccolo-1.16.0.dist-info/METADATA,sha256=qsjW9UTKSwkT62sKfdGnTFyllEcn8bE1yKIj54iu4Ek,5178
|
372
|
+
piccolo-1.16.0.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
|
373
|
+
piccolo-1.16.0.dist-info/entry_points.txt,sha256=SJPHET4Fi1bN5F3WqcKkv9SClK3_F1I7m4eQjk6AFh0,46
|
374
|
+
piccolo-1.16.0.dist-info/top_level.txt,sha256=-SR74VGbk43VoPy1HH-mHm97yoGukLK87HE5kdBW6qM,24
|
375
|
+
piccolo-1.16.0.dist-info/RECORD,,
|
tests/columns/test_array.py
CHANGED
@@ -14,7 +14,8 @@ from piccolo.columns.column_types import (
|
|
14
14
|
)
|
15
15
|
from piccolo.querystring import QueryString
|
16
16
|
from piccolo.table import Table
|
17
|
-
from
|
17
|
+
from piccolo.testing.test_case import TableTest
|
18
|
+
from tests.base import engines_only, engines_skip, sqlite_only
|
18
19
|
|
19
20
|
|
20
21
|
class MyTable(Table):
|
tests/columns/test_bigint.py
CHANGED
tests/columns/test_boolean.py
CHANGED
tests/columns/test_bytea.py
CHANGED
tests/columns/test_choices.py
CHANGED
@@ -2,7 +2,8 @@ import enum
|
|
2
2
|
|
3
3
|
from piccolo.columns.column_types import Array, Varchar
|
4
4
|
from piccolo.table import Table
|
5
|
-
from
|
5
|
+
from piccolo.testing.test_case import TableTest
|
6
|
+
from tests.base import engines_only
|
6
7
|
from tests.example_apps.music.tables import Shirt
|
7
8
|
|
8
9
|
|
tests/columns/test_date.py
CHANGED
tests/columns/test_interval.py
CHANGED
@@ -3,7 +3,7 @@ import datetime
|
|
3
3
|
from piccolo.columns.column_types import Interval
|
4
4
|
from piccolo.columns.defaults.interval import IntervalCustom
|
5
5
|
from piccolo.table import Table
|
6
|
-
from
|
6
|
+
from piccolo.testing.test_case import TableTest
|
7
7
|
|
8
8
|
|
9
9
|
class MyTable(Table):
|
tests/columns/test_json.py
CHANGED
tests/columns/test_jsonb.py
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
from piccolo.columns.column_types import JSONB, ForeignKey, Varchar
|
2
2
|
from piccolo.table import Table
|
3
|
-
from
|
3
|
+
from piccolo.testing.test_case import TableTest
|
4
|
+
from tests.base import engines_only, engines_skip
|
4
5
|
|
5
6
|
|
6
7
|
class RecordingStudio(Table):
|
tests/columns/test_numeric.py
CHANGED
tests/columns/test_readable.py
CHANGED
tests/columns/test_real.py
CHANGED
tests/columns/test_reference.py
CHANGED
@@ -8,7 +8,7 @@ from unittest import TestCase
|
|
8
8
|
from piccolo.columns import ForeignKey, Varchar
|
9
9
|
from piccolo.columns.reference import LazyTableReference
|
10
10
|
from piccolo.table import Table
|
11
|
-
from
|
11
|
+
from piccolo.testing.test_case import TableTest
|
12
12
|
|
13
13
|
|
14
14
|
class Band(Table):
|
tests/columns/test_smallint.py
CHANGED
tests/columns/test_time.py
CHANGED
@@ -4,7 +4,8 @@ from functools import partial
|
|
4
4
|
from piccolo.columns.column_types import Time
|
5
5
|
from piccolo.columns.defaults.time import TimeNow
|
6
6
|
from piccolo.table import Table
|
7
|
-
from
|
7
|
+
from piccolo.testing.test_case import TableTest
|
8
|
+
from tests.base import engines_skip
|
8
9
|
|
9
10
|
|
10
11
|
class MyTable(Table):
|
tests/columns/test_timestamp.py
CHANGED
@@ -3,7 +3,7 @@ import datetime
|
|
3
3
|
from piccolo.columns.column_types import Timestamp
|
4
4
|
from piccolo.columns.defaults.timestamp import TimestampNow
|
5
5
|
from piccolo.table import Table
|
6
|
-
from
|
6
|
+
from piccolo.testing.test_case import TableTest
|
7
7
|
|
8
8
|
|
9
9
|
class MyTable(Table):
|
tests/columns/test_uuid.py
CHANGED
tests/columns/test_varchar.py
CHANGED
tests/query/functions/base.py
CHANGED
@@ -12,7 +12,8 @@ from piccolo.query.functions.datetime import (
|
|
12
12
|
Year,
|
13
13
|
)
|
14
14
|
from piccolo.table import Table
|
15
|
-
from
|
15
|
+
from piccolo.testing.test_case import TableTest
|
16
|
+
from tests.base import engines_only, sqlite_only
|
16
17
|
|
17
18
|
|
18
19
|
class Concert(Table):
|
tests/table/test_refresh.py
CHANGED
@@ -0,0 +1,65 @@
|
|
1
|
+
import sys
|
2
|
+
|
3
|
+
import pytest
|
4
|
+
|
5
|
+
from piccolo.engine import engine_finder
|
6
|
+
from piccolo.testing.test_case import (
|
7
|
+
AsyncTableTest,
|
8
|
+
AsyncTransactionTest,
|
9
|
+
TableTest,
|
10
|
+
)
|
11
|
+
from tests.example_apps.music.tables import Band, Manager
|
12
|
+
|
13
|
+
|
14
|
+
class TestTableTest(TableTest):
|
15
|
+
"""
|
16
|
+
Make sure the tables are created automatically.
|
17
|
+
"""
|
18
|
+
|
19
|
+
tables = [Band, Manager]
|
20
|
+
|
21
|
+
async def test_tables_created(self):
|
22
|
+
self.assertTrue(Band.table_exists().run_sync())
|
23
|
+
self.assertTrue(Manager.table_exists().run_sync())
|
24
|
+
|
25
|
+
|
26
|
+
class TestAsyncTableTest(AsyncTableTest):
|
27
|
+
"""
|
28
|
+
Make sure the tables are created automatically in async tests.
|
29
|
+
"""
|
30
|
+
|
31
|
+
tables = [Band, Manager]
|
32
|
+
|
33
|
+
async def test_tables_created(self):
|
34
|
+
self.assertTrue(await Band.table_exists())
|
35
|
+
self.assertTrue(await Manager.table_exists())
|
36
|
+
|
37
|
+
|
38
|
+
@pytest.mark.skipif(sys.version_info <= (3, 11), reason="Python 3.11 required")
|
39
|
+
class TestAsyncTransaction(AsyncTransactionTest):
|
40
|
+
"""
|
41
|
+
Make sure that the test exists within a transaction.
|
42
|
+
"""
|
43
|
+
|
44
|
+
async def test_transaction_exists(self):
|
45
|
+
db = engine_finder()
|
46
|
+
assert db is not None
|
47
|
+
self.assertTrue(db.transaction_exists())
|
48
|
+
|
49
|
+
|
50
|
+
@pytest.mark.skipif(sys.version_info <= (3, 11), reason="Python 3.11 required")
|
51
|
+
class TestAsyncTransactionRolledBack(AsyncTransactionTest):
|
52
|
+
"""
|
53
|
+
Make sure that the changes get rolled back automatically.
|
54
|
+
"""
|
55
|
+
|
56
|
+
async def asyncTearDown(self):
|
57
|
+
await super().asyncTearDown()
|
58
|
+
|
59
|
+
assert Manager.table_exists().run_sync() is False
|
60
|
+
|
61
|
+
async def test_insert_data(self):
|
62
|
+
await Manager.create_table()
|
63
|
+
|
64
|
+
manager = Manager({Manager.name: "Guido"})
|
65
|
+
await manager.save()
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|