fix poor test formatting, use inheritted TestDatabase class instead for generating guild/period/submission on the fly (working basic tests), update .gitignore for Pipenv lockfile

This commit is contained in:
Xevion
2021-02-13 09:30:27 -06:00
parent 1f46a98f37
commit 9e889d8c8c
2 changed files with 43 additions and 29 deletions

1
.gitignore vendored
View File

@@ -2,6 +2,7 @@
.idea .idea
token.dat token.dat
database.db database.db
Pipfile.lock
# Byte-compiled / optimized / DLL files # Byte-compiled / optimized / DLL files
__pycache__/ __pycache__/

View File

@@ -1,23 +1,25 @@
import datetime import datetime
import random from itertools import count
import pytest import pytest
from sqlalchemy.orm import Session, sessionmaker from sqlalchemy.orm import Session, sessionmaker
from itertools import count
from bot.models import Guild, Submission, Period from bot.models import Guild, Period, Submission
from main import load_db from main import load_db
numbers = count() numbers = count()
@pytest.fixture(scope='class') @pytest.fixture(scope='class')
async def SessionClass(): def SessionClass():
engine = load_db('sqlite:///') engine = load_db('sqlite:///')
yield sessionmaker(bind=engine) yield sessionmaker(bind=engine)
engine.dispose() engine.dispose()
class TestSubmissions:
class TestDatabase(object):
@pytest.fixture() @pytest.fixture()
async def session(self, SessionClass) -> Session: def session(self, SessionClass) -> Session:
session = SessionClass() session = SessionClass()
yield session yield session
session.commit() session.commit()
@@ -32,40 +34,51 @@ class TestSubmissions:
session.delete(guild) session.delete(guild)
session.close() session.close()
@pytest.mark.asyncio @pytest.fixture()
async def test_submission_base(self, session) -> None: def period(self, session: Session, guild: Guild):
period = Period(id=next(numbers), guild=guild)
session.add(period)
session.commit()
yield period
session.delete(period)
session.close()
@pytest.fixture()
def submission(self, session: Session, period: Period) -> Submission:
submission = Submission(id=next(numbers), user=next(numbers), timestamp=datetime.datetime.utcnow(), period=period)
session.add(submission)
session.commit()
yield submission
session.delete(submission)
session.close()
@pytest.mark.usefixtures("session", "guild", "submission", "period")
class TestSubmissions(TestDatabase):
def test_submission_base(self, session) -> None:
period = Period(id=next(numbers)) period = Period(id=next(numbers))
session.add(period) session.add(period)
submission = Submission(id=next(numbers), user=next(numbers), timestamp=datetime.datetime.utcnow(), period=period) submission = Submission(id=next(numbers), user=next(numbers), timestamp=datetime.datetime.utcnow(), period=period)
session.add(submission) session.add(submission)
class TestGuilds: @pytest.mark.usefixtures("session", "guild", "submission", "period")
class TestGuilds(TestDatabase):
def test_guild_base(self, session: Session, guild: Guild) -> None:
for guild in session.query(Guild).all():
print(guild)
pass
@pytest.mark.usefixtures("session", "guild", "submission", "period")
class TestPeriods(TestDatabase):
@pytest.fixture() @pytest.fixture()
async def session(self, SessionClass) -> Session: def session(self, SessionClass) -> Session:
session = SessionClass() session = SessionClass()
yield session yield session
session.commit() session.commit()
session.close() session.close()
@pytest.mark.asyncio def test_period_base(self, session: SessionClass, period: Period) -> None:
async def test_guild_base(session) -> None:
guild = Guild(id=0)
session.commit() session.commit()
for guild in session.query(Guild).all():
print(guild)
pass pass
class TestPeriods:
@pytest.fixture()
async def session(self, SessionClass) -> Session:
session = SessionClass()
yield session
session.commit()
session.close()
@pytest.mark.asyncio
async def test_period_base(session) -> None:
period = Period(id=1, guild_id=1)
session.commit()
pass