use declarative_base for all ORM models

This rewrites the entire model base as declarative models.
This allows us to more easily customize overlay fields
in tables and is more common.

This effort also brought some DB violations to light which
this commit addresses.

Signed-off-by: Kevin Morris <kevr@0cost.org>
This commit is contained in:
Kevin Morris 2021-06-06 22:45:40 -07:00
parent 7f7a975614
commit 888cf5118a
29 changed files with 398 additions and 292 deletions

View file

@ -22,7 +22,7 @@ def setup():
AccountType.AccountType == "User").first()
user = create(User, Username="test", Email="test@example.org",
RealName="Test User", Passwd="testPassword",
account_type=account_type)
AccountType=account_type)
term = create(Term, Description="Test term", URL="https://test.term")
@ -33,7 +33,7 @@ def test_accepted_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
assert accepted_term in term.accepted_terms
def test_accepted_term_null_user_raises_exception():

View file

@ -43,6 +43,7 @@ def test_user_account_type_relationship():
AccountType=account_type)
assert user.AccountType == account_type
assert account_type.users.filter(User.ID == user.ID).first()
# This must be deleted here to avoid foreign key issues when
# deleting the temporary AccountType in the fixture.
delete(User, User.ID == user.ID)

View file

@ -1,7 +1,7 @@
import pytest
from sqlalchemy import and_
from sqlalchemy.exc import IntegrityError
from sqlalchemy.exc import IntegrityError, OperationalError
import aurweb.config
@ -19,7 +19,7 @@ user = pkgbase = package = None
def setup():
global user, pkgbase, package
setup_test_db("Users", "PackageBases", "Packages")
setup_test_db("Packages", "PackageBases", "Users")
account_type = query(AccountType,
AccountType.AccountType == "User").first()
@ -57,17 +57,17 @@ def test_package():
assert record is not None
def test_package_ci():
def test_package_package_base_cant_change():
""" Test case insensitivity of the database table. """
if aurweb.config.get("database", "backend") == "sqlite":
return None # SQLite doesn't seem handle this.
from aurweb.db import session
with pytest.raises(IntegrityError):
with pytest.raises(OperationalError):
create(Package,
PackageBase=pkgbase,
Name="Beautiful-Package")
Name="invalidates-old-package-packagebase-relationship")
session.rollback()

View file

@ -25,7 +25,7 @@ def setup():
AccountType.AccountType == "User").first()
user = create(User, Username="test", Email="test@example.org",
RealName="Test User", Passwd="testPassword",
account_type=account_type)
AccountType=account_type)
group = create(Group, Name="Test Group")
pkgbase = create(PackageBase, Name="test-package", Maintainer=user)

View file

@ -25,7 +25,7 @@ def setup():
AccountType.AccountType == "User").first()
user = create(User, Username="test", Email="test@example.org",
RealName="Test User", Passwd="testPassword",
account_type=account_type)
AccountType=account_type)
license = create(License, Name="Test License")
pkgbase = create(PackageBase, Name="test-package", Maintainer=user)

View file

@ -10,12 +10,12 @@ from aurweb.models.session import Session, generate_unique_sid
from aurweb.models.user import User
from aurweb.testing import setup_test_db
user = session = None
account_type = user = session = None
@pytest.fixture(autouse=True)
def setup():
global user, session
global account_type, user, session
setup_test_db("Users", "Sessions")
@ -35,7 +35,10 @@ def test_session():
def test_session_cs():
""" Test case sensitivity of the database table. """
session_cs = create(Session, UsersID=user.ID,
user2 = create(User, Username="test2", Email="test2@example.org",
ResetKey="testReset2", Passwd="testPassword",
AccountType=account_type)
session_cs = create(Session, UsersID=user2.ID,
SessionID="TESTSESSION",
LastUpdateTS=datetime.utcnow().timestamp())
assert session_cs.SessionID == "TESTSESSION"