first overhaul of tests with new class/sessionmaker;engine/fixture setup

This commit is contained in:
Xevion
2021-02-13 08:30:13 -06:00
parent ee41885e89
commit 7fb9f961b5

View File

@@ -1,74 +1,71 @@
import datetime
import random
import pytest import pytest
from sqlalchemy.orm import Session, sessionmaker
from itertools import count
from bot.models import Guild, Submission, Period
from main import load_db
from bot.db import ContestDatabase, tables numbers = count()
@pytest.fixture(scope='class')
async def SessionClass():
engine = load_db('sqlite:///')
yield sessionmaker(bind=engine)
engine.dispose()
class TestSubmissions:
@pytest.fixture()
async def session(self, SessionClass) -> Session:
session = SessionClass()
yield session
session.commit()
session.close()
@pytest.fixture() @pytest.fixture()
async def db() -> ContestDatabase: def guild(self, session) -> Guild:
db = await ContestDatabase.create(':memory:') guild = Guild(id=next(numbers), submission_channel=next(numbers))
yield db session.add(guild)
await db.conn.close() session.commit()
yield guild
session.delete(guild)
session.close()
@pytest.mark.asyncio @pytest.mark.asyncio
async def test_table_setup(db) -> None: async def test_submission_base(self, session) -> None:
"""Test that all tables were setup by the database.""" period = Period(id=next(numbers))
cur = await db.conn.cursor() session.add(period)
try: submission = Submission(id=next(numbers), user=next(numbers), timestamp=datetime.datetime.utcnow(), period=period)
for table_namedtuple in tables: session.add(submission)
await cur.execute('''SELECT name FROM sqlite_master WHERE type='table' AND name = ?;''',
[table_namedtuple.__name__.lower()])
rows = list(await cur.fetchall())
assert len(rows) == 1
finally:
await cur.close()
class TestGuilds:
@pytest.fixture()
async def session(self, SessionClass) -> Session:
session = SessionClass()
yield session
session.commit()
session.close()
@pytest.mark.asyncio @pytest.mark.asyncio
async def test_guild_setup(db) -> None: async def test_guild_base(session) -> None:
await db.setup_guild(0) guild = Guild(id=0)
guild = await db.get_guild(0) session.commit()
assert guild is not None for guild in session.query(Guild).all():
assert guild.submission is None print(guild)
assert await db.get_guild(1) is None
@pytest.mark.asyncio
async def test_update(db) -> None:
pass pass
class TestPeriods:
@pytest.fixture()
async def session(self, SessionClass) -> Session:
session = SessionClass()
yield session
session.commit()
session.close()
@pytest.mark.asyncio @pytest.mark.asyncio
async def test_generate_update_query(db) -> None: async def test_period_base(session) -> None:
pass period = Period(id=1, guild_id=1)
session.commit()
@pytest.mark.asyncio
async def test_insert(db) -> None:
"""Test automatic namedtuple query"""
pass
@pytest.mark.asyncio
async def test_generate_insert_query(db) -> None:
"""Test INSERT query generation."""
pass
@pytest.mark.asyncio
async def test_submissions(db) -> None:
"""Test all submission related helper functions."""
pass
@pytest.mark.asyncio
async def test_guilds(db) -> None:
"""Test all guild related helper functions"""
pass
@pytest.mark.asyncio
async def test_periods(db) -> None:
"""Test all period related helper functions."""
pass pass