def test_donorlist(): l1 = DonorList() assert l1.donors == [] l2 = DonorList(d1, d2) assert l2.donors == [d1, d2] ds = [d1, d2] l3 = DonorList(*ds) assert l3.donors == ds
def test_sort_by(): d1 = Donor('Alice', 200, 200) d2 = Donor('Bill', 100, 100, 100, 100, 100) l1 = DonorList(d1, d2) assert l1.sort_by('total') == [d2, d1] assert l1.sort_by('total', low_to_high=True) == [d1, d2] assert l1.sort_by('average') == [d1, d2] assert l1.sort_by('average', low_to_high=True) == [d2, d1] assert l1.sort_by('num') == [d2, d1] assert l1.sort_by('num', low_to_high=True) == [d1, d2] with pytest.raises(KeyError): l1.sort_by('foo')
def test_from_dictionary(): donors = { 'Benedict Cumberbatch': [200000.0], 'Elon Musk': [10000.0, 150000.0, 100000.0] } l1 = DonorList.from_dictionary(donors) assert 'Benedict Cumberbatch' in l1 assert l1['Elon Musk'] == Donor('Elon Musk', 10000.0, 150000.0, 100000.0)
def test_donorlist_contains(): l1 = DonorList(d1, d2) assert d1 in l1 assert d3 not in l1 assert 'Abigail' in l1 assert 'Frankie' not in l1 d4 = Donor('Abigail', 200) d5 = Donor('Annie', 50) assert d4 not in l1 assert d5 not in l1
def test_write_to(): f1 = io.StringIO() d1 = Donor('Agatha Smith', 200000.0) d2 = Donor('Brett Taylor', 100.0, 150.0, 89.90) l1 = DonorList(d1, d2) l1.write_to(f1) csv = f1.getvalue() assert (csv == 'Agatha Smith,200000.00\n' + 'Brett Taylor,100.00,150.00,89.90\n') l2 = DonorList() f2 = io.StringIO() l2.write_to(f2) csv = f2.getvalue() assert csv == ''
def test_donorlist_update(): l1 = DonorList(d1, d2, d3) l1.update(Donor('Abigail', 100)) assert Donor('Abigail', 50, 100) in l1 assert Donor('Abigail', 100) not in l1 assert Donor('Abigail', 50) not in l1 l1.update(Donor('Steve', 25)) assert Donor('Steve', 25) in l1
def test_create_report2(): l1 = DonorList() r1 = l1.report() assert (r1 == 'Donor Name | Total Given | Num Gifts | Average Gift \n' + '------------------------------------------------------------')
def test_report_number(): assert DonorList.number(1001010101010, 5) == '999,999+ ' assert DonorList.number(500, 6) == ' 500 '
def test_report_name(): assert (DonorList.name('Her Royal Majesty Queen Elizabeth', 10) == 'Her Ro... ') assert DonorList.name('Bob', 10) == 'Bob '
def test_report_dollar(): assert DonorList.dollar(1001010101010, 5) == '$999,999.99+' assert DonorList.dollar(50, 10) == '$ 50.00' assert DonorList.dollar(20.35032, 7) == '$ 20.35'
def test_donorlist_get(): l1 = DonorList(d1, d2, d3) assert l1['Abigail'] == d1 with pytest.raises(ValueError): l1['Dirk']
def test_donor_names(): l1 = DonorList(d3, d1, d2) assert l1.donor_names == ['Carla', 'Abigail', 'Berta']
def test_challenge_all(): l1 = DonorList(Donor('Chester', 5, 12, 3), Donor('Buster', 6, 6, 4)) l2 = l1.challenge_all(2, min_donation=10) assert Donor('Chester', 5, 24, 3) in l2 assert Donor('Buster', 6, 6, 4) in l2
def test_challenge_donor(): l1 = DonorList(Donor('Chester', 5, 12, 3), Donor('Buster', 6, 6, 4)) assert (l1.challenge_donor('Chester', 2, min_donation=4, max_donation=6) == Donor('Chester', 10, 12, 3)) assert (l1.challenge_donor('Buster', 2, min_donation=6, max_donation=6) == Donor('Buster', 12, 12, 4))
""" import os import sys from MailroomTools import Donor from MailroomTools import DonorList # donors = { # 'Benedict Cumberbatch': [200000.0], # 'Elon Musk': [10000.0, 150000.0, 100000.0], # 'Dad': [20.0, 5.0], # 'Donald Trump': [2.81], # 'Billy Neighbor': [.54, .01, .25]} with open('donor_file.txt', 'r') as fin: DONORS = DonorList.read_from(fin) def main(): """ Module that drives main menu.""" options = { 'Send a Thank You': print_thank_you, 'Create a Report': print_report, 'Write Thank Yous': write_thank_yous, 'Donors to File': donors_to_file, 'Quit': exit_program} while True: print('\nPlease choose from the following options:') prompt = '\n'.join([ '{} {}'.format(str(i + 1), option) for i, option in enumerate(options)]) + '\n>'