From 11c4926502e0767ee2435a79dd1c8ecaee727086 Mon Sep 17 00:00:00 2001 From: Kevin Morris Date: Thu, 10 Jun 2021 17:46:29 -0700 Subject: [PATCH] add PackageSource SQLAlchemy ORM model Signed-off-by: Kevin Morris --- aurweb/models/package_source.py | 31 +++++++++++++++++++++++ test/test_package_source.py | 44 +++++++++++++++++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 aurweb/models/package_source.py create mode 100644 test/test_package_source.py diff --git a/aurweb/models/package_source.py b/aurweb/models/package_source.py new file mode 100644 index 00000000..4ffa23df --- /dev/null +++ b/aurweb/models/package_source.py @@ -0,0 +1,31 @@ +from sqlalchemy import Column, ForeignKey, Integer +from sqlalchemy.exc import IntegrityError +from sqlalchemy.orm import backref, relationship + +import aurweb.models.package + +from aurweb.models.declarative import Base + + +class PackageSource(Base): + __tablename__ = "PackageSources" + + PackageID = Column(Integer, ForeignKey("Packages.ID", ondelete="CASCADE"), + nullable=False) + Package = relationship( + "Package", backref=backref("package_sources", lazy="dynamic"), + foreign_keys=[PackageID]) + + __mapper_args__ = {"primary_key": [PackageID]} + + def __init__(self, + Package: aurweb.models.package.Package = None, + **kwargs): + super().__init__(**kwargs) + + self.Package = Package + if not self.Package: + raise IntegrityError( + statement="Foreign key PackageID cannot be null.", + orig="PackageSources.PackageID", + params=("NULL")) diff --git a/test/test_package_source.py b/test/test_package_source.py new file mode 100644 index 00000000..7453f756 --- /dev/null +++ b/test/test_package_source.py @@ -0,0 +1,44 @@ +import pytest + +from sqlalchemy.exc import IntegrityError + +from aurweb.db import create, query, rollback +from aurweb.models.account_type import AccountType +from aurweb.models.package import Package +from aurweb.models.package_base import PackageBase +from aurweb.models.package_source import PackageSource +from aurweb.models.user import User +from aurweb.testing import setup_test_db + +user = pkgbase = package = None + + +@pytest.fixture(autouse=True) +def setup(): + global user, pkgbase, package + + setup_test_db("PackageSources", "Packages", "PackageBases", "Users") + + account_type = query(AccountType, + AccountType.AccountType == "User").first() + user = create(User, Username="test", Email="test@example.org", + RealName="Test User", Passwd="testPassword", + AccountType=account_type) + pkgbase = create(PackageBase, + Name="test-package", + Maintainer=user) + package = create(Package, PackageBase=pkgbase, Name="test-package") + + +def test_package_source(): + pkgsource = create(PackageSource, Package=package) + assert pkgsource.Package == package + # By default, PackageSources.Source assigns the string '/dev/null'. + assert pkgsource.Source == "/dev/null" + assert pkgsource.SourceArch is None + + +def test_package_source_null_package_raises_exception(): + with pytest.raises(IntegrityError): + create(PackageSource) + rollback()