initial config for multi db tests
This commit is contained in:
13
.travis.yml
13
.travis.yml
@ -9,9 +9,22 @@ python:
|
||||
- "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
|
||||
|
||||
before_script:
|
||||
- psql -c 'create database test_database;' -U postgres
|
||||
- echo 'create database test_database;' | mysql
|
||||
|
||||
|
||||
script:
|
||||
- scripts/test.sh
|
||||
|
||||
|
||||
@ -1,7 +1,15 @@
|
||||
databases[sqlite]
|
||||
databases[postgresql]
|
||||
databases[mysql]
|
||||
pydantic
|
||||
sqlalchemy
|
||||
|
||||
# Async database drivers
|
||||
aiomysql
|
||||
aiosqlite
|
||||
asyncpg
|
||||
pymysql
|
||||
|
||||
# Testing
|
||||
pytest
|
||||
pytest-cov
|
||||
|
||||
@ -1,3 +1,5 @@
|
||||
import os
|
||||
|
||||
os.environ['TEST_DATABASE_URLS'] = "sqlite:///test.db"
|
||||
|
||||
DATABASE_URL = os.getenv("DATABASE_URL", "sqlite:///test.db")
|
||||
|
||||
@ -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,15 +38,32 @@ class Example(ormar.Model):
|
||||
|
||||
@pytest.fixture(autouse=True, scope="module")
|
||||
def create_test_database():
|
||||
engine = sqlalchemy.create_engine(DATABASE_URL)
|
||||
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
|
||||
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:
|
||||
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()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user