def run_app(): book = PhoneBook('personal book') # populate the book with test data for i in range(10): book.add_contact('Jhon' + str(i), 'Smith', '+71234567809' + str(i), favorite_contact=False, telegram='@jhony', email='*****@*****.**') book.add_contact('Jhon_fav', 'Smith', '+712345678090', favorite_contact=book.find_contact('Jhon2', 'Smith'), telegram='@jhony', email='*****@*****.**') book.add_contact('Jhon_fav2', 'Smith', '+712345671090', favorite_contact=book.find_contact('Jhon3', 'Smith'), telegram='@jhony', email='*****@*****.**') print(info_message) while True: cmd = input("Выберите действие:\n").lower() if cmd in cmd_list: if cmd == 'q': break elif cmd == 'p': book.print_contacts() elif cmd == 's': firstname = input("Введите имя:\n") lastname = input("Введите фамилию:\n") print(book.find_contact(firstname, lastname)) elif cmd == 'a': firstname = input("Введите имя:\n") lastname = input("Введите фамилию:\n") phone_number = input("Введите номер:\n") fav_contact_id = input( "Введите любимый контакт по номеру в списке или Enter для пропуска:\n" ) if fav_contact_id: fav_contact = book.find_contact_by_id(fav_contact_id) if not fav_contact: print("Любимый контакт не найдет. Продолжение работы.") print( 'Введите дополнительную информацию в формате "key=value" или Enter для пропуска:\n' ) additional_info = dict() while True: v = input("Введите дополнительную информацию :\n").strip() if v == '': break else: additional_info.update([tuple(v.split('='))]) book.add_contact(firstname, lastname, phone_number, fav_contact, **additional_info) elif cmd == 'd': phone_number = input("Введите номер телефона:\n") print("Контакт(ы) удилен(ы)" if book. del_contact(phone_number) else "Контакт не найден") elif cmd == 'f': pprint(book.get_all_favorite_numbers())
from phonebook import PhoneBook phone_book_name = 'Fun' phone_book = PhoneBook(phone_book_name) phone_book.add_contact('Igor', 'Tsallagov', '+79162208682', Telegram='@ionathz', Email='*****@*****.**', Twitter='@chrismexx', Instagram='@chrismexx', favourite=True)
from phonebook import PhoneBook if __name__ == '__main__': jhon = Contact('Jhon', 'Doe', '+79001234567', work='+78001234567', telega='jhondoe', vk='vk.com/jhondoe') maxim = Contact('Maxim', 'Maximus', '+79007654321', True, telega='maxim', vk='vk.com/maxim', fb='MaximMaximus') print(jhon, maxim, sep='\n') my_contacts = PhoneBook('My Phonebook') my_contacts.add_contact(jhon) my_contacts.add_contact(maxim) my_contacts.view_all() my_contacts.search('Jhon', 'Doe') my_contacts.all_favorite() my_contacts.del_contact('+79001234567') my_contacts.view_all()
class PhoneBookTest(unittest.TestCase): def setUp(self) -> None: # Create instance while setting up tests self.phonebook = PhoneBook() # it is used to free any allocated resources after finishing the tests def tearDown(self) -> None: super().tearDown() def test_lookup_by_name(self): self.phonebook.add_contact("Ahmed", "123") # Test value = self.phonebook.get("Ahmed") # Validate using assertEqual( true value , actual value ) self.assertEqual("123", value) def test_missing_name(self): with self.assertRaises(KeyError): self.phonebook.get("missing") def test_empty_phonebook_is_consistent(self): self.assertTrue(self.phonebook.phonebook_is_consistent()) def test_is_consistent_with_different_entries(self): self.phonebook.add_contact("Amr", "123") self.phonebook.add_contact("Ahmed", "456") self.assertTrue(self.phonebook.phonebook_is_consistent()) def test_is_inconsistent_with_duplicate_entries(self): self.phonebook.add_contact("Amr", "123") self.phonebook.add_contact("Ahmed", "123") self.assertFalse(self.phonebook.phonebook_is_consistent()) def test_is_inconsistent_with_duplicate_prefix(self): self.phonebook.add_contact("Amr", "123") self.phonebook.add_contact("Ahmed", "12345") self.assertFalse(self.phonebook.phonebook_is_consistent())
class TestPhoneBook(unittest.TestCase): """Submodule for unittests, derives from unittest.TestCase""" def setUp(self): """ Create object for all tests """ # Arrange self.phonebook = PhoneBook() def tearDown(self): """ Remove dependencies after test """ self.phonebook = None def test_empty_phonebook(self): """Test that has_contacts return False when phonebook is empty""" self.assertFalse(self.phonebook.has_contacts()) # Assert def test_has_contact_true(self): """Test that has_contacts return True when phonebook is has a contact""" self.phonebook._contacts.append("070-354 78 00") # Arrange self.assertTrue(self.phonebook.has_contacts()) # Assert def test_validate_valid_number(self): """Test validating valid number""" self.assertTrue(self.phonebook.validate_number("070-354 78 00")) def test_validate_number_with_letter(self): """Test validating number with a letter init""" self.assertFalse(self.phonebook.validate_number("070-35b 78 00")) def test_valid_number_with_missing_space(self): """Test validating number with a space missing""" self.assertFalse(self.phonebook.validate_number("070-354 7800")) def test_get_contact_empty(self): """ Test that error is raised when list is empty """ with self.assertRaises(ValueError) as _: self.phonebook.get_contact("Missing") def test_get_contact_fail(self): """ Test that correct value is returned when getting contact that does not exist or is empty """ self.phonebook.add_contact("Andreas", "079-244 07 80") with self.assertRaises(ValueError) as _: self.phonebook.get_contact("Zeldah") def test_add_contact_success(self): """ Test we can add contat. Mock validation method. """ # Arrange contact = ("Andreas", "079-244 07 80") with mock.patch.object(self.phonebook, 'validate_number') as validate_mock: validate_mock.return_value = True # Act result = self.phonebook.add_contact(*contact) # Assert validate_mock.assert_called_once_with(contact[1]) self.assertTrue(result) self.assertEqual(len(self.phonebook._contacts), 1) self.assertEqual(self.phonebook._contacts[0], contact)