diff --git a/aurweb/models/user.py b/aurweb/models/user.py new file mode 100644 index 00000000..ba91c439 --- /dev/null +++ b/aurweb/models/user.py @@ -0,0 +1,43 @@ +from sqlalchemy.orm import backref, mapper, relationship + +from aurweb.models.account_type import AccountType +from aurweb.schema import Users + + +class User: + """ An ORM model of a single Users record. """ + + def __init__(self, **kwargs): + self.AccountTypeID = kwargs.get("AccountTypeID") + + account_type = kwargs.get("AccountType") + if account_type: + self.AccountType = account_type + + self.Username = kwargs.get("Username") + self.Email = kwargs.get("Email") + self.BackupEmail = kwargs.get("BackupEmail") + self.Passwd = kwargs.get("Passwd") + self.Salt = kwargs.get("Salt") + self.RealName = kwargs.get("RealName") + self.LangPreference = kwargs.get("LangPreference") + self.Timezone = kwargs.get("Timezone") + self.Homepage = kwargs.get("Homepage") + self.IRCNick = kwargs.get("IRCNick") + self.PGPKey = kwargs.get("PGPKey") + self.RegistrationTS = kwargs.get("RegistrationTS") + self.CommentNotify = kwargs.get("CommentNotify") + self.UpdateNotify = kwargs.get("UpdateNotify") + self.OwnershipNotify = kwargs.get("OwnershipNotify") + self.SSOAccountID = kwargs.get("SSOAccountID") + + def __repr__(self): + return "" % ( + self.ID, str(self.AccountType), self.Username) + + +# Map schema.Users to User and give it some relationships. +mapper(User, Users, properties={ + "AccountType": relationship(AccountType, + backref=backref("users", lazy="dynamic")) +}) diff --git a/test/test_user.py b/test/test_user.py new file mode 100644 index 00000000..8ac9b00b --- /dev/null +++ b/test/test_user.py @@ -0,0 +1,52 @@ +import pytest + +from aurweb.models.account_type import AccountType +from aurweb.models.user import User +from aurweb.testing import setup_test_db + + +@pytest.fixture(autouse=True) +def setup(): + setup_test_db("Users") + + +def test_user(): + """ Test creating a user and reading its columns. """ + from aurweb.db import session + + # First, grab our target AccountType. + account_type = session.query(AccountType).filter( + AccountType.AccountType == "User").first() + + user = User( + AccountType=account_type, + RealName="Test User", Username="test", + Email="test@example.org", Passwd="abcd", + IRCNick="tester", + Salt="efgh", ResetKey="blahblah") + session.add(user) + session.commit() + + assert user in account_type.users + + # Make sure the user was created and given an ID. + assert bool(user.ID) + + # Search for the user via query API. + result = session.query(User).filter(User.ID == user.ID).first() + + # Compare the result and our original user. + assert result.ID == user.ID + assert result.AccountType.ID == user.AccountType.ID + assert result.Username == user.Username + assert result.Email == user.Email + + # Ensure we've got the correct account type. + assert user.AccountType.ID == account_type.ID + assert user.AccountType.AccountType == account_type.AccountType + + # Test out user string functions. + assert repr(user) == f"" + + session.delete(user)