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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
#!/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), ), )
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)
"""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), ), )