def build_relationship_choices(answer_store, group_instance): """ A function to build a list of tuples of as yet undefined person relationships :param answer_store: The answer store to use for current answers :param group_instance: The instance of the group being iterated over :return: """ household_first_name_answers = answer_store.filter( block_id='household-composition', answer_id='first-name', limit=settings.EQ_MAX_NUM_REPEATS) household_last_name_answers = answer_store.filter( block_id='household-composition', answer_id='last-name', limit=settings.EQ_MAX_NUM_REPEATS) first_names = [] last_names = [] for answer in household_first_name_answers: first_names.append(answer['value']) for answer in household_last_name_answers: last_names.append(answer['value']) household_members = [] for first_name, last_name in zip(first_names, last_names): household_members.append({ 'first-name': first_name, 'last-name': last_name, }) remaining_people = household_members[group_instance + 1:] if group_instance < len( household_members) else [] current_person_name = format_household_member_name([ household_members[group_instance]['first-name'], household_members[group_instance]['last-name'], ]) choices = [] for remaining_person in remaining_people: other_person_name = format_household_member_name([ remaining_person['first-name'], remaining_person['last-name'], ]) choices.append((current_person_name, other_person_name)) return choices
def build_relationship_choices(answer_store, group_instance): # pylint: disable=too-many-locals """ A function to build a list of tuples of as yet undefined person relationships :param answer_store: The answer store to use for current answers :param group_instance: The instance of the group being iterated over :return: """ household_first_name_answers = answer_store.filter( answer_ids=['first-name'], limit=True) household_last_name_answers = answer_store.filter(answer_ids=['last-name'], limit=True) first_names = [] last_names = [] for answer in household_first_name_answers: first_names.append(answer['value']) for answer in household_last_name_answers: last_names.append(answer['value']) household_members = [] for first_name, last_name in zip(first_names, last_names): household_members.append({ 'first-name': first_name, 'last-name': last_name, }) remaining_people = household_members[group_instance + 1:] if group_instance < len( household_members) else [] current_person_name = format_household_member_name([ household_members[group_instance]['first-name'], household_members[group_instance]['last-name'], ]) choices = [] for remaining_person in remaining_people: other_person_name = format_household_member_name([ remaining_person['first-name'], remaining_person['last-name'], ]) choices.append((current_person_name, other_person_name)) return choices
def test_format_household_member_name_trim_spaces(self): # Given name = ['John ', ' Doe '] # When format_value = format_household_member_name(name) self.assertEqual(format_value, 'John Doe')
def test_format_household_member_name_middle_name_is_none(self): # Given name = ['John', None, 'Doe'] # When format_value = format_household_member_name(name) self.assertEqual(format_value, 'John Doe')
def test_format_household_member_name_first_middle_and_last(self): # Given name = ['John', 'J', 'Doe'] # When format_value = format_household_member_name(name) self.assertEqual(format_value, 'John J Doe')
def test_format_household_member_name_first_name_is_none(self): # Given name = [None, 'Doe'] # When format_value = format_household_member_name(name) self.assertEqual(format_value, 'Doe')
def test_format_household_member_name_no_surname(self): # Given name = ['John', ''] # When format_value = format_household_member_name(name) self.assertEqual(format_value, 'John')
def build_repeating_state(self, user_input): template_answer = self.answers.pop() group_instance = template_answer.group_instance first_name_answers = get_answer_store(current_user).filter( answer_id='first-name') last_name_answers = get_answer_store(current_user).filter( answer_id='last-name') first_names = [answer['value'] for answer in first_name_answers] last_names = [answer['value'] for answer in last_name_answers] household_members = [] for first_name, last_name in zip(first_names, last_names): household_members.append({ 'first-name': first_name, 'last-name': last_name, }) remaining_people = household_members[group_instance + 1:] if self.group_instance < len( household_members) else [] current_person_name = format_household_member_name([ household_members[group_instance]['first-name'], household_members[group_instance]['last-name'], ]) for index, remaining_person in enumerate(remaining_people): for answer_schema in self.schema_item.answers: new_answer_state = self.create_new_answer_state( answer_schema, index, group_instance) new_answer_state.schema_item.widget.current_person = current_person_name other_person_name = format_household_member_name([ remaining_person['first-name'], remaining_person['last-name'], ]) new_answer_state.schema_item.widget.other_person = other_person_name self.answers.append(new_answer_state)