def test_init(self, member, dummy_am): am = NameManager(self.description, [dummy_am]) member.first_name = 'test' assert am.description == self.description assert am.questionable_attributes == [dummy_am] assert am.male_data == {} assert am.female_data == {} assert am.get_members_attribute(member) == 'test' member.gender = Gender.MALE assert am.get_members_attribute(member) == 'test'
def test_build_question(self, gender): bm = NameManager(self.description, ['last_name']) am = AttributeManager('last_name', ['first_name'], gendered_questions=True) for i in range(4): member = Member(i, last_name='A', first_name='B', gender=gender) am.register_member(member) bm.register_member(member) with pytest.raises(RuntimeError, match='currently not hintable for first_name'): am.build_question_with(bm) for i in range(100): member = Member( i + 10, first_name=random.choice(['1', '2', '3', '4', '5']), last_name=random.choice(['a', 'b', 'c', 'd', 'e']), gender=Gender.MALE, ) am.register_member(member) bm.register_member(member) for i in range(100): member = Member( i + 120, first_name=random.choice(['6', '7', '8', '9', '10']), last_name=random.choice(['f', 'g', 'h', 'i', 'j']), gender=Gender.FEMALE, ) am.register_member(member) bm.register_member(member) member, attr, opts, idx = am.build_question_with(bm) assert attr in am.data assert member in am.available_members assert member in bm.available_members for last_name in set(opts).difference({opts[idx]}): assert not any( am.get_members_attribute(m) == attr and bm.get_members_attribute(m) == last_name for m in bm.available_members) assert attr == 'A' assert len(set(opts)) == 4 for o in opts: if gender == Gender.MALE: assert o in ['1', '2', '3', '4', '5', 'B'] else: assert o in ['6', '7', '8', '9', '10', 'B']