diff --git a/tests/compat/test_common.py b/tests/compat/test_common.py new file mode 100644 index 0000000..4005985 --- /dev/null +++ b/tests/compat/test_common.py @@ -0,0 +1,10 @@ +from tests.conftest import manager_for_all_dbs +from tests.models import CompositeTestModel + + +@manager_for_all_dbs +async def test_composite_key(manager): + task_id = 5 + product_type = "boots" + comp = await manager.create(CompositeTestModel, task_id=task_id, product_type=product_type) + assert comp.get_id() == (task_id, product_type) diff --git a/tests/compat/test_shortcuts.py b/tests/compat/test_shortcuts.py index 8157d60..73f1256 100644 --- a/tests/compat/test_shortcuts.py +++ b/tests/compat/test_shortcuts.py @@ -1,9 +1,12 @@ import uuid import peewee +import pytest +import peewee_async from tests.conftest import manager_for_all_dbs from tests.models import CompatTestModel +from tests.models import TestModelAlpha, TestModelBeta, TestModelGamma, TestModel @manager_for_all_dbs @@ -81,3 +84,84 @@ async def test_delete_obj(manager): obj3 = await manager.get_or_none(CompatTestModel, id=obj1.id) assert obj3 is None + + +@manager_for_all_dbs +@pytest.mark.parametrize( + "prefetch_type", + peewee.PREFETCH_TYPE.values() +) +async def test_prefetch(manager, prefetch_type): + alpha_1 = await manager.create( + TestModelAlpha, text='Alpha 1') + alpha_2 = await manager.create( + TestModelAlpha, text='Alpha 2') + + beta_11 = await manager.create( + TestModelBeta, alpha=alpha_1, text='Beta 11') + beta_12 = await manager.create( + TestModelBeta, alpha=alpha_1, text='Beta 12') + _ = await manager.create( + TestModelBeta, alpha=alpha_2, text='Beta 21') + _ = await manager.create( + TestModelBeta, alpha=alpha_2, text='Beta 22') + + gamma_111 = await manager.create( + TestModelGamma, beta=beta_11, text='Gamma 111') + gamma_112 = await manager.create( + TestModelGamma, beta=beta_11, text='Gamma 112') + + result = await peewee_async.prefetch( + TestModelAlpha.select().order_by(TestModelAlpha.id), + TestModelBeta.select().order_by(TestModelBeta.id), + TestModelGamma.select().order_by(TestModelGamma.id), + prefetch_type=prefetch_type, + ) + assert tuple(result) == (alpha_1, alpha_2) + assert tuple(result[0].betas) == (beta_11, beta_12) + assert tuple(result[0].betas[0].gammas) == (gamma_111, gamma_112) + + +@manager_for_all_dbs +async def test_update_obj(manager): + + text = "Test %s" % uuid.uuid4() + obj1 = await manager.create(TestModel, text=text) + + obj1.text = "Test update object" + await manager.update(obj1) + + obj2 = await manager.get(TestModel, id=obj1.id) + assert obj2.text == "Test update object" + + +@manager_for_all_dbs +async def test_create_or_get(manager): + text = "Test %s" % uuid.uuid4() + obj1, created1 = await manager.create_or_get( + TestModel, text=text, data="Data 1") + obj2, created2 = await manager.create_or_get( + TestModel, text=text, data="Data 2") + + assert created1 is True + assert created2 is False + assert obj1 == obj2 + assert obj1.data == "Data 1" + assert obj2.data == "Data 1" + + +@manager_for_all_dbs +async def test_get_or_create(manager): + + text = "Test %s" % uuid.uuid4() + + obj1, created1 = await manager.get_or_create( + TestModel, text=text, defaults={'data': "Data 1"}) + obj2, created2 = await manager.get_or_create( + TestModel, text=text, defaults={'data': "Data 2"}) + + assert created1 is True + assert created2 is False + assert obj1 == obj2 + assert obj1.data == "Data 1" + assert obj2.data == "Data 1" diff --git a/tests/models.py b/tests/models.py index 5013221..cd279eb 100644 --- a/tests/models.py +++ b/tests/models.py @@ -58,11 +58,11 @@ def __str__(self): class CompositeTestModel(peewee_async.AioModel): """A simple "through" table for many-to-many relationship.""" - uuid = peewee.ForeignKeyField(UUIDTestModel) - alpha = peewee.ForeignKeyField(TestModelAlpha) + task_id = peewee.IntegerField() + product_type = peewee.CharField() class Meta: - primary_key = peewee.CompositeKey('uuid', 'alpha') + primary_key = peewee.CompositeKey('task_id', 'product_type') class IntegerTestModel(peewee_async.AioModel): diff --git a/tests/test_common.py b/tests/test_common.py index 9ae15e9..0e240f1 100644 --- a/tests/test_common.py +++ b/tests/test_common.py @@ -5,17 +5,20 @@ import pytest import peewee_async -from tests.conftest import manager_for_all_dbs +from tests.conftest import manager_for_all_dbs, dbs_all from tests.db_config import DB_CLASSES, DB_DEFAULTS -from tests.models import UUIDTestModel, TestModelAlpha, CompositeTestModel, TestModel +from tests.models import UUIDTestModel, TestModel, CompositeTestModel -@manager_for_all_dbs -async def test_composite_key(manager): - obj_uuid = await manager.create(UUIDTestModel, text='UUID') - obj_alpha = await manager.create(TestModelAlpha, text='Alpha') - comp = await manager.create(CompositeTestModel, uuid=obj_uuid, alpha=obj_alpha) - assert (obj_uuid, obj_alpha) == (comp.uuid, comp.alpha) +@dbs_all +async def test_composite_key(db): + task_id = 5 + product_type = "boots" + comp = await CompositeTestModel.aio_create(task_id=task_id, product_type=product_type) + assert comp.get_id() == (task_id, product_type) + + +# TODO rewrite tests below without manager. Move manager tests to compat folder @manager_for_all_dbs diff --git a/tests/test_shortcuts.py b/tests/test_shortcuts.py deleted file mode 100644 index 736b58e..0000000 --- a/tests/test_shortcuts.py +++ /dev/null @@ -1,91 +0,0 @@ -import uuid - -import peewee -import pytest - -import peewee_async -from tests.conftest import manager_for_all_dbs -from tests.models import TestModel, TestModelAlpha, TestModelBeta, TestModelGamma - - -@manager_for_all_dbs -@pytest.mark.parametrize( - "prefetch_type", - peewee.PREFETCH_TYPE.values() -) -async def test_prefetch(manager, prefetch_type): - alpha_1 = await manager.create( - TestModelAlpha, text='Alpha 1') - alpha_2 = await manager.create( - TestModelAlpha, text='Alpha 2') - - beta_11 = await manager.create( - TestModelBeta, alpha=alpha_1, text='Beta 11') - beta_12 = await manager.create( - TestModelBeta, alpha=alpha_1, text='Beta 12') - _ = await manager.create( - TestModelBeta, alpha=alpha_2, text='Beta 21') - _ = await manager.create( - TestModelBeta, alpha=alpha_2, text='Beta 22') - - gamma_111 = await manager.create( - TestModelGamma, beta=beta_11, text='Gamma 111') - gamma_112 = await manager.create( - TestModelGamma, beta=beta_11, text='Gamma 112') - - result = await peewee_async.prefetch( - TestModelAlpha.select().order_by(TestModelAlpha.id), - TestModelBeta.select().order_by(TestModelBeta.id), - TestModelGamma.select().order_by(TestModelGamma.id), - prefetch_type=prefetch_type, - ) - assert tuple(result) == (alpha_1, alpha_2) - assert tuple(result[0].betas) == (beta_11, beta_12) - assert tuple(result[0].betas[0].gammas) == (gamma_111, gamma_112) - - -@manager_for_all_dbs -async def test_update_obj(manager): - - text = "Test %s" % uuid.uuid4() - obj1 = await manager.create(TestModel, text=text) - - obj1.text = "Test update object" - await manager.update(obj1) - - obj2 = await manager.get(TestModel, id=obj1.id) - assert obj2.text == "Test update object" - - -@manager_for_all_dbs -async def test_create_or_get(manager): - text = "Test %s" % uuid.uuid4() - obj1, created1 = await manager.create_or_get( - TestModel, text=text, data="Data 1") - obj2, created2 = await manager.create_or_get( - TestModel, text=text, data="Data 2") - - assert created1 is True - assert created2 is False - assert obj1 == obj2 - assert obj1.data == "Data 1" - assert obj2.data == "Data 1" - - -@manager_for_all_dbs -async def test_get_or_create(manager): - - text = "Test %s" % uuid.uuid4() - - obj1, created1 = await manager.get_or_create( - TestModel, text=text, defaults={'data': "Data 1"}) - obj2, created2 = await manager.get_or_create( - TestModel, text=text, defaults={'data': "Data 2"}) - - assert created1 is True - assert created2 is False - assert obj1 == obj2 - assert obj1.data == "Data 1" - assert obj2.data == "Data 1" - -