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)