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_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_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)
#!/usr/bin/env python3 """Add a test refund.""" import getpass import random import string from datetime import datetime from ocflib.printing.quota import add_refund from ocflib.printing.quota import get_connection from ocflib.printing.quota import Refund if __name__ == "__main__": user = "******" password = getpass.getpass("{} password: "******"user: "******"pages: ")), staffer=getpass.getuser(), reason="".join(random.choice(string.ascii_letters) for _ in range(30)), ), )
#!/usr/bin/env python3 """Add a test refund.""" import getpass import random import string from datetime import datetime from ocflib.printing.quota import add_refund from ocflib.printing.quota import get_connection from ocflib.printing.quota import Refund if __name__ == '__main__': user = '******' password = getpass.getpass('{} password: '******'user: '******'pages: ')), staffer=getpass.getuser(), reason=''.join( random.choice(string.ascii_letters) for _ in range(30)), ), )