Finalize database deployment readiness
This commit is contained in:
7 files changed
+662
-33
No files matched your search
@@ -0,0 +1,115 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import date
|
||||
import unittest
|
||||
|
||||
from boker.db import database_extensions_available
|
||||
|
||||
|
||||
@unittest.skipUnless(
|
||||
database_extensions_available(),
|
||||
"Database dependencies are not installed.",
|
||||
)
|
||||
class DatabaseFoundationTests(unittest.TestCase):
|
||||
def setUp(self):
|
||||
from app import create_app
|
||||
from boker.db import db
|
||||
|
||||
self.db = db
|
||||
self.app = create_app(
|
||||
{
|
||||
"TESTING": True,
|
||||
"SQLALCHEMY_DATABASE_URI": "sqlite:///:memory:",
|
||||
}
|
||||
)
|
||||
self.ctx = self.app.app_context()
|
||||
self.ctx.push()
|
||||
self.db.create_all()
|
||||
|
||||
def tearDown(self):
|
||||
self.db.session.remove()
|
||||
self.db.drop_all()
|
||||
self.db.engine.dispose()
|
||||
self.ctx.pop()
|
||||
|
||||
def test_owner_league_players_sessions_season_and_events(self):
|
||||
from boker.db_models import LedgerEvent, LeagueMembership, PokerSession
|
||||
from boker.ledger_repositories import append_ledger_event
|
||||
from boker.league_repositories import (
|
||||
create_league,
|
||||
create_player,
|
||||
create_poker_session,
|
||||
create_season,
|
||||
create_user,
|
||||
user_has_league_role,
|
||||
)
|
||||
|
||||
owner = create_user("Owner@Example.com", "correct horse battery staple")
|
||||
self.db.session.flush()
|
||||
league = create_league(owner, "Friday Poker", "friday-poker")
|
||||
player = create_player(league.id, "Alex", "alex")
|
||||
season = create_season(
|
||||
league.id,
|
||||
"Fall 2026",
|
||||
start_date=date(2026, 9, 1),
|
||||
end_date=date(2026, 12, 31),
|
||||
)
|
||||
self.db.session.flush()
|
||||
|
||||
first_session = create_poker_session(
|
||||
league.id,
|
||||
date(2026, 10, 2),
|
||||
season_id=season.id,
|
||||
status="open",
|
||||
)
|
||||
second_session = create_poker_session(
|
||||
league.id,
|
||||
date(2026, 10, 2),
|
||||
season_id=season.id,
|
||||
)
|
||||
self.db.session.flush()
|
||||
|
||||
append_ledger_event(
|
||||
league.id,
|
||||
first_session.id,
|
||||
"buyin",
|
||||
2500,
|
||||
owner.id,
|
||||
player_id=player.id,
|
||||
)
|
||||
append_ledger_event(
|
||||
league.id,
|
||||
first_session.id,
|
||||
"paid",
|
||||
1000,
|
||||
owner.id,
|
||||
player_id=player.id,
|
||||
)
|
||||
append_ledger_event(
|
||||
league.id,
|
||||
first_session.id,
|
||||
"session_close",
|
||||
9999,
|
||||
owner.id,
|
||||
note="Closed after payout review.",
|
||||
)
|
||||
self.db.session.commit()
|
||||
|
||||
membership = LeagueMembership.query.filter_by(
|
||||
league_id=league.id,
|
||||
user_id=owner.id,
|
||||
).one()
|
||||
sessions = PokerSession.query.order_by(PokerSession.sequence_on_date.asc()).all()
|
||||
events = LedgerEvent.query.order_by(LedgerEvent.created_at.asc()).all()
|
||||
|
||||
self.assertEqual(owner.email, "owner@example.com")
|
||||
self.assertEqual(membership.role, "owner")
|
||||
self.assertTrue(user_has_league_role(owner.id, league.id, {"owner"}))
|
||||
self.assertEqual([s.sequence_on_date for s in sessions], [1, 2])
|
||||
self.assertEqual(sessions[0].season_id, season.id)
|
||||
self.assertEqual(events[1].event_type, "paid_out")
|
||||
self.assertEqual(events[2].amount_cents, 0)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in new issue
Block a user