add aurweb.models.user.User

+ Added aurweb.models.user.User class. This is the first example
  of an sqlalchemy ORM model. We can search for users via for example:
  `session.query(User).filter(User.ID==1).first()`, where `session` is
  a configured `aurweb.db.session` object.
+ Along with the User class, defined the AccountType class.
  Each User maintains a relationship to its AccountType via User.AccountType.
+ Added AccountType.users backref.

Signed-off-by: Kevin Morris <kevr@0cost.org>
This commit is contained in:
Kevin Morris 2021-03-29 15:20:32 -07:00
parent e860d828b6
commit 8a47afd2ea
2 changed files with 95 additions and 0 deletions

52
test/test_user.py Normal file
View file

@ -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"<User(ID='{user.ID}', " + \
"AccountType='User', Username='test')>"
session.delete(user)