def test_load():
    dr = DonationRecords()
    dr.load("test_file.json")
    d1 = dr.get_donor("Not There")
    assert d1 is None
    d2 = dr.get_donor("John Doe")
    d3 = Donor("John Doe", [555.55, 666.66])
    assert d2 == d3
def test_donation_records():
    d1 = Donor("Bob Smith", [100, 100, 200, 300])
    d2 = Donor("John Doe", [150, 250])
    d3 = Donor("Sally Jones", [250, 250])
    dr = DonationRecords([d1, d2, d3])
    num_donors = len(dr.donors)
    assert (num_donors == 3)
    assert (dr.get_donor("John Doe") is not None)
    assert (dr.get_donor("No Name") is None)
    dr.add_donor(Donor("Bill Nye", [100]))
    num_donors = len(dr.donors)
    assert (num_donors == 4)
    report_text = dr.create_report()
    assert "Bob Smith" in report_text
    assert "175.00" in report_text  # Bob's average
    assert "700.00" in report_text  # Bob's total
    assert "Sally Jones" in report_text
    assert "250.00" in report_text  # Sally's average
    assert "Bill Nye" in report_text
    assert "100.00" in report_text  # Bill's average
               "\n   q - Quit"
               "\nEnter your selection => "
            )

# main menu dictionary, options and associated functions            
main_menu = {"1": record_donation,
             "2": update_donation,
             "3": print_report,
             "4": thank_all,
             "5": clear_donor_list,
             "q": quit_menu
            }
    
if __name__ == "__main__":
    logging.basicConfig(level=logging.WARN)
    logger = logging.getLogger(__name__)

    # login to mongodb
    client = login_mongodb()
    db = client['mailroom']
    
    # initialize collections if they don't exist
    collist = db.list_collection_names()
    if not "donors" in collist:
        init_db(db)
    
    # create a donor records set
    donation_records = DonationRecords(db)

    display_menu(main_prompt, main_menu, donation_records)
#!/usr/bin/env python3
# Lesson 4, mailroom menu

from mailroom import Donor, DonationRecords

# initialize array of donors
donor_array = [
    Donor("Ned Flanders", [1200.25, 850.35]),
    Donor("Martin Prince", [12.22, 19.56]),
    Donor("Edna Krabappel", [55.43, 118.67, 75.23]),
    Donor("Homer Simpson", [253.64, 772.50, 99.99]),
    Donor("Moe Szylak", [54.23])
]

# create a donor records set
donation_records = DonationRecords(donor_array)


def record_donation():
    """
    Prompt operator for donor name, or 'list' to see names of donors on record.
    Take name entered and either use existing donor, or add new record.
    Then prompt for amount of this donation, then save the donation record
    and print a thank you note.
    """
    while True:
        donor_name = input(
            "\nEnter full name of donor (or 'list' to see names of donors): ")
        if donor_name == "list":
            for d in donation_records.donors:
                print(d.name)
               "\n   2 - Update Record"
               "\n   3 - Create a Report"
               "\n   4 - Send letters to Everyone"
               "\n   5 - Clear donor data"
               "\n   q - Quit"
               "\nEnter your selection => ")

# main menu dictionary, options and associated functions
main_menu = {
    "1": record_donation,
    "2": update_donation,
    "3": print_report,
    "4": thank_all,
    "5": clear_donor_list,
    "q": quit_menu
}

if __name__ == "__main__":
    logging.basicConfig(level=logging.WARN)
    logger = logging.getLogger(__name__)

    # login to neo4j
    driver = login_neo4j()

    init_db(driver)

    # create a donor records set
    donation_records = DonationRecords(driver)

    display_menu(main_prompt, main_menu, donation_records)
def test_save():
    dr = DonationRecords()
    dr.load("test_file.json")
    dr.add_donor(Donor("Jane Doe", [777.77, 888.88]))
    dr.save("test_file_r1.json")
    dr.load("test_file.json")
    d1 = dr.get_donor("Jane Doe")
    assert d1 is None
    dr.load("test_file_r1.json")
    d1 = dr.get_donor("Jane Doe")
    d2 = Donor("Jane Doe", [777.77, 888.88])
    assert d1 == d2