diff --git a/aurweb/models/accepted_term.py b/aurweb/models/accepted_term.py new file mode 100644 index 00000000..6e8ffe99 --- /dev/null +++ b/aurweb/models/accepted_term.py @@ -0,0 +1,24 @@ +from sqlalchemy.orm import mapper + +from aurweb.db import make_relationship +from aurweb.models.term import Term +from aurweb.models.user import User +from aurweb.schema import AcceptedTerms + + +class AcceptedTerm: + def __init__(self, + User: User = None, Term: Term = None, + Revision: int = None): + self.User = User + self.Term = Term + self.Revision = Revision + + +properties = { + "User": make_relationship(User, AcceptedTerms.c.UsersID, "accepted_terms"), + "Term": make_relationship(Term, AcceptedTerms.c.TermsID, "accepted") +} + +mapper(AcceptedTerm, AcceptedTerms, properties=properties, + primary_key=[AcceptedTerms.c.UsersID, AcceptedTerms.c.TermsID]) diff --git a/test/test_accepted_term.py b/test/test_accepted_term.py new file mode 100644 index 00000000..4dd8a5ca --- /dev/null +++ b/test/test_accepted_term.py @@ -0,0 +1,57 @@ +import pytest + +from sqlalchemy.exc import IntegrityError + +from aurweb.db import create, delete, query +from aurweb.models.accepted_term import AcceptedTerm +from aurweb.models.account_type import AccountType +from aurweb.models.term import Term +from aurweb.models.user import User +from aurweb.testing import setup_test_db + +user, term, accepted_term = None, None, None + + +@pytest.fixture(autouse=True) +def setup(): + global user, term, accepted_term + + setup_test_db("Users", "AcceptedTerms", "Terms") + + account_type = query(AccountType, + AccountType.AccountType == "User").first() + user = create(User, Username="test", Email="test@example.org", + RealName="Test User", Passwd="testPassword", + account_type=account_type) + + term = create(Term, Description="Test term", URL="https://test.term") + + yield term + + delete(Term, Term.ID == term.ID) + delete(User, User.ID == user.ID) + + +def test_accepted_term(): + accepted_term = create(AcceptedTerm, User=user, Term=term) + + # Make sure our AcceptedTerm relationships got initialized properly. + assert accepted_term.User == user + assert accepted_term in user.accepted_terms + assert accepted_term in term.accepted + + delete(AcceptedTerm, AcceptedTerm.User == user, AcceptedTerm.Term == term) + + +def test_accepted_term_null_user_raises_exception(): + from aurweb.db import session + with pytest.raises(IntegrityError): + create(AcceptedTerm, Term=term) + session.rollback() + + +def test_accepted_term_null_term_raises_exception(): + from aurweb.db import session + with pytest.raises(IntegrityError): + create(AcceptedTerm, User=user) + session.rollback()