From ebd216edfd4f78db864f044fdc10d13cdc7b20b9 Mon Sep 17 00:00:00 2001 From: Kevin Morris Date: Fri, 11 Jun 2021 16:52:45 -0700 Subject: [PATCH] add PackageComaintainer SQLAlchemy ORM model Signed-off-by: Kevin Morris --- aurweb/models/package_comaintainer.py | 53 +++++++++++++++++++++++++++ test/test_package_comaintainer.py | 49 +++++++++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 aurweb/models/package_comaintainer.py create mode 100644 test/test_package_comaintainer.py diff --git a/aurweb/models/package_comaintainer.py b/aurweb/models/package_comaintainer.py new file mode 100644 index 00000000..88fd58ae --- /dev/null +++ b/aurweb/models/package_comaintainer.py @@ -0,0 +1,53 @@ +from sqlalchemy import Column, ForeignKey, Integer +from sqlalchemy.exc import IntegrityError +from sqlalchemy.orm import backref, relationship + +import aurweb.models.package_base +import aurweb.models.user + +from aurweb.models.declarative import Base + + +class PackageComaintainer(Base): + __tablename__ = "PackageComaintainers" + + UsersID = Column( + Integer, ForeignKey("Users.ID", ondelete="CASCADE"), + nullable=False) + User = relationship( + "User", backref=backref("comaintained", lazy="dynamic"), + foreign_keys=[UsersID]) + + PackageBaseID = Column( + Integer, ForeignKey("PackageBases.ID", ondelete="CASCADE"), + nullable=False) + PackageBase = relationship( + "PackageBase", backref=backref("comaintainers", lazy="dynamic"), + foreign_keys=[PackageBaseID]) + + __mapper_args__ = {"primary_key": [UsersID, PackageBaseID]} + + def __init__(self, + User: aurweb.models.user.User = None, + PackageBase: aurweb.models.package_base.PackageBase = None, + Priority: int = None): + self.User = User + if not self.User: + raise IntegrityError( + statement="Foreign key UsersID cannot be null.", + orig="PackageComaintainers.UsersID", + params=("NULL")) + + self.PackageBase = PackageBase + if not self.PackageBase: + raise IntegrityError( + statement="Foreign key PackageBaseID cannot be null.", + orig="PackageComaintainers.PackageBaseID", + params=("NULL")) + + self.Priority = Priority + if not self.Priority: + raise IntegrityError( + statement="Column Priority cannot be null.", + orig="PackageComaintainers.Priority", + params=("NULL")) diff --git a/test/test_package_comaintainer.py b/test/test_package_comaintainer.py new file mode 100644 index 00000000..ac94a9ba --- /dev/null +++ b/test/test_package_comaintainer.py @@ -0,0 +1,49 @@ +import pytest + +from sqlalchemy.exc import IntegrityError + +from aurweb.db import create, rollback +from aurweb.models.package_base import PackageBase +from aurweb.models.package_comaintainer import PackageComaintainer +from aurweb.models.user import User +from aurweb.testing import setup_test_db + +user = pkgbase = None + + +@pytest.fixture(autouse=True) +def setup(): + global user, pkgbase + + setup_test_db("Users", "PackageBases", "PackageComaintainers") + + user = create(User, Username="test", Email="test@example.org", + RealName="Test User", Passwd="testPassword") + pkgbase = create(PackageBase, Name="test-package", Maintainer=user) + + +def test_package_comaintainer_creation(): + package_comaintainer = create(PackageComaintainer, User=user, PackageBase=pkgbase, + Priority=5) + assert bool(package_comaintainer) + assert package_comaintainer.User == user + assert package_comaintainer.PackageBase == pkgbase + assert package_comaintainer.Priority == 5 + + +def test_package_comaintainer_null_user_raises_exception(): + with pytest.raises(IntegrityError): + create(PackageComaintainer, PackageBase=pkgbase, Priority=1) + rollback() + + +def test_package_comaintainer_null_pkgbase_raises_exception(): + with pytest.raises(IntegrityError): + create(PackageComaintainer, User=user, Priority=1) + rollback() + + +def test_package_comaintainer_null_priority_raises_exception(): + with pytest.raises(IntegrityError): + create(PackageComaintainer, User=user, PackageBase=pkgbase) + rollback()