Exemplo n.º 1
0
def test_several_jobs_refunds_previous_days_and_semesters(mysql_connection):
    """Multiple jobs and refunds should change the quota correctly over
    different days, semesters, and users."""

    for user in ('mattmcal', 'ckuehl', 'jvperrin'):
        assert_quota(mysql_connection, user, 0, 0)

        # add some jobs and refunds today
        add_job(mysql_connection, TEST_JOB._replace(user=user, pages=1, time=TODAY))
        assert_quota(mysql_connection, user, -1, -1)

        add_refund(mysql_connection, TEST_REFUND._replace(user=user, pages=30))
        assert_quota(mysql_connection, user, 29, 29)

        add_job(mysql_connection, TEST_JOB._replace(user=user, pages=15, time=TODAY))
        assert_quota(mysql_connection, user, 14, 14)

        add_refund(mysql_connection, TEST_REFUND._replace(user=user, pages=3))
        assert_quota(mysql_connection, user, 17, 17)

        # add some refunds yesterday
        add_refund(mysql_connection, TEST_REFUND._replace(user=user, pages=3, time=YESTERDAY))
        assert_quota(mysql_connection, user, 17, 20)

        add_refund(mysql_connection, TEST_REFUND._replace(user=user, pages=8, time=YESTERDAY))
        assert_quota(mysql_connection, user, 17, 28)

        # add some refunds last semester
        add_refund(mysql_connection, TEST_REFUND._replace(user=user, pages=8, time=LAST_SEMESTER))
        assert_quota(mysql_connection, user, 17, 28)

        add_refund(mysql_connection, TEST_REFUND._replace(user=user, pages=3, time=LAST_SEMESTER))
        assert_quota(mysql_connection, user, 17, 28)
Exemplo n.º 2
0
def test_several_jobs_refunds_previous_days_and_semesters(mysql_connection):
    """Multiple jobs and refunds should change the quota correctly over
    different days, semesters, and users."""

    for user in ('mattmcal', 'ckuehl', 'jvperrin'):
        assert_quota(mysql_connection, user, 0, 0)

        # add some jobs and refunds today
        add_job(mysql_connection, TEST_JOB._replace(user=user, pages=1, time=TODAY))
        assert_quota(mysql_connection, user, -1, -1)

        add_refund(mysql_connection, TEST_REFUND._replace(user=user, pages=30))
        assert_quota(mysql_connection, user, 29, 29)

        add_job(mysql_connection, TEST_JOB._replace(user=user, pages=15, time=TODAY))
        assert_quota(mysql_connection, user, 14, 14)

        add_refund(mysql_connection, TEST_REFUND._replace(user=user, pages=3))
        assert_quota(mysql_connection, user, 17, 17)

        # add some refunds yesterday
        add_refund(mysql_connection, TEST_REFUND._replace(user=user, pages=3, time=YESTERDAY))
        assert_quota(mysql_connection, user, 17, 20)

        add_refund(mysql_connection, TEST_REFUND._replace(user=user, pages=8, time=YESTERDAY))
        assert_quota(mysql_connection, user, 17, 28)

        # add some refunds last semester
        add_refund(mysql_connection, TEST_REFUND._replace(user=user, pages=8, time=LAST_SEMESTER))
        assert_quota(mysql_connection, user, 17, 28)

        add_refund(mysql_connection, TEST_REFUND._replace(user=user, pages=3, time=LAST_SEMESTER))
        assert_quota(mysql_connection, user, 17, 28)
Exemplo n.º 3
0
def test_get_quota_user_not_printed_today(mysql_connection):
    """If a user hasn't printed today, we should still be able to get their
    quota."""
    # a user who printed only yesterday
    add_job(mysql_connection, TEST_JOB._replace(user='******', pages=13, time=YESTERDAY))
    assert_quota(mysql_connection, 'mattmcal', 0, -13)

    # a user who printed only last semester
    add_job(mysql_connection, TEST_JOB._replace(user='******', pages=13, time=LAST_SEMESTER))
    assert_quota(mysql_connection, 'ckuehl', 0, 0)
Exemplo n.º 4
0
def test_get_quota_user_not_printed_today(mysql_connection):
    """If a user hasn't printed today, we should still be able to get their
    quota."""
    # a user who printed only yesterday
    add_job(mysql_connection, TEST_JOB._replace(user='******', pages=13, time=YESTERDAY))
    assert_quota(mysql_connection, 'mattmcal', 0, -13)

    # a user who printed only last semester
    add_job(mysql_connection, TEST_JOB._replace(user='******', pages=13, time=LAST_SEMESTER))
    assert_quota(mysql_connection, 'ckuehl', 0, 0)
Exemplo n.º 5
0
def test_jobs_and_refunds_today(mysql_connection):
    """Refunds should add back pages correctly."""
    assert_quota(mysql_connection, 'mattmcal', 0, 0)

    add_job(mysql_connection, TEST_JOB._replace(pages=3))
    assert_quota(mysql_connection, 'mattmcal', -3, -3)

    add_job(mysql_connection, TEST_JOB._replace(pages=5))
    assert_quota(mysql_connection, 'mattmcal', -8, -8)

    add_refund(mysql_connection, TEST_REFUND._replace(pages=1))
    assert_quota(mysql_connection, 'mattmcal', -7, -7)

    add_refund(mysql_connection, TEST_REFUND._replace(pages=3))
    assert_quota(mysql_connection, 'mattmcal', -4, -4)

    # now add another user
    assert_quota(mysql_connection, 'ckuehl', 0, 0)

    add_job(mysql_connection, TEST_JOB._replace(pages=5, user='******'))
    assert_quota(mysql_connection, 'ckuehl', -5, -5)
    assert_quota(mysql_connection, 'mattmcal', -4, -4)

    # and some refunds for that user
    add_refund(mysql_connection, TEST_REFUND._replace(pages=8, user='******'))
    assert_quota(mysql_connection, 'ckuehl', 3, 3)
    assert_quota(mysql_connection, 'mattmcal', -4, -4)

    add_refund(mysql_connection, TEST_REFUND._replace(pages=30, user='******'))
    assert_quota(mysql_connection, 'ckuehl', 33, 33)
    assert_quota(mysql_connection, 'mattmcal', -4, -4)
Exemplo n.º 6
0
def test_refunds_without_jobs(mysql_connection):
    """We should be able to calculate quotas correctly for a user with a refund
    but no jobs."""
    # a user with no jobs at all but a refund today
    assert_quota(mysql_connection, 'ckuehl', 0, 0)

    add_refund(mysql_connection, TEST_REFUND._replace(user='******', pages=10))
    assert_quota(mysql_connection, 'ckuehl', 10, 10)

    # a user with no jobs today and a refund earlier in the semester
    add_job(mysql_connection, TEST_JOB._replace(user='******', pages=5, time=YESTERDAY))
    assert_quota(mysql_connection, 'mattmcal', 0, -5)

    add_refund(mysql_connection, TEST_REFUND._replace(user='******', pages=10, time=YESTERDAY))
    assert_quota(mysql_connection, 'mattmcal', 0, 5)

    # a user with no jobs today and a refund today
    add_job(mysql_connection, TEST_JOB._replace(user='******', pages=5, time=YESTERDAY))
    assert_quota(mysql_connection, 'jvperrin', 0, -5)

    add_refund(mysql_connection, TEST_REFUND._replace(user='******', pages=10))
    assert_quota(mysql_connection, 'jvperrin', 10, 5)

    # a user with just one job (today) but a refund earlier in the semester
    add_job(mysql_connection, TEST_JOB._replace(user='******', pages=5))
    assert_quota(mysql_connection, 'kpengboy', -5, -5)

    add_refund(mysql_connection, TEST_REFUND._replace(user='******', pages=10, time=YESTERDAY))
    assert_quota(mysql_connection, 'kpengboy', -5, 5)
Exemplo n.º 7
0
def test_refunds_without_jobs(mysql_connection):
    """We should be able to calculate quotas correctly for a user with a refund
    but no jobs."""
    # a user with no jobs at all but a refund today
    assert_quota(mysql_connection, 'ckuehl', 0, 0)

    add_refund(mysql_connection, TEST_REFUND._replace(user='******', pages=10))
    assert_quota(mysql_connection, 'ckuehl', 10, 10)

    # a user with no jobs today and a refund earlier in the semester
    add_job(mysql_connection,
            TEST_JOB._replace(user='******', pages=5, time=YESTERDAY))
    assert_quota(mysql_connection, 'mattmcal', 0, -5)

    add_refund(mysql_connection,
               TEST_REFUND._replace(user='******', pages=10, time=YESTERDAY))
    assert_quota(mysql_connection, 'mattmcal', 0, 5)

    # a user with no jobs today and a refund today
    add_job(mysql_connection,
            TEST_JOB._replace(user='******', pages=5, time=YESTERDAY))
    assert_quota(mysql_connection, 'jvperrin', 0, -5)

    add_refund(mysql_connection, TEST_REFUND._replace(user='******',
                                                      pages=10))
    assert_quota(mysql_connection, 'jvperrin', 10, 5)

    # a user with just one job (today) but a refund earlier in the semester
    add_job(mysql_connection, TEST_JOB._replace(user='******', pages=5))
    assert_quota(mysql_connection, 'kpengboy', -5, -5)

    add_refund(mysql_connection,
               TEST_REFUND._replace(user='******', pages=10, time=YESTERDAY))
    assert_quota(mysql_connection, 'kpengboy', -5, 5)
Exemplo n.º 8
0
def test_jobs_and_refunds_today(mysql_connection):
    """Refunds should add back pages correctly."""
    assert_quota(mysql_connection, 'mattmcal', 0, 0)

    add_job(mysql_connection, TEST_JOB._replace(pages=3))
    assert_quota(mysql_connection, 'mattmcal', -3, -3)

    add_job(mysql_connection, TEST_JOB._replace(pages=5))
    assert_quota(mysql_connection, 'mattmcal', -8, -8)

    add_refund(mysql_connection, TEST_REFUND._replace(pages=1))
    assert_quota(mysql_connection, 'mattmcal', -7, -7)

    add_refund(mysql_connection, TEST_REFUND._replace(pages=3))
    assert_quota(mysql_connection, 'mattmcal', -4, -4)

    # now add another user
    assert_quota(mysql_connection, 'ckuehl', 0, 0)

    add_job(mysql_connection, TEST_JOB._replace(pages=5, user='******'))
    assert_quota(mysql_connection, 'ckuehl', -5, -5)
    assert_quota(mysql_connection, 'mattmcal', -4, -4)

    # and some refunds for that user
    add_refund(mysql_connection, TEST_REFUND._replace(pages=8, user='******'))
    assert_quota(mysql_connection, 'ckuehl', 3, 3)
    assert_quota(mysql_connection, 'mattmcal', -4, -4)

    add_refund(mysql_connection, TEST_REFUND._replace(pages=30, user='******'))
    assert_quota(mysql_connection, 'ckuehl', 33, 33)
    assert_quota(mysql_connection, 'mattmcal', -4, -4)
Exemplo n.º 9
0
def test_semesterly_quota_limits_daily_quota(mysql_connection):
    """The daily quota should be limited by the semesterly quota."""
    assert_quota(mysql_connection, 'mattmcal', 0, 0)

    add_job(mysql_connection, TEST_JOB._replace(pages=FAKE_SEMESTERLY_QUOTA - 5, time=YESTERDAY))
    assert_quota(mysql_connection, 'mattmcal', -FAKE_DAILY_QUOTA + 5, -FAKE_SEMESTERLY_QUOTA + 5)

    add_job(mysql_connection, TEST_JOB._replace(pages=5, time=YESTERDAY))
    assert_quota(mysql_connection, 'mattmcal', -FAKE_DAILY_QUOTA, -FAKE_SEMESTERLY_QUOTA)

    # and now we should hit a floor at zero even if we somehow exceeded the quota
    add_job(mysql_connection, TEST_JOB._replace(pages=3, time=YESTERDAY))
    assert_quota(mysql_connection, 'mattmcal', -FAKE_DAILY_QUOTA, -FAKE_SEMESTERLY_QUOTA)
Exemplo n.º 10
0
def test_semesterly_quota_limits_daily_quota(mysql_connection):
    """The daily quota should be limited by the semesterly quota."""
    assert_quota(mysql_connection, 'mattmcal', 0, 0)

    add_job(mysql_connection, TEST_JOB._replace(pages=FAKE_SEMESTERLY_QUOTA - 5, time=YESTERDAY))
    assert_quota(mysql_connection, 'mattmcal', -FAKE_DAILY_QUOTA + 5, -FAKE_SEMESTERLY_QUOTA + 5)

    add_job(mysql_connection, TEST_JOB._replace(pages=5, time=YESTERDAY))
    assert_quota(mysql_connection, 'mattmcal', -FAKE_DAILY_QUOTA, -FAKE_SEMESTERLY_QUOTA)

    # and now we should hit a floor at zero even if we somehow exceeded the quota
    add_job(mysql_connection, TEST_JOB._replace(pages=3, time=YESTERDAY))
    assert_quota(mysql_connection, 'mattmcal', -FAKE_DAILY_QUOTA, -FAKE_SEMESTERLY_QUOTA)
Exemplo n.º 11
0
def test_several_jobs_today(mysql_connection):
    """Multiple jobs should decrease quota correctly."""
    assert_quota(mysql_connection, 'mattmcal', 0, 0)

    add_job(mysql_connection, TEST_JOB._replace(pages=3))
    assert_quota(mysql_connection, 'mattmcal', -3, -3)

    add_job(mysql_connection, TEST_JOB._replace(pages=8))
    assert_quota(mysql_connection, 'mattmcal', -11, -11)

    # now add another user
    assert_quota(mysql_connection, 'ckuehl', 0, 0)

    add_job(mysql_connection, TEST_JOB._replace(pages=5, user='******'))
    assert_quota(mysql_connection, 'ckuehl', -5, -5)
    assert_quota(mysql_connection, 'mattmcal', -11, -11)
Exemplo n.º 12
0
def test_several_jobs_today(mysql_connection):
    """Multiple jobs should decrease quota correctly."""
    assert_quota(mysql_connection, 'mattmcal', 0, 0)

    add_job(mysql_connection, TEST_JOB._replace(pages=3))
    assert_quota(mysql_connection, 'mattmcal', -3, -3)

    add_job(mysql_connection, TEST_JOB._replace(pages=8))
    assert_quota(mysql_connection, 'mattmcal', -11, -11)

    # now add another user
    assert_quota(mysql_connection, 'ckuehl', 0, 0)

    add_job(mysql_connection, TEST_JOB._replace(pages=5, user='******'))
    assert_quota(mysql_connection, 'ckuehl', -5, -5)
    assert_quota(mysql_connection, 'mattmcal', -11, -11)
Exemplo n.º 13
0
def test_job_with_weird_chars_works(doc_name, mysql_connection):
    """Jobs with non-ASCII characters should still be added."""
    assert_quota(mysql_connection, 'mattmcal', 0, 0)

    add_job(mysql_connection, TEST_JOB._replace(pages=5, doc_name=doc_name))
    assert_quota(mysql_connection, 'mattmcal', -5, -5)
Exemplo n.º 14
0
def test_several_jobs_previous_days_and_semesters(mysql_connection):
    """Multiple jobs should decrease quota correctly over different days,
    semesters, and users."""
    for user in ('mattmcal', 'ckuehl', 'jvperrin'):
        assert_quota(mysql_connection, user, 0, 0)

        # add some jobs today
        add_job(mysql_connection,
                TEST_JOB._replace(user=user, pages=1, time=TODAY))
        assert_quota(mysql_connection, user, -1, -1)

        add_job(mysql_connection,
                TEST_JOB._replace(user=user, pages=2, time=TODAY))
        assert_quota(mysql_connection, user, -3, -3)

        # add some jobs yesterday
        add_job(mysql_connection,
                TEST_JOB._replace(user=user, pages=3, time=YESTERDAY))
        assert_quota(mysql_connection, user, -3, -6)

        add_job(mysql_connection,
                TEST_JOB._replace(user=user, pages=5, time=YESTERDAY))
        assert_quota(mysql_connection, user, -3, -11)

        # add some jobs last semester
        add_job(mysql_connection,
                TEST_JOB._replace(user=user, pages=8, time=LAST_SEMESTER))
        assert_quota(mysql_connection, user, -3, -11)

        add_job(mysql_connection,
                TEST_JOB._replace(user=user, pages=13, time=LAST_SEMESTER))
        assert_quota(mysql_connection, user, -3, -11)
Exemplo n.º 15
0
def test_job_with_weird_chars_works(doc_name, mysql_connection):
    """Jobs with non-ASCII characters should still be added."""
    assert_quota(mysql_connection, 'mattmcal', 0, 0)

    add_job(mysql_connection, TEST_JOB._replace(pages=5, doc_name=doc_name))
    assert_quota(mysql_connection, 'mattmcal', -5, -5)
Exemplo n.º 16
0
#!/usr/bin/env python3
"""Add a test job."""
import getpass
import random
import string
from datetime import datetime

from ocflib.printing.printers import PRINTERS
from ocflib.printing.quota import add_job
from ocflib.printing.quota import get_connection
from ocflib.printing.quota import Job

if __name__ == '__main__':
    user = '******'
    password = getpass.getpass('{} password: '******'user: '******'pages: ')),
                queue=random.choice(('single', 'double')),
                printer=random.choice(tuple(PRINTERS)),
                doc_name=''.join(
                    random.choice(string.ascii_letters) for _ in range(30)),
                filesize=random.randint(0, 2**28),
            ),
        )
Exemplo n.º 17
0
def test_several_jobs_previous_days_and_semesters(mysql_connection):
    """Multiple jobs should decrease quota correctly over different days,
    semesters, and users."""
    for user in ('mattmcal', 'ckuehl', 'jvperrin'):
        assert_quota(mysql_connection, user, 0, 0)

        # add some jobs today
        add_job(mysql_connection, TEST_JOB._replace(user=user, pages=1, time=TODAY))
        assert_quota(mysql_connection, user, -1, -1)

        add_job(mysql_connection, TEST_JOB._replace(user=user, pages=2, time=TODAY))
        assert_quota(mysql_connection, user, -3, -3)

        # add some jobs yesterday
        add_job(mysql_connection, TEST_JOB._replace(user=user, pages=3, time=YESTERDAY))
        assert_quota(mysql_connection, user, -3, -6)

        add_job(mysql_connection, TEST_JOB._replace(user=user, pages=5, time=YESTERDAY))
        assert_quota(mysql_connection, user, -3, -11)

        # add some jobs last semester
        add_job(mysql_connection, TEST_JOB._replace(user=user, pages=8, time=LAST_SEMESTER))
        assert_quota(mysql_connection, user, -3, -11)

        add_job(mysql_connection, TEST_JOB._replace(user=user, pages=13, time=LAST_SEMESTER))
        assert_quota(mysql_connection, user, -3, -11)
Exemplo n.º 18
0
"""Add a test job."""
import getpass
import random
import string
from datetime import datetime

from ocflib.printing.printers import PRINTERS
from ocflib.printing.quota import add_job
from ocflib.printing.quota import get_connection
from ocflib.printing.quota import Job


if __name__ == '__main__':
    user = '******'
    password = getpass.getpass('{} password: '******'user: '******'pages: ')),
                queue=random.choice(('single', 'double')),
                printer=random.choice(tuple(PRINTERS)),
                doc_name=''.join(
                    random.choice(string.ascii_letters) for _ in range(30)
                ),
                filesize=random.randint(0, 2**28),
            ),
        )