membership.create() checks for joinable and player limit; factory creates joinable lexicons by default

This commit is contained in:
Nikolai 2021-06-07 16:29:16 -07:00
parent 8ebb288d1c
commit 6bda9b4b0a
2 changed files with 29 additions and 1 deletions

View File

@ -2,6 +2,10 @@
Membership query interface Membership query interface
""" """
from sqlalchemy.sql.elements import Null
from sqlalchemy.sql.functions import current_date
from sqlalchemy.util.langhelpers import NoneType
from amanuensis.db.models import Lexicon
from sqlalchemy import select, func from sqlalchemy import select, func
from amanuensis.db import DbContext, Membership from amanuensis.db import DbContext, Membership
@ -36,6 +40,27 @@ def create(
): ):
raise ArgumentError("User is already a member of lexicon") raise ArgumentError("User is already a member of lexicon")
# get reference to lexicon for next few checks
lex: Lexicon = db(
select(Lexicon)
.where(Lexicon.id == lexicon_id)
).scalar_one_or_none()
# Verify lexicon is joinable; current no Lexicons are joinable so this is commented out
if not lex.joinable:
raise ArgumentError("Can't join: Lexicon is not joinable")
# Verify lexicon is not full
if lex.player_limit:
if (
db(
select(func.count())
.where(Membership.lexicon_id == lexicon_id)
).scalar()
>= lex.player_limit
):
raise ArgumentError("Can't join: Lexicon is full")
new_membership = Membership( new_membership = Membership(
user_id=user_id, user_id=user_id,
lexicon_id=lexicon_id, lexicon_id=lexicon_id,

View File

@ -2,6 +2,7 @@
pytest test fixtures pytest test fixtures
""" """
import pytest import pytest
from sqlalchemy.orm import session
from amanuensis.db import DbContext from amanuensis.db import DbContext
import amanuensis.backend.character as charq import amanuensis.backend.character as charq
@ -49,7 +50,9 @@ def make_lexicon(db: DbContext):
} }
state["nonce"] += 1 state["nonce"] += 1
updated_kwargs = {**default_kwargs, **kwargs} updated_kwargs = {**default_kwargs, **kwargs}
return lexiq.create(db, **updated_kwargs) lex = lexiq.create(db, **updated_kwargs)
lex.joinable = True
return lex
return lexicon_factory return lexicon_factory