Ejemplo n.º 1
0
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())
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
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()
Ejemplo n.º 4
0
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())
Ejemplo n.º 5
0
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)