def test_add_donation_2():
    #Add donation from existing donor
    dc = DonorCollection()
    dc.add_donation('Jennifer Lee', 150.0)
    assert dc.lookup_donor('Jennifer Lee') == {
        'gift_amounts': [1350.0, 120.17, 150.0]
    }
Exemplo n.º 2
0
def test_has_donor():
    dc = DonorCollection()
    dc.add_donation('Chris Pine', 1.00)
    assert dc.has_donor('Chris Pine') == 'Chris Pine'
    assert dc.has_donor('CHRIS PINE') == 'Chris Pine'
    assert dc.has_donor('chris pine') == 'Chris Pine'
    assert dc.has_donor('James Dohan') is None
Exemplo n.º 3
0
def test_print_report():
    dc = DonorCollection()
    dc.add_donation('William Shatner', 500.25)
    dc.add_donation('William Shatner', 100.75)
    dc.add_donation('Harold Tunas', 45.00)
    report = dc.print_report()
    assert('Donor Name                | Total Given | Num Gifts | Avergage Gift') in report
    assert('William Shatner            $      601.00           2 $        300.50') in report
    assert('Harold Tunas               $       45.00           1 $         45.00') in report
Exemplo n.º 4
0
def add_update_donor(donation_num):
	global donations
	first_name = input("Enter donor first name> ")
	last_name = input("Enter donor last > ")
	full_name = first_name + ' ' + last_name	
	donation_amount = int(input("Enter a donation amount>"))
	date = input("Enter a donation date (MM-DD-YYYY)> ")
	if donation_num == "first":
		donations = DonorCollection(Donor(full_name, donation_amount, date))
	elif donation_num == "add":
		donations.add_donation(full_name, donation_amount, date)
Exemplo n.º 5
0
 def test_generate_report(self):
     dc = DonorCollection()
     dc.add_donation("first", [111, 222, 333])
     dc.add_donation("second", [555])
     report = dc.generate_report()
     assert "first" in report
     assert "second" in report
     assert "666" in report # sum of first
     assert "222" in report # sum of first
     assert "3" in report # len of first
     assert "555" in report # sum, avg of second
     assert "1" in report # len of second
Exemplo n.º 6
0
 def test_generate_thank_you_letters(self):
     dc = DonorCollection()
     dc.add_donation("first", [111, 222, 333])
     dc.add_donation("second", [555])
     dc.generate_thank_you_letters("testDir")
     os.path.isfile("testDir\\first.txt")
     os.path.isfile("testDir\\second.txt")
     with open("testDir\\first.txt", "r") as f:
         content = f.read()
         assert "first" in content
         assert "666" in content
     with open("testDir\\second.txt", "r") as f:
         content = f.read()
         assert "second" in content
         assert "555" in content
Exemplo n.º 7
0
def test_DonorCollection_class():
    dc = DonorCollection()
    dc.add_new_donor('Bill Gates')
    with pytest.raises(ValueError):
        dc.add_new_donor('Bill Gates')
    dc.add_donation('Bill Gates', 1000.0)
    d = dc.get_donor('Bill Gates')
    assert d.num_donations == 1
    assert d.total_donations == 1000.0
    assert d.donor_name == 'Bill Gates'
    dc.add_new_donor('Paul Allen')
    d2 = dc.get_donor('Paul Allen')
    d2.add_donation(2000.0)
    assert d2.num_donations == 1
    assert d2.total_donations == 2000.0
    assert d2.donor_name == 'Paul Allen'
Exemplo n.º 8
0
def test_list_donors():
    dc = DonorCollection()
    assert dc.list_donors() == ''

    dc.add_donation('Patrick Stewart', 10000.00)
    dc.add_donation('Lavar Burton', 5000.00)
    dc.add_donation('Michael Dorn', 200.00)
    assert dc.list_donors() == 'Patrick Stewart\nLavar Burton\nMichael Dorn'
Exemplo n.º 9
0
def send_thank_you(donors: DonorCollection) -> None:
    """Send a thank you note to a Donor.

    Parameters
    ----------
    donors : DonorCollection
        DonorCollection to operate on
    """

    # Prompt user for a name
    while True:
        name = _get_input(
            "Enter a full name (or 'list' to list the donors):\n> ",
            tuple(donors.get_donor_names()) + ('list', ) + _quit_responses,
            allow_new=True)
        if name == 'list':
            print(donors.get_donor_names())
        else:  # Won't prompt again unless 'list' is entered
            # If quit, return to calling function
            if name in _quit_responses:
                return
            break  # Break out of while loop if a name entered

    # Request a donation amount
    amt = _request_donation()
    if amt is None:  # Return to calling function if quit
        return

    # Add donation to donor
    try:
        donors.add_donation(name, amt)
    except (ValueError, TypeError):
        print("Donations must be positive numbers\n")
    else:
        # Print thank you note
        print(f"\n{donors[name].get_thankyou()}\n")
Exemplo n.º 10
0
 def test_add_donations(self):
     dc = DonorCollection()
     dc.add_donation("first", [111, 222, 333])
     dc.add_donation("first", [444])
     dc.add_donation("second", [555])
     assert "first" in dc.donor_data.keys()
     assert "second" in dc.donor_data.keys()
     assert len(dc.donor_data) == 2
     assert [111, 222, 333, 444] == dc.donor_data["first"].donations
     assert [555] == dc.donor_data["second"].donations
Exemplo n.º 11
0
def test_add_donation():
    dc = DonorCollection()
    dc.add_donation('William Shatner', 500.25)
    d = dc.get_donor('William Shatner')
    assert d.name == 'William Shatner'
    assert d.num_of_donations == 1
    assert d.sum_of_donations == 500.25
    assert d.average_donation == 500.25

    dc.add_donation('William Shatner', 100.75)
    d = dc.get_donor('William Shatner')
    assert d.name == 'William Shatner'
    assert d.num_of_donations == 2
    assert d.sum_of_donations == 601.00
    assert d.average_donation == 300.50

    dc.add_donation('Harold Tunas', 45.00)
    d = dc.get_donor('Harold Tunas')
    assert d.name == 'Harold Tunas'
    assert d.num_of_donations == 1
    assert d.sum_of_donations == 45.00
    assert d.average_donation == 45.00
Exemplo n.º 12
0
#/usr/bin/env python3
import sys
import contextlib
from io import StringIO

from donor_models import Donor, DonorCollection

donations = DonorCollection(Donor("Natasha Singer", 120, '02-08-2010'))
donations.add_donation("Bob Marquardt", 40, '05-08-1994')


def test_send_thank_you():
    temp_stdout = StringIO()
    with contextlib.redirect_stdout(temp_stdout):
        donations.send_thank_you("Natasha Singer")
    output = temp_stdout.getvalue().strip()
    assert "Natasha Singer" in output


def test_get_report():
    temp_stdout = StringIO()
    with contextlib.redirect_stdout(temp_stdout):
        donations.get_report()
    output = temp_stdout.getvalue().strip()
    assert "Natasha Singer" in output


def test_send_letter_all():
    donations.send_letters()
    with open('Natasha_Singer.txt', 'r') as f:
        assert "Natasha Singer" in f.read()
Exemplo n.º 13
0
class MailroomCli():
    """
    MailroomCli: command line interface that interacts with DonorCollection
    """

    _exit_mail = False
    _dc = None

    def __init__(self):
        self._dc = DonorCollection()

    def exit_mail(self):
        self._exit_mail = True

    def print_menu(self):
        print("Object Oriented Mailroom Tasks:\n")
        print("[1] Send a Thank you to a single donor")
        print("[2] Send a Thank you to all donors (to stdout)")
        print("[3] Create a report")
        print("[4] Send letters to all donors")
        print("[9] Exit Mailroom\n")

    def prompt_donor(self):
        donor_name = input("Enter donor name ('list' for all donors) : ")
        if donor_name == 'list':
            namelist = self._dc.list_names()
            if len(namelist) > 1:
                print(namelist)
            donor_name = input("Enter donor name : ")
        while True:
            try:
                donor_amt = input("Enter donation value: ")
                try:
                    donor_amt = float(donor_amt)
                    break
                except ValueError:
                    print("Please enter a numeric donation value")
            except SyntaxError:
                print("Please enter a valid donation value")

        try:
            self._dc.add_new_donor(donor_name)
            self._dc.add_donation(donor_name, donor_amt)
        except ValueError:
            self._dc.add_donation(donor_name, donor_amt)

        return self._dc.get_donor(donor_name)

    def send_thankyou_single_donor_task(self):
        donor = self.prompt_donor()
        print(donor.generate_thankyou())

    def send_thankyou_multiple_donors_task(self):
        self._dc.generate_thankyou_all()

    def send_thankyou_multiple_donors_to_file_task(self):
        filenames = self._dc.generate_thankyou_all_to_file()
        return filenames

    def create_report_task(self):
        print(self._dc.generate_report_all())

    _task_dict = {
        9: exit_mail,
        4: send_thankyou_multiple_donors_to_file_task,
        3: create_report_task,
        2: send_thankyou_multiple_donors_task,
        1: send_thankyou_single_donor_task
    }

    def do_tasks(self):
        while not self._exit_mail:
            self.print_menu()
            response = input("Enter Mailroom Option: ")

            # Validate response
            try:
                response = int(response)
            except ValueError:
                print("Enter a number between 1-9")
                continue

            # Dispatch task based on response
            try:
                self._task_dict[response](self)
            except KeyError:
                print("Please enter a correct task number")
                continue
Exemplo n.º 14
0
def test_get_donor():
    dc = DonorCollection()
    assert dc.get_donor('Leonard Nimoy') is None

    dc.add_donation('Leonard Nimoy', 50000.00)
    assert dc.get_donor('Leonard Nimoy') == Donor('Leonard Nimoy')
Exemplo n.º 15
0
def test_add_donation_1():
    #New donor
    dc = DonorCollection()
    dc.add_donation('Mary Hill', 370.28)
    assert dc.lookup_donor('Mary Hill') == {'gift_amounts': [370.28]}