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
"""
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 amanuensis.db import DbContext, Membership
@ -36,6 +40,27 @@ def create(
):
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(
user_id=user_id,
lexicon_id=lexicon_id,

View File

@ -2,6 +2,7 @@
pytest test fixtures
"""
import pytest
from sqlalchemy.orm import session
from amanuensis.db import DbContext
import amanuensis.backend.character as charq
@ -49,7 +50,9 @@ def make_lexicon(db: DbContext):
}
state["nonce"] += 1
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