initial config for multi db tests

This commit is contained in:
collerek
2020-09-16 12:33:12 +02:00
parent a5d9916575
commit 31096d3f93
5 changed files with 69 additions and 24 deletions

View File

@ -1,3 +1,5 @@
import os
os.environ['TEST_DATABASE_URLS'] = "sqlite:///test.db"
DATABASE_URL = os.getenv("DATABASE_URL", "sqlite:///test.db")

View File

@ -1,4 +1,5 @@
import datetime
import os
import databases
import pytest
@ -7,6 +8,10 @@ import sqlalchemy
import ormar
from tests.settings import DATABASE_URL
assert "TEST_DATABASE_URLS" in os.environ, "TEST_DATABASE_URLS is not set."
DATABASE_URLS = [url.strip() for url in os.environ["TEST_DATABASE_URLS"].split(",")]
database = databases.Database(DATABASE_URL, force_rollback=True)
metadata = sqlalchemy.MetaData()
@ -33,28 +38,45 @@ class Example(ormar.Model):
@pytest.fixture(autouse=True, scope="module")
def create_test_database():
engine = sqlalchemy.create_engine(DATABASE_URL)
metadata.create_all(engine)
for url in DATABASE_URLS:
database_url = databases.DatabaseURL(url)
if database_url.scheme == "mysql":
url = str(database_url.replace(driver="pymysql"))
elif database_url.scheme == "postgresql+aiopg":
url = str(database_url.replace(driver=None))
engine = sqlalchemy.create_engine(url)
metadata.create_all(engine)
yield
metadata.drop_all(engine)
for url in DATABASE_URLS:
database_url = databases.DatabaseURL(url)
if database_url.scheme == "mysql":
url = str(database_url.replace(driver="pymysql"))
elif database_url.scheme == "postgresql+aiopg":
url = str(database_url.replace(driver=None))
engine = sqlalchemy.create_engine(url)
metadata.drop_all(engine)
@pytest.mark.parametrize("database_url", DATABASE_URLS)
@pytest.mark.asyncio
async def test_model_crud():
async with database:
example = Example()
await example.save()
async def test_model_crud(database_url):
async with databases.Database(database_url) as database:
async with database.transaction(force_rollback=True):
Example.Meta.database = database
example = Example()
await example.save()
await example.load()
assert example.created.year == datetime.datetime.now().year
assert example.created_day == datetime.date.today()
assert example.description is None
assert example.value is None
assert example.data == {}
await example.load()
assert example.created.year == datetime.datetime.now().year
assert example.created_day == datetime.date.today()
assert example.description is None
assert example.value is None
assert example.data == {}
await example.update(data={"foo": 123}, value=123.456)
await example.load()
assert example.value == 123.456
assert example.data == {"foo": 123}
await example.update(data={"foo": 123}, value=123.456)
await example.load()
assert example.value == 123.456
assert example.data == {"foo": 123}
await example.delete()
await example.delete()