class TestFamily(unittest.TestCase):
    def setUp(self):
        self.King_root = Person("King", "M")
        self.family = Family(self.King_root)
        self.person_1 = Person("person1", "M")
        self.person_2 = Person("person2", "F")

    def test_search_functionality(self):
        with self.assertRaises(custom_exceptions.PersonNotFound):
            self.family.search_member(self.person_1)

    def test_child_addition(self):
        with self.assertRaises(custom_exceptions.ChildAdditionFailed):
            self.family.add_child_in_family(self.King_root, self.person_1)

    def test_get_relationship(self):
        with self.assertRaises(custom_exceptions.CommandNotFound):
            self.family.get_relationship(self.King_root, "unknown_relation")
    family.add_child_in_family(Satvy, Vasa)

    family.add_spouse_in_family(Vyas, Krpi)
    family.add_child_in_family(Krpi, Kriya)
    family.add_child_in_family(Krpi, Krithi)

    #Queries
    with open(args.input_file, 'r') as file:
        lines = file.readlines()
    for line in lines:
        line = line.rstrip('\n')
        query = line.split(" ")
        if (query[0] == 'GET_RELATIONSHIP'):
            try:
                member = family.search_member(query[1])
                result = family.get_relationship(member, query[2])
            except (custom_exceptions.NullPointer):
                print(constants.NULLPOINTER_ERROR)
            except (custom_exceptions.CommandNotFound):
                print(constants.COMMAND_ERROR)
            except (custom_exceptions.PersonNotFound):
                print(constants.PERSON_ERROR)
            except (custom_exceptions.InadequateInformation):
                print(constants.INFORMATION_ERROR)
            else:
                print(" ".join(result))
        elif (query[0] == "ADD_CHILD"):
            if (query[3] == "Female"):
                gender = constants.FEMALE
            else:
                gender = constants.MALE