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

BIN
.coverage

Binary file not shown.

View File

@ -5,15 +5,28 @@ dist: xenial
cache: pip
python:
- "3.6"
- "3.7"
- "3.8"
- "3.6"
- "3.7"
- "3.8"
env:
- TEST_DATABASE_URLS="postgresql://localhost/test_database, mysql://localhost/test_database, sqlite:///test.db"
services:
- postgresql
- mysql
install:
- pip install -U -r requirements.txt
- pip install -U -r requirements.txt
before_script:
- psql -c 'create database test_database;' -U postgres
- echo 'create database test_database;' | mysql
script:
- scripts/test.sh
- scripts/test.sh
after_script:
- codecov
- codecov

View File

@ -1,7 +1,15 @@
databases[sqlite]
databases[postgresql]
databases[mysql]
pydantic
sqlalchemy
# Async database drivers
aiomysql
aiosqlite
asyncpg
pymysql
# Testing
pytest
pytest-cov

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()