Пример #1
0
class TestGroup(unittest.TestCase):
    def setUp(self):
        self.group = Group('Pink Floyd')

    def test_group_str(self):
        self.assertEqual('Pink Floyd', str(self.group))

    def test_add_members_to_group(self):
        david = Person('David', 'Gilmour')
        syd = Person('Syd', 'Barret')

        self.group.addPerson(david)
        self.group.addPerson(syd)

        self.assertEqual(2, len(self.group.members))

        # Verify that the People groups count got incremented
        self.assertEqual(1, len(david.groups))
        self.assertEqual(1, len(syd.groups))

        # Try to add person to a group that they are already a member of
        # and verify that the members count doesn't change
        self.group.addPerson(syd)
        self.assertEqual(2, len(self.group.members))

        # The persons' group count did not get incremented neither
        self.assertEqual(1, len(syd.groups))
class TestAddressBook(unittest.TestCase):
    """ Here I've focused on creating tests that matched
    the required features, as stated in the assignment description """
    def setUp(self):
        """ Creates one *address_book* with 2 groups and some people
        in them """
        self.address_book = AddressBook()

        # Groups
        self.jacksons = Group('Jacksons 5')
        self.singers = Group('Singers')

        # Michael jackson will be a member of both groups
        self.mj = Person('Michael', 'Jackson')

        # Members group #1
        self.jacksons.addPerson(self.mj)
        self.jacksons.addPerson(Person('Tito', 'Jackson'))
        self.jacksons.addPerson(Person('Another', 'Jackson'))

        # Members group #2
        self.singers.addPerson(Person('Lionel', 'Ritchie'))
        self.singers.addPerson(self.mj)

        # Add groups to the Address Book
        self.address_book.addGroup(self.jacksons)
        self.address_book.addGroup(self.singers)

        TestAddressBook.__addMockEmails(self.address_book)

    @staticmethod
    def __addMockEmails(address_book):
        """ Create mock email addresses for every person on
        the *address_book. Each person will have 1 email for
        each group of which they are a member of. The email
        address will have the following format:
        [first_name].[last_name]@[group.name].com  """
        for person in address_book.people:
            for g in person.groups:
                email = "{0}.{1}@{2}.com".format(person.first_name,
                                                 person.last_name,
                                                 g.name).replace(' ',
                                                                 '').lower()

                person.email_addresses.append(email)

    def test_add_people_to_address_book(self):
        """ Feature #1: Add a person to the address book. """
        address_book = AddressBook()

        jerry = Person('Jerry', 'Garcia')
        janis = Person('Janis', 'Joplin')

        address_book.addPerson(jerry)
        address_book.addPerson(janis)

        self.assertEqual(2, len(address_book.people))

    def test_add_groups_to_address_book(self):
        """ Feature #2: Add a group to the address book. """
        address_book = AddressBook()

        grateful = Group('Grateful Dead')
        full = Group('Full Tilt')

        address_book.addGroup(grateful)
        address_book.addGroup(full)

        self.assertEqual(2, len(address_book.groups))

    def test_find_group_members(self):
        """ Feature #3: Given a group we want to easily find its members. """
        # get by group name
        self.assertEqual(
            3, len(self.address_book.getMembers(group_name='Jacksons 5')))
        # get by group object
        self.assertEqual(2,
                         len(self.address_book.getMembers(group=self.singers)))

    def test_find_person_groups(self):
        """ Feature #4: Given a person we want to easily find the
        groups the person belongs to. """

        # get by person name
        self.assertEqual(
            1,
            len(self.address_book.getGroups(
                person_full_name='Ritchie, Lionel')))
        # get by person object
        self.assertEqual(2, len(self.address_book.getGroups(person=self.mj)))

    def test_search_person_by_name(self):
        """ Feature #5: Given a person we want to easily find the groups
        the person belongs to. """

        # search by first name
        result1 = self.address_book.findPeopleByName(first_name='Tito')
        self.assertEqual(1, len(result1))
        self.assertEqual('Jackson, Tito', str(result1[0]))

        # search by last name
        result2 = self.address_book.findPeopleByName(last_name='Jackson')
        self.assertEqual(3, len(result2))
        self.assertEqual('Jackson, Another', str(result2[0]))
        self.assertEqual('Jackson, Michael', str(result2[1]))
        self.assertEqual('Jackson, Tito', str(result2[2]))

        # search by first and last name
        result3 = self.address_book.findPeopleByName(last_name='Jackson',
                                                     first_name='Tito')
        self.assertEqual(1, len(result3))
        self.assertEqual('Jackson, Tito', str(result3[0]))

    def test_search_person_by_email(self):
        """ Feature #6: Find person by email address. """

        # search by begining of email
        result1 = self.address_book.findPeopleByEmail('mich')
        self.assertEqual(1, len(result1))
        self.assertEqual('Jackson, Michael', str(result1[0]))

        # search by complete email
        result1 = self.address_book.findPeopleByEmail(
            '*****@*****.**')
        self.assertEqual(1, len(result1))
        self.assertEqual('Ritchie, Lionel', str(result1[0]))