class TestDonor(unittest.TestCase): """Unit tests for the Donor class""" def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.test_name = 'Test Donor' self.test_dons = [100, 500, 50.05] self.test_total = sum(self.test_dons) self.test_ave = self.test_total / len(self.test_dons) def setUp(self): self.donor = Donor(self.test_name, self.test_dons) def tearDown(self): pass def test_get_donations(self): """Test donations attribute""" self.assertEqual(self.donor.donations, self.test_dons) def test_set_donations(self): """Test setting donations attribute""" with self.assertRaises(AttributeError): self.donor.donations = [100, 20] def test_get_num_donations(self): """Test num_donations attribute""" self.assertEqual(self.donor.num_donations, len(self.test_dons)) def test_set_num_donations(self): """Test setting num_donations attribute""" with self.assertRaises(AttributeError): self.donor.num_donations = 4 def test_get_total_donations(self): """Test total_donations attribute""" self.assertEqual(self.donor.total_donations, self.test_total) def test_set_total_donations(self): """Test setting total_donations attribute""" with self.assertRaises(AttributeError): self.donor.total_donations = 100 def test_get_ave_donations(self): """Test average_donations attribute""" self.assertEqual(self.donor.average_donations, self.test_ave) def test_set_ave_donations(self): """Test setting average_donations attribute""" with self.assertRaises(AttributeError): self.donor.average_donations = 100 def test_add_donation(self): """Test add_donation method""" donation = random.randint(0, 10000.0) self.donor.add_donation(donation) self.assertEqual(self.donor.donations, self.test_dons + [donation]) self.assertEqual(self.donor.num_donations, len(self.test_dons) + 1) self.assertEqual(self.donor.total_donations, self.test_total + donation) self.assertEqual(self.donor.average_donations, (self.test_total + donation) / (len(self.test_dons) + 1))
def add_donation(self, name, amt): d = self.get_donor(name) if d is None: d = Donor(name, amt) self.add_donor(d) else: d.add_donation(amt)
def test_copy(): d = Donor("Mark", 10) d.add_donation(30) d.add_donation(50) d2 = d.copy(filterFn=lambda d: d > 20 and d < 40, mapFn=lambda d: d * 10) assert d2._donations == [300]
def test_total_donations(): """ Test total_donations property """ d1 = Donor('Maggie', 1000, 2000, 3000) assert d1.total_donations == 6000 d1.add_donation(4000) assert d1.total_donations == 10000 d1.remove_donation(1000) assert d1.total_donations == 9000
def test_average_donation(): """ Test average_donation property """ d1 = Donor('Maggie', 1000, 2000, 3000) assert d1.average_donation == 2000 d1.add_donation(4000) assert d1.average_donation == 2500 d1.remove_donation(1000) assert d1.average_donation == 3000
def test_donor_add_donation(): d1 = Donor("Bob", [Donation(100)]) d1.add_donation(200) curr_time = datetime.datetime.now() # Check length of list, and attributes of the added donation object assert len(d1.donations_list) == 2 assert d1.donations_list[1].amount == 200 assert d1.donations_list[1].date == curr_time
def test_add_donation(): """ Test addition of a donation amount to the donor object, using the add_donation() method in the Donor class """ donor = Donor() donor.add_donation(100) assert 100 in donor.donation_history
def test_thank_you(): """ Test thank_you function, in Donor class that sends thank you email to donor for donation """ donor = Donor() donor.fname = 'Erick' donor.lname = 'Smith' amount = 100 donor.add_donation(amount) email = donor.thank_you_email() assert email == f"Thank you {donor.fname} {donor.lname} for your generous donation of ${amount:.2f} dollars"
def test_add_donor(): """ Test the adding of a donor object to the DonorDb, via the add_donor() method in the DonorDb class """ donor = Donor() donor.fname = 'Erick' donor.lname = 'Smith' donor.add_donation(100) db = DonorDb() db.add_donor(donor) key = donor.fname + ' ' + donor.lname assert key in db.database
def test_challenge(): donors = Donors() d1 = Donor("Mark", 50) d1.add_donation(90) d1.add_donation(110) d2 = Donor("Mary", 80) d2.add_donation(95) d2.add_donation(115) donors.add_donor(d1) donors.add_donor(d2) copy = donors.challenge(3, min_amt=85, max_amt=100) assert copy.get_donor("Mark").donations == (270, ) assert copy.get_donor("Mary").donations == (285, )
def test_letter(): """ Test the a single formatted letter to an individual donor, in the Donor class, letter() method. """ donor = Donor() donor.fname = 'Erick' donor.lname = 'Smith' donor.add_donation(100) expected_template = f"""Dear {donor.fname + ' ' + donor.lname}, Thank you for your kind donation of ${donor.donation_history[-1]}. It will be put to very good use. Sincerely, - The Cloud Squad""" assert expected_template == donor.letter()
def test_add_donation1(): """ Test ability to add donations to donor """ d1 = Donor('Maggie') d2 = Donor('Doug', 1000) d3 = Donor() d1.add_donation(1000) d2.add_donation(2000) d2.add_donation(3000) d3.add_donation(5000) assert 1000 in d1.donations assert 1000 in d2.donations assert 2000 in d2.donations assert 3000 in d2.donations assert 2000 not in d1.donations assert 5000 in d3.donations
def set_data(self): donor = Donor('id', 'f_name', 'L_name', 'M') donor.add_donation('01', 'Mike', 'Lance', 'M') return donor
def test_total_amt(): d = Donor("Mark", 10) assert d.total_amt == 10 d.add_donation(2.34) assert floating_equals(d.total_amt, 12.34)
def test_avg_donations(): d = Donor("Mark", 10) assert floating_equals(d.avg_donation, 10.0) d.add_donation(20) assert floating_equals(d.avg_donation, 15.0)
def test_num_donations(): d = Donor("Mark", 10) assert d.num_donations == 1 d.add_donation(20) assert d.num_donations == 2
def test_add_donation(): d = Donor("Mark", 10) d.add_donation(20) assert d.donations == (10, 20)
response = input(prompt) try: dict_value = dispatch_dict[response] except KeyError: print("Invalid input, please try again.\n") else: if dict_value(charity) == 'quit': sys.exit() if __name__ == '__main__': # TEST DATA new_donor1 = Donor("Fred") new_donor1.add_donation(100) new_donor1.add_donation(1000) new_donor1.add_donation(10000) new_donor2 = Donor("Bob") new_donor2.add_donation(200) new_donor2.add_donation(2000) new_donor2.add_donation(20000) new_donor3 = Donor("Todd") new_donor3.add_donation(300) new_donor3.add_donation(3000) new_donor3.add_donation(30000) new_donor4 = Donor("Sally") new_donor4.add_donation(400)
def setup_initial_charity(): """Helper function for setting up charity for unit tests""" new_donor1 = Donor("Fred") new_donor1.add_donation(100) new_donor1.add_donation(1000) new_donor1.add_donation(10000) new_donor2 = Donor("Bob") new_donor2.add_donation(200) new_donor2.add_donation(2000) new_donor2.add_donation(20000) new_charity = Charity("Foundation") new_charity.add_donor(new_donor1.donor_name, new_donor1.donations_list) new_charity.add_donor(new_donor2.donor_name, new_donor2.donations_list) return new_charity
def test_charity_add_donor(): new_donor1 = Donor("Fred") new_donor1.add_donation(100) new_donor1.add_donation(1000) new_donor1.add_donation(10000) new_donor2 = Donor("Bob") new_donor2.add_donation(200) new_donor2.add_donation(2000) new_donor2.add_donation(20000) # Checks init() new_charity = Charity("Foundation") assert new_charity.charity_name == "Foundation" assert new_charity.donors_dict == {} # Checks add_donor() new_charity.add_donor(new_donor1.donor_name, new_donor1.donations_list) new_charity.add_donor(new_donor2.donor_name, new_donor2.donations_list) assert new_charity.donors_dict["Fred"].donor_name == "Fred" assert new_charity.donors_dict["Fred"].donations_list == new_donor1.donations_list assert new_charity.donors_dict["Bob"].donor_name == "Bob" assert new_charity.donors_dict["Bob"].donations_list == new_donor2.donations_list # Checks print_total_donations() assert new_charity.print_total_donations() == "Donor {} : Total amount is {}\nDonor {} : Total amount is {}\n"\ .format("Fred", 11100, "Bob", 22200)