def test_first_question_is_loop_first(self): self._create_ussd_group_questions() # test first question is group first self.assertEquals( self.interview.respond(), self.qset.g_first_question.display_text( channel=ODKAccess.choice_name(), context={})) # test running again gives same results self.assertEquals( self.interview.respond(), self.qset.g_first_question.display_text( channel=ODKAccess.choice_name(), context={}))
def _get_or_create_household_member(survey_allocation, survey_tree): interviewer, survey = survey_allocation.interviewer, survey_allocation.survey house_number = _get_household_house_number(survey_tree) survey_listing = SurveyHouseholdListing.get_or_create_survey_listing( interviewer, survey) house_listing = survey_listing.listing try: household = Household.objects.get(listing=house_listing, house_number=house_number) except Household.DoesNotExist: physical_addr = '' try: physical_addr = _get_household_physical_addr(survey_tree) except IndexError: pass household = Household.objects.create( last_registrar=interviewer, listing=house_listing, registration_channel=ODKAccess.choice_name(), house_number=house_number, physical_address=physical_addr) #now time for member details MALE = '1' IS_HEAD = '1' mem_attrs = _get_member_attrs(survey_tree) kwargs = {} kwargs['surname'] = mem_attrs.get('surname') kwargs['first_name'] = mem_attrs['firstName'] kwargs['gender'] = (mem_attrs['sex'] == MALE) date_of_birth = current_val = datetime.now() - relativedelta( years=int(mem_attrs['age'])) kwargs['date_of_birth'] = date_of_birth #datetime.strptime(mem_attrs['dateOfBirth'], '%Y-%m-%d') kwargs['household'] = household kwargs['registrar'] = interviewer kwargs['registration_channel'] = ODKAccess.choice_name() kwargs['survey_listing'] = survey_listing if not household.get_head() and mem_attrs['isHead'] == IS_HEAD: # kwargs['occupation'] = mem_attrs.get('occupation', '') # kwargs['level_of_education'] = mem_attrs.get('levelOfEducation', '') # resident_since = datetime.strptime(mem_attrs.get('residentSince', '1900-01-01'), '%Y-%m-%d') # kwargs['resident_since']=resident_since head = HouseholdHead.objects.create(**kwargs) if household.head_desc is not head.surname: household.head_desc = head.surname household.save() return head else: return HouseholdMember.objects.create(**kwargs)
def setUp(self): self.qset = ListingTemplate.objects.create(name="raja") self.survey = Survey.objects.create(name="haha", has_sampling=True, sample_size=3, listing_form=self.qset) # create the access channel self.qset_channels = mommy.make(QuestionSetChannel, qset=self.qset, channel=ODKAccess.choice_name()) self.ea = EnumerationArea.objects.last() self.interviewer = mommy.make(Interviewer) self.survey_allocation = mommy.make(SurveyAllocation, survey=self.survey, allocation_ea=self.ea, interviewer=self.interviewer) self.access_channel = mommy.make(ODKAccess, interviewer=self.interviewer) # create listing questions self._create_ussd_non_group_questions() self.assertTrue(self.qset.questions.count()) raj = self.assign_permission_to( User.objects.create_user('demo12', '*****@*****.**', 'demo12'), 'can_view_batches') self.client = Client() self.client.login(username='******', password='******')
def setUp(self): self.client = Client() self.survey = mommy.make(Survey) self.batch_data = { 'name': 'test-batch', 'access_channels': [ ODKAccess.choice_name(), ], 'survey': self.survey.id } self.questions_data = [] # create a inline flows for this listing for answer_class in [ NumericalAnswer, TextAnswer, DateAnswer, MultiChoiceAnswer ]: self.questions_data.append({ 'text': 'text: %s' % answer_class.choice_name(), 'answer_type': answer_class.choice_name(), 'identifier': 'id_%s' % answer_class.choice_name().replace(' ', '_') }) self.questions_data[-1]['options'] = ['Yes', 'No'] raj = self.assign_permission_to( User.objects.create_user('demo12', '*****@*****.**', 'demo12'), 'can_view_batches') self.client.login(username='******', password='******')
def _get_or_create_household_member(interviewer, survey, survey_tree): house_number = _get_household_house_number(survey_tree) survey_listing = SurveyHouseholdListing.get_or_create_survey_listing(interviewer, survey) house_listing = survey_listing.listing try: household = Household.objects.get(listing=house_listing, house_number=house_number) except Household.DoesNotExist: physical_addr = "" try: physical_addr = _get_household_physical_addr(survey_tree) except IndexError: pass household = Household.objects.create( last_registrar=interviewer, listing=house_listing, registration_channel=ODKAccess.choice_name(), house_number=house_number, physical_address=physical_addr, ) # now time for member details MALE = "1" IS_HEAD = "1" mem_attrs = _get_member_attrs(survey_tree) kwargs = {} kwargs["surname"] = mem_attrs.get("surname") kwargs["first_name"] = mem_attrs["firstName"] kwargs["gender"] = mem_attrs["sex"] == MALE date_of_birth = current_val = datetime.now() - relativedelta(years=int(mem_attrs["age"])) kwargs["date_of_birth"] = date_of_birth # datetime.strptime(mem_attrs['dateOfBirth'], '%Y-%m-%d') kwargs["household"] = household kwargs["registrar"] = interviewer kwargs["registration_channel"] = ODKAccess.choice_name() kwargs["survey_listing"] = survey_listing if not household.get_head() and mem_attrs["isHead"] == IS_HEAD: # kwargs['occupation'] = mem_attrs.get('occupation', '') # kwargs['level_of_education'] = mem_attrs.get('levelOfEducation', '') # resident_since = datetime.strptime(mem_attrs.get('residentSince', '1900-01-01'), '%Y-%m-%d') # kwargs['resident_since']=resident_since head = HouseholdHead.objects.create(**kwargs) if household.head_desc is not head.surname: household.head_desc = head.surname household.save() return head else: return HouseholdMember.objects.create(**kwargs)
def setUp(self): self.client = Client() self.listing_data = {'name': 'test-listing', 'access_channels': [ODKAccess.choice_name(), ], } self.questions_data = [] # create a inline flows for this listing for answer_class in [NumericalAnswer, TextAnswer, DateAnswer, MultiChoiceAnswer]: self.questions_data.append({'text': 'text: %s' % answer_class.choice_name(), 'answer_type': answer_class.choice_name(), 'identifier': 'id_%s' % answer_class.choice_name().replace(' ', '_')}) self.questions_data[-1]['options'] = ['Yes', 'No'] raj = self.assign_permission_to(User.objects.create_user('demo12', '*****@*****.**', 'demo12'), 'can_view_batches') self.client.login(username='******', password='******')
def test_reload_answer_access(self): AnswerAccessDefinition.objects.all().delete() self.assertEquals(AnswerAccessDefinition.objects.count(), 0) AnswerAccessDefinition.reload_answer_categories() self.assertTrue(AnswerAccessDefinition.objects.count() > 0) # chech for each access type has an entry channels = [USSDAccess.choice_name(), ODKAccess.choice_name(), WebAccess.choice_name()] allowed_channels = AnswerAccessDefinition.objects.values_list('channel', flat=True) for channel in channels: self.assertIn(channel, allowed_channels) self.assertTrue(len(AnswerAccessDefinition.answer_types(channel)) > 0) answer_types = Answer.answer_types() for answer_type in [VideoAnswer, AudioAnswer, ImageAnswer]: self.assertNotIn(answer_type.choice_name(), AnswerAccessDefinition.answer_types(USSDAccess.choice_name()))
def save_household_list(interviewer, survey, survey_tree, survey_listing): house_nodes = _get_nodes(HOUSEHOLD_PATH, tree=survey_tree) if len(house_nodes) < survey.sample_size: raise NotEnoughHouseholds("Not enough households") house_number = 1 households = [] try: for node in house_nodes: household, _ = Household.objects.get_or_create( house_number=house_number, listing=survey_listing.listing, last_registrar=interviewer, registration_channel=ODKAccess.choice_name(), physical_address=_get_nodes("./physicalAddress", tree=node)[0].text, head_desc=_get_nodes("./headDesc", tree=node)[0].text, head_sex=_get_nodes("./headSex", tree=node)[0].text, ) house_number = house_number + 1 households.append(household) except IntegrityError: raise HouseholdNumberAlreadyExists("Household number already exists") return households
def test_reload_answer_access(self): AnswerAccessDefinition.objects.all().delete() self.assertEquals(AnswerAccessDefinition.objects.count(), 0) AnswerAccessDefinition.reload_answer_categories() self.assertTrue(AnswerAccessDefinition.objects.count() > 0) # chech for each access type has an entry channels = [ USSDAccess.choice_name(), ODKAccess.choice_name(), WebAccess.choice_name() ] allowed_channels = AnswerAccessDefinition.objects.values_list( 'channel', flat=True) for channel in channels: self.assertIn(channel, allowed_channels) self.assertTrue( len(AnswerAccessDefinition.answer_types(channel)) > 0) answer_types = Answer.answer_types() for answer_type in [VideoAnswer, AudioAnswer, ImageAnswer]: self.assertNotIn( answer_type.choice_name(), AnswerAccessDefinition.answer_types(USSDAccess.choice_name()))
def save_household_list(interviewer, survey, survey_tree, survey_listing): house_nodes = _get_nodes(HOUSEHOLD_PATH, tree=survey_tree) if len(house_nodes) < survey.sample_size: raise NotEnoughHouseholds('Not enough households') house_number = 1 households = [] try: for node in house_nodes: household, _ = Household.objects.get_or_create( house_number=house_number, listing=survey_listing.listing, last_registrar=interviewer, registration_channel=ODKAccess.choice_name(), physical_address=_get_nodes('./physicalAddress', tree=node)[0].text, head_desc=_get_nodes('./headDesc', tree=node)[0].text, head_sex=_get_nodes('./headSex', tree=node)[0].text, ) house_number = house_number + 1 households.append(household) except IntegrityError: raise HouseholdNumberAlreadyExists('Household number already exists') return households
def __init__(self, request, qset, access_type=ODKAccess.choice_name()): self.id = 'test: %s, %s' % (request.user.username, qset.id) self.question_set = QuestionSet.get(id=qset.id) self.user_identifier = self.id self.access_type = access_type
def handle(self, *args, **kwargs): self.stdout.write('Creating permissions....') content_type = ContentType.objects.get_for_model(User) Permission.objects.get_or_create(codename='can_enter_data', name='Can enter data', content_type=content_type) Permission.objects.get_or_create(codename='can_view_batches', name='Can view Batches', content_type=content_type) Permission.objects.get_or_create(codename='can_view_interviewers', name='Can view Interviewers', content_type=content_type) Permission.objects.get_or_create(codename='can_view_aggregates', name='Can view Aggregates', content_type=content_type) Permission.objects.get_or_create(codename='view_completed_survey', name='Can view Completed Surveys', content_type=content_type) Permission.objects.get_or_create(codename='can_view_households', name='Can view Households', content_type=content_type) Permission.objects.get_or_create(codename='can_view_locations', name='Can view Locations', content_type=content_type) Permission.objects.get_or_create(codename='can_view_users', name='Can view Users', content_type=content_type) Permission.objects.get_or_create(codename='can_view_household_groups', name='Can view Household Groups', content_type=content_type) self.stdout.write('Permissions.') self.stdout.write('Creating answer definition... ') #ussd definition AnswerAccessDefinition.objects.get_or_create(channel=USSDAccess.choice_name(), answer_type=NumericalAnswer.choice_name()) AnswerAccessDefinition.objects.get_or_create(channel=USSDAccess.choice_name(), answer_type=TextAnswer.choice_name()) AnswerAccessDefinition.objects.get_or_create(channel=USSDAccess.choice_name(), answer_type=MultiChoiceAnswer.choice_name()) #ODK definition AnswerAccessDefinition.objects.get_or_create(channel=ODKAccess.choice_name(), answer_type=NumericalAnswer.choice_name()) AnswerAccessDefinition.objects.get_or_create(channel=ODKAccess.choice_name(), answer_type=TextAnswer.choice_name()) AnswerAccessDefinition.objects.get_or_create(channel=ODKAccess.choice_name(), answer_type=MultiChoiceAnswer.choice_name()) AnswerAccessDefinition.objects.get_or_create(channel=ODKAccess.choice_name(), answer_type=MultiSelectAnswer.choice_name()) AnswerAccessDefinition.objects.get_or_create(channel=ODKAccess.choice_name(), answer_type=ImageAnswer.choice_name()) AnswerAccessDefinition.objects.get_or_create(channel=ODKAccess.choice_name(), answer_type=GeopointAnswer.choice_name()) AnswerAccessDefinition.objects.get_or_create(channel=ODKAccess.choice_name(), answer_type=DateAnswer.choice_name()) AnswerAccessDefinition.objects.get_or_create(channel=ODKAccess.choice_name(), answer_type=AudioAnswer.choice_name()) AnswerAccessDefinition.objects.get_or_create(channel=ODKAccess.choice_name(), answer_type=VideoAnswer.choice_name()) #web form definition AnswerAccessDefinition.objects.get_or_create(channel=WebAccess.choice_name(), answer_type=NumericalAnswer.choice_name()) AnswerAccessDefinition.objects.get_or_create(channel=WebAccess.choice_name(), answer_type=TextAnswer.choice_name()) AnswerAccessDefinition.objects.get_or_create(channel=WebAccess.choice_name(), answer_type=MultiChoiceAnswer.choice_name()) AnswerAccessDefinition.objects.get_or_create(channel=WebAccess.choice_name(), answer_type=MultiSelectAnswer.choice_name()) AnswerAccessDefinition.objects.get_or_create(channel=WebAccess.choice_name(), answer_type=ImageAnswer.choice_name()) AnswerAccessDefinition.objects.get_or_create(channel=WebAccess.choice_name(), answer_type=GeopointAnswer.choice_name()) AnswerAccessDefinition.objects.get_or_create(channel=WebAccess.choice_name(), answer_type=DateAnswer.choice_name()) AnswerAccessDefinition.objects.get_or_create(channel=WebAccess.choice_name(), answer_type=AudioAnswer.choice_name()) AnswerAccessDefinition.objects.get_or_create(channel=WebAccess.choice_name(), answer_type=VideoAnswer.choice_name()) self.stdout.write('Successfully imported!')
def test_respond_start_question_interview(self): self._create_ussd_group_questions() self.assertEquals( self.interview.respond(), self.qset.g_first_question.display_text( channel=ODKAccess.choice_name()))
def test_fields(self): odk_access = ODKAccess() fields = [str(item.attname) for item in odk_access._meta.fields] self.assertEqual(10, len(fields)) for field in ['intervieweraccess_ptr_id', 'odk_token']: self.assertIn(field, fields)