aurweb/test/test_voteinfo.py
moson-mo db004d5ebd
fix(deps): upgrade to sqlalchemy version 2
Bump sqlalchemy to version 2.0.22

There are quite some changes that happened with v2.
We are currently relying on the "auto-commit" feature which was removed.
For the moment we can use a wrapper class to mimic the auto-commit
behavior allowing us to move to v2.

Ultimately, the (db) session management needs some overhaul though.

Signed-off-by: moson <moson@archlinux.org>
2023-10-17 17:49:07 +02:00

177 lines
4.4 KiB
Python

import pytest
from sqlalchemy.exc import IntegrityError, SAWarning
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), pytest.warns(SAWarning):
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), pytest.warns(SAWarning):
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), pytest.warns(SAWarning):
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), pytest.warns(SAWarning):
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