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))
Exemple #15
0
"""
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>'