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
token.dat
database.db
Pipfile.lock
# Byte-compiled / optimized / DLL files
__pycache__/

View File

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