diff --git a/aurweb/models/package_request.py b/aurweb/models/package_request.py index 00f46ce2..a5125cee 100644 --- a/aurweb/models/package_request.py +++ b/aurweb/models/package_request.py @@ -8,6 +8,17 @@ import aurweb.models.user from aurweb.models.declarative import Base +PENDING = "Pending" +CLOSED = "Closed" +ACCEPTED = "Accepted" +REJECTED = "Rejected" + +# Integer values used for the Status column of PackageRequest. +PENDING_ID = 0 +CLOSED_ID = 1 +ACCEPTED_ID = 2 +REJECTED_ID = 3 + class PackageRequest(Base): __tablename__ = "PackageRequests" @@ -40,6 +51,13 @@ class PackageRequest(Base): __mapper_args__ = {"primary_key": [ID]} + STATUS_DISPLAY = { + PENDING_ID: PENDING, + CLOSED_ID: CLOSED, + ACCEPTED_ID: ACCEPTED, + REJECTED_ID: REJECTED + } + def __init__(self, RequestType: aurweb.models.request_type.RequestType = None, PackageBase: aurweb.models.package_base.PackageBase = None, @@ -91,3 +109,7 @@ class PackageRequest(Base): statement="Column ClosureComment cannot be null.", orig="PackageRequests.ClosureComment", params=("NULL")) + + def status_display(self) -> str: + """ Return a display string for the Status column. """ + return self.STATUS_DISPLAY[self.Status] diff --git a/test/test_package_request.py b/test/test_package_request.py index fc839836..c28af6bd 100644 --- a/test/test_package_request.py +++ b/test/test_package_request.py @@ -4,9 +4,10 @@ import pytest from sqlalchemy.exc import IntegrityError -from aurweb.db import create, query, rollback +from aurweb.db import commit, create, query, rollback from aurweb.models.package_base import PackageBase -from aurweb.models.package_request import PackageRequest +from aurweb.models.package_request import (ACCEPTED, ACCEPTED_ID, CLOSED, CLOSED_ID, PENDING, PENDING_ID, REJECTED, + REJECTED_ID, PackageRequest) from aurweb.models.request_type import RequestType from aurweb.models.user import User from aurweb.testing import setup_test_db @@ -117,3 +118,32 @@ def test_package_request_null_closure_comment_raises_exception(): User=user, PackageBase=pkgbase, PackageBaseName=pkgbase.Name, Comments=str()) rollback() + + +def test_package_request_status_display(): + """ Test status_display() based on the Status column value. """ + request_type = query(RequestType, RequestType.Name == "merge").first() + + pkgreq = create(PackageRequest, RequestType=request_type, + User=user, PackageBase=pkgbase, + PackageBaseName=pkgbase.Name, + Comments=str(), ClosureComment=str(), + Status=PENDING_ID) + assert pkgreq.status_display() == PENDING + + pkgreq.Status = CLOSED_ID + commit() + assert pkgreq.status_display() == CLOSED + + pkgreq.Status = ACCEPTED_ID + commit() + assert pkgreq.status_display() == ACCEPTED + + pkgreq.Status = REJECTED_ID + commit() + assert pkgreq.status_display() == REJECTED + + pkgreq.Status = 124 + commit() + with pytest.raises(KeyError): + pkgreq.status_display()