From 76f4bcc18171dcbd2139eba315b660d2b9df5e40 Mon Sep 17 00:00:00 2001 From: Tim Van Baak Date: Sat, 29 May 2021 17:38:14 -0700 Subject: [PATCH] Add membership backend --- amanuensis/backend/membership.py | 32 ++++++++++++++++++++++++++++++++ tests/test_membership.py | 28 ++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 amanuensis/backend/membership.py create mode 100644 tests/test_membership.py diff --git a/amanuensis/backend/membership.py b/amanuensis/backend/membership.py new file mode 100644 index 0000000..279b14b --- /dev/null +++ b/amanuensis/backend/membership.py @@ -0,0 +1,32 @@ +""" +Membership query interface +""" + +from amanuensis.db import DbContext, Membership +from amanuensis.errors import ArgumentError + + +def create( + db: DbContext, + user_id: int, + lexicon_id: int, + is_editor: bool) -> Membership: + """ + Create a new user membership in a lexicon. + """ + # Quick argument verification + if not isinstance(user_id, int): + raise ArgumentError('user_id') + if not isinstance(lexicon_id, int): + raise ArgumentError('lexicon_id') + if not isinstance(is_editor, bool): + raise ArgumentError('is_editor') + + new_membership = Membership( + user_id=user_id, + lexicon_id=lexicon_id, + is_editor=is_editor, + ) + db.session.add(new_membership) + db.session.commit() + return new_membership diff --git a/tests/test_membership.py b/tests/test_membership.py new file mode 100644 index 0000000..3d78547 --- /dev/null +++ b/tests/test_membership.py @@ -0,0 +1,28 @@ +from amanuensis.db import * +import amanuensis.backend.lexicon as lexiq +import amanuensis.backend.membership as memq +import amanuensis.backend.user as userq + +from .test_db import db + + +def test_create(db: DbContext): + """Test joining a game.""" + # Set up a user and a lexicon + new_user = userq.create(db, 'username', 'password', 'user', 'a@b.c', False) + assert new_user.id, 'Failed to create user' + new_lexicon = lexiq.create(db, 'Test', None, 'prompt') + assert new_lexicon.id, 'Failed to create lexicon' + + # Add the user to the lexicon as an editor + mem = memq.create(db, new_user.id, new_lexicon.id, True) + assert mem, 'Failed to create membership' + + # Check that the user and lexicon are mutually visible in the ORM relationships + assert new_user.memberships, 'User memberships not updated' + assert new_lexicon.memberships, 'Lexicon memberships not updated' + assert new_user.memberships[0].lexicon_id == new_lexicon.id + assert new_lexicon.memberships[0].user_id == new_user.id + + # Check that the editor flag was set properly + assert new_lexicon.memberships