initial config for multi db tests
This commit is contained in:
25
.travis.yml
25
.travis.yml
@ -5,15 +5,28 @@ dist: xenial
|
|||||||
cache: pip
|
cache: pip
|
||||||
|
|
||||||
python:
|
python:
|
||||||
- "3.6"
|
- "3.6"
|
||||||
- "3.7"
|
- "3.7"
|
||||||
- "3.8"
|
- "3.8"
|
||||||
|
|
||||||
|
env:
|
||||||
|
- TEST_DATABASE_URLS="postgresql://localhost/test_database, mysql://localhost/test_database, sqlite:///test.db"
|
||||||
|
|
||||||
|
services:
|
||||||
|
- postgresql
|
||||||
|
- mysql
|
||||||
|
|
||||||
|
|
||||||
install:
|
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:
|
script:
|
||||||
- scripts/test.sh
|
- scripts/test.sh
|
||||||
|
|
||||||
after_script:
|
after_script:
|
||||||
- codecov
|
- codecov
|
||||||
@ -1,7 +1,15 @@
|
|||||||
databases[sqlite]
|
databases[sqlite]
|
||||||
|
databases[postgresql]
|
||||||
|
databases[mysql]
|
||||||
pydantic
|
pydantic
|
||||||
sqlalchemy
|
sqlalchemy
|
||||||
|
|
||||||
|
# Async database drivers
|
||||||
|
aiomysql
|
||||||
|
aiosqlite
|
||||||
|
asyncpg
|
||||||
|
pymysql
|
||||||
|
|
||||||
# Testing
|
# Testing
|
||||||
pytest
|
pytest
|
||||||
pytest-cov
|
pytest-cov
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
|
os.environ['TEST_DATABASE_URLS'] = "sqlite:///test.db"
|
||||||
|
|
||||||
DATABASE_URL = os.getenv("DATABASE_URL", "sqlite:///test.db")
|
DATABASE_URL = os.getenv("DATABASE_URL", "sqlite:///test.db")
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
import datetime
|
import datetime
|
||||||
|
import os
|
||||||
|
|
||||||
import databases
|
import databases
|
||||||
import pytest
|
import pytest
|
||||||
@ -7,6 +8,10 @@ import sqlalchemy
|
|||||||
import ormar
|
import ormar
|
||||||
from tests.settings import DATABASE_URL
|
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)
|
database = databases.Database(DATABASE_URL, force_rollback=True)
|
||||||
metadata = sqlalchemy.MetaData()
|
metadata = sqlalchemy.MetaData()
|
||||||
|
|
||||||
@ -33,28 +38,45 @@ class Example(ormar.Model):
|
|||||||
|
|
||||||
@pytest.fixture(autouse=True, scope="module")
|
@pytest.fixture(autouse=True, scope="module")
|
||||||
def create_test_database():
|
def create_test_database():
|
||||||
engine = sqlalchemy.create_engine(DATABASE_URL)
|
for url in DATABASE_URLS:
|
||||||
metadata.create_all(engine)
|
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
|
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
|
@pytest.mark.asyncio
|
||||||
async def test_model_crud():
|
async def test_model_crud(database_url):
|
||||||
async with database:
|
async with databases.Database(database_url) as database:
|
||||||
example = Example()
|
async with database.transaction(force_rollback=True):
|
||||||
await example.save()
|
Example.Meta.database = database
|
||||||
|
example = Example()
|
||||||
|
await example.save()
|
||||||
|
|
||||||
await example.load()
|
await example.load()
|
||||||
assert example.created.year == datetime.datetime.now().year
|
assert example.created.year == datetime.datetime.now().year
|
||||||
assert example.created_day == datetime.date.today()
|
assert example.created_day == datetime.date.today()
|
||||||
assert example.description is None
|
assert example.description is None
|
||||||
assert example.value is None
|
assert example.value is None
|
||||||
assert example.data == {}
|
assert example.data == {}
|
||||||
|
|
||||||
await example.update(data={"foo": 123}, value=123.456)
|
await example.update(data={"foo": 123}, value=123.456)
|
||||||
await example.load()
|
await example.load()
|
||||||
assert example.value == 123.456
|
assert example.value == 123.456
|
||||||
assert example.data == {"foo": 123}
|
assert example.data == {"foo": 123}
|
||||||
|
|
||||||
await example.delete()
|
await example.delete()
|
||||||
|
|||||||
Reference in New Issue
Block a user