aurweb/test/test_voteinfo.py
moson d2d47254b4
housekeep: TU rename - Table/Column names, scripts
TU_VoteInfo -> VoteInfo
TU_Votes -> Votes
TU_VoteInfo.ActiveTUs -> VoteInfo.ActiveUsers

script: tuvotereminder -> votereminder
Signed-off-by: moson <moson@archlinux.org>
2023-09-30 16:45:05 +02:00

177 lines
4.3 KiB
Python

import pytest
from sqlalchemy.exc import IntegrityError
from aurweb import db, time
from aurweb.db import create, rollback
from aurweb.models.account_type import PACKAGE_MAINTAINER_ID
from aurweb.models.user import User
from aurweb.models.voteinfo import VoteInfo
@pytest.fixture(autouse=True)
def setup(db_test):
return
@pytest.fixture
def user() -> User:
with db.begin():
user = create(
User,
Username="test",
Email="test@example.org",
RealName="Test User",
Passwd="testPassword",
AccountTypeID=PACKAGE_MAINTAINER_ID,
)
yield user
def test_voteinfo_creation(user: User):
ts = time.utcnow()
with db.begin():
voteinfo = create(
VoteInfo,
Agenda="Blah blah.",
User=user.Username,
Submitted=ts,
End=ts + 5,
Quorum=0.5,
Submitter=user,
)
assert bool(voteinfo.ID)
assert voteinfo.Agenda == "Blah blah."
assert voteinfo.User == user.Username
assert voteinfo.Submitted == ts
assert voteinfo.End == ts + 5
assert voteinfo.Quorum == 0.5
assert voteinfo.Submitter == user
assert voteinfo.Yes == 0
assert voteinfo.No == 0
assert voteinfo.Abstain == 0
assert voteinfo.ActiveUsers == 0
assert voteinfo in user.voteinfo_set
def test_voteinfo_is_running(user: User):
ts = time.utcnow()
with db.begin():
voteinfo = create(
VoteInfo,
Agenda="Blah blah.",
User=user.Username,
Submitted=ts,
End=ts + 1000,
Quorum=0.5,
Submitter=user,
)
assert voteinfo.is_running() is True
with db.begin():
voteinfo.End = ts - 5
assert voteinfo.is_running() is False
def test_voteinfo_total_votes(user: User):
ts = time.utcnow()
with db.begin():
voteinfo = create(
VoteInfo,
Agenda="Blah blah.",
User=user.Username,
Submitted=ts,
End=ts + 1000,
Quorum=0.5,
Submitter=user,
)
voteinfo.Yes = 1
voteinfo.No = 3
voteinfo.Abstain = 5
# total_votes() should be the sum of Yes, No and Abstain: 1 + 3 + 5 = 9.
assert voteinfo.total_votes() == 9
def test_voteinfo_null_submitter_raises(user: User):
with pytest.raises(IntegrityError):
with db.begin():
create(
VoteInfo,
Agenda="Blah blah.",
User=user.Username,
Submitted=0,
End=0,
Quorum=0.50,
)
rollback()
def test_voteinfo_null_agenda_raises(user: User):
with pytest.raises(IntegrityError):
with db.begin():
create(
VoteInfo,
User=user.Username,
Submitted=0,
End=0,
Quorum=0.50,
Submitter=user,
)
rollback()
def test_voteinfo_null_user_raises(user: User):
with pytest.raises(IntegrityError):
with db.begin():
create(
VoteInfo,
Agenda="Blah blah.",
Submitted=0,
End=0,
Quorum=0.50,
Submitter=user,
)
rollback()
def test_voteinfo_null_submitted_raises(user: User):
with pytest.raises(IntegrityError):
with db.begin():
create(
VoteInfo,
Agenda="Blah blah.",
User=user.Username,
End=0,
Quorum=0.50,
Submitter=user,
)
rollback()
def test_voteinfo_null_end_raises(user: User):
with pytest.raises(IntegrityError):
with db.begin():
create(
VoteInfo,
Agenda="Blah blah.",
User=user.Username,
Submitted=0,
Quorum=0.50,
Submitter=user,
)
rollback()
def test_voteinfo_null_quorum_default(user: User):
with db.begin():
vi = create(
VoteInfo,
Agenda="Blah blah.",
User=user.Username,
Submitted=0,
End=0,
Submitter=user,
)
assert vi.Quorum == 0