import warnings from datetime import datetime, timedelta import pytest from sqlalchemy import exc as sa_exc from aurweb import db from aurweb.db import create from aurweb.models.ban import Ban, is_banned from aurweb.testing.requests import Request ban = request = None @pytest.fixture(autouse=True) def setup(db_test): global ban, request ts = datetime.utcnow() + timedelta(seconds=30) with db.begin(): ban = create(Ban, IPAddress="127.0.0.1", BanTS=ts) request = Request() def test_ban(): assert ban.IPAddress == "127.0.0.1" assert bool(ban.BanTS) def test_invalid_ban(): with pytest.raises(sa_exc.IntegrityError): bad_ban = Ban(BanTS=datetime.utcnow()) # We're adding a ban with no primary key; this causes an # SQLAlchemy warnings when committing to the DB. # Ignore them. with warnings.catch_warnings(): warnings.simplefilter("ignore", sa_exc.SAWarning) with db.begin(): db.add(bad_ban) # Since we got a transaction failure, we need to rollback. db.rollback() def test_banned(): request.client.host = "127.0.0.1" assert is_banned(request) def test_not_banned(): request.client.host = "192.168.0.1" assert not is_banned(request)