def testGetAnswerChoicesForChoiceId(self): survey_id = connection.execute(survey_table.select().where( survey_table.c.survey_title == 'test_title')).first().survey_id q_where = question_table.select().where( question_table.c.type_constraint_name == 'multiple_choice') question = connection.execute(q_where).first() question_id = question.question_id tcn = question.type_constraint_name seq = question.sequence_number mul = question.allow_multiple submission_exec = connection.execute( submission_insert(submitter='test_submitter', submitter_email='*****@*****.**', survey_id=survey_id)) submission_id = submission_exec.inserted_primary_key[0] choices = get_choices(connection, question_id) the_choice = choices.first() connection.execute(answer_choice_insert( question_choice_id=the_choice.question_choice_id, answer_choice_metadata={}, question_id=question_id, submission_id=submission_id, survey_id=survey_id, type_constraint_name=tcn, sequence_number=seq, allow_multiple=mul)) gacfci = get_answer_choices_for_choice_id actual_choices = gacfci(connection, the_choice.question_choice_id) self.assertEqual(actual_choices.rowcount, 1)
def testAnswerInsertNoMetadata(self): survey_id = connection.execute(survey_table.select().where( survey_table.c.survey_title == 'test_title')).first().survey_id q_where = question_table.select().where( question_table.c.type_constraint_name == 'integer') question = connection.execute(q_where).first() question_id = question.question_id tcn = question.type_constraint_name seq = question.sequence_number mul = question.allow_multiple submission_exec = connection.execute( submission_insert(submitter='test_submitter', submitter_email='*****@*****.**', survey_id=survey_id)) submission_id = submission_exec.inserted_primary_key[0] answer_exec = connection.execute(answer_insert( answer=1, question_id=question_id, answer_metadata=None, submission_id=submission_id, survey_id=survey_id, type_constraint_name=tcn, is_type_exception=False, sequence_number=seq, allow_multiple=mul)) answer_id = answer_exec.inserted_primary_key[0] self.assertIsNotNone(answer_id)
def testQuestionBranchInsert(self): survey_id = connection.execute(survey_table.select().where( survey_table.c.survey_title == 'test_title')).first().survey_id to_question = get_questions_no_credentials( connection, survey_id).fetchall()[-1] q_where = question_table.select().where( cast(cast(question_table.c.logic['allow_other'], Text), Boolean)) from_question = connection.execute(q_where).fetchall()[0] choice = get_choices( connection, from_question.question_id).fetchall()[0] from_tcn = from_question.type_constraint_name branch_dict = {'question_choice_id': choice.question_choice_id, 'from_question_id': from_question.question_id, 'from_type_constraint': from_tcn, 'from_sequence_number': from_question.sequence_number, 'from_allow_multiple': from_question.allow_multiple, 'from_survey_id': survey_id, 'to_question_id': to_question.question_id, 'to_type_constraint': to_question.type_constraint_name, 'to_sequence_number': to_question.sequence_number, 'to_allow_multiple': to_question.allow_multiple, 'to_survey_id': survey_id} branch_exec = connection.execute(question_branch_insert(**branch_dict)) inserted_id = branch_exec.inserted_primary_key[0] the_branch = connection.execute(question_branch_table.select().where( question_branch_table.c.question_branch_id == inserted_id)).first() self.assertEqual(the_branch.to_question_id, to_question.question_id)
def testAnswerChoiceInsertNoMetadata(self): survey_id = connection.execute(survey_table.select().where( survey_table.c.survey_title == 'test_title')).first().survey_id q_where = question_table.select().where( question_table.c.type_constraint_name == 'multiple_choice') question = connection.execute(q_where).first() question_id = question.question_id tcn = question.type_constraint_name seq = question.sequence_number mul = question.allow_multiple submission_exec = connection.execute(submission_insert( submitter='test_submitter', submitter_email='*****@*****.**', survey_id=survey_id)) submission_id = submission_exec.inserted_primary_key[0] choices = get_choices(connection, question_id) the_choice = choices.first() exec_stmt = connection.execute(answer_choice_insert( question_choice_id=the_choice.question_choice_id, answer_choice_metadata=None, question_id=question_id, submission_id=submission_id, survey_id=survey_id, type_constraint_name=tcn, sequence_number=seq, allow_multiple=mul)) answer_id = exec_stmt.inserted_primary_key[0] self.assertIsNotNone(answer_id)
def testGetAnswersForQuestion(self): survey_id = connection.execute(survey_table.select().where( survey_table.c.survey_title == 'test_title')).first().survey_id q_where = question_table.select().where( question_table.c.type_constraint_name == 'integer') question = connection.execute(q_where).first() question_id = question.question_id tcn = question.type_constraint_name seq = question.sequence_number mul = question.allow_multiple submission_exec = connection.execute( submission_insert(submitter='test_submitter', submitter_email='*****@*****.**', survey_id=survey_id)) submission_id = submission_exec.inserted_primary_key[0] connection.execute(answer_insert(answer=1, question_id=question_id, answer_metadata={}, submission_id=submission_id, survey_id=survey_id, type_constraint_name=tcn, is_type_exception=False, sequence_number=seq, allow_multiple=mul)) self.assertEqual( get_answers_for_question(connection, question_id).rowcount, 1)
def testInsertFacility(self): survey_id = connection.execute(survey_table.select().where( survey_table.c.survey_title == 'test_title')).first().survey_id q_where = question_table.select().where( question_table.c.type_constraint_name == 'facility') question = connection.execute(q_where).first() question_id = question.question_id tcn = question.type_constraint_name seq = question.sequence_number mul = question.allow_multiple submission_exec = connection.execute( submission_insert(submitter='test_submitter', submitter_email='*****@*****.**', survey_id=survey_id)) submission_id = submission_exec.inserted_primary_key[0] answer_exec = connection.execute(answer_insert( answer={'id': 'revisit ID', 'lon': 90, 'lat': 0}, answer_metadata={'facility_name': 'cool facility', 'facility_sector': 'health'}, question_id=question_id, submission_id=submission_id, survey_id=survey_id, type_constraint_name=tcn, is_type_exception=False, sequence_number=seq, allow_multiple=mul)) answer_id = answer_exec.inserted_primary_key[0] self.assertIsNotNone(answer_id) condition = answer_table.c.answer_id == answer_id answer = connection.execute( answer_table.select().where(condition)).first() location = get_geo_json(connection, answer)['coordinates'] self.assertEqual(location, [90, 0]) facility_id = answer.answer_text self.assertEqual(facility_id, 'revisit ID')
def testQuestionChoiceSelect(self): q_where = question_table.select().where( question_table.c.type_constraint_name == 'multiple_choice') question_id = connection.execute(q_where).first().question_id choice_id = get_choices(connection, question_id).first().question_choice_id choice = question_choice_select(connection, choice_id) self.assertIsNotNone(choice) self.assertRaises(QuestionChoiceDoesNotExistError, question_choice_select, connection, str(uuid.uuid4()))
def testInsertLocation(self): survey_id = connection.execute(survey_table.select().where( survey_table.c.survey_title == 'test_title')).first().survey_id q_where = question_table.select().where( question_table.c.type_constraint_name == 'location') question = connection.execute(q_where).first() question_id = question.question_id tcn = question.type_constraint_name seq = question.sequence_number mul = question.allow_multiple submission_exec = connection.execute(submission_insert( submitter='test_submitter', submitter_email='*****@*****.**', survey_id=survey_id)) submission_id = submission_exec.inserted_primary_key[0] answer_exec = connection.execute(answer_insert( answer={'lon': 90, 'lat': 0}, answer_metadata={}, question_id=question_id, submission_id=submission_id, survey_id=survey_id, type_constraint_name=tcn, is_type_exception=False, sequence_number=seq, allow_multiple=mul)) answer_id = answer_exec.inserted_primary_key[0] self.assertIsNotNone(answer_id) condition = answer_table.c.answer_id == answer_id answer = connection.execute( answer_table.select().where(condition)).first() location = get_geo_json(connection, answer)['coordinates'] self.assertEqual(location, [90, 0]) submission_2_exec = connection.execute( submission_insert(submitter='test_submitter', submitter_email='*****@*****.**', survey_id=survey_id)) submission_2_id = submission_2_exec.inserted_primary_key[0] answer_2_exec = connection.execute(answer_insert( answer=None, question_id=question_id, answer_metadata={}, submission_id=submission_2_id, survey_id=survey_id, type_constraint_name=tcn, is_type_exception=False, sequence_number=seq, allow_multiple=mul)) answer_2_id = answer_2_exec.inserted_primary_key[0] condition_2 = answer_table.c.answer_id == answer_2_id answer_2 = connection.execute( answer_table.select().where(condition_2)).first() location_2 = get_geo_json(connection, answer_2) self.assertEqual(location_2, {'coordinates': [], 'type': 'MultiPoint'})
def testGetSubmissionsWithFilter(self): survey_id = connection.execute(survey_table.select().where( survey_table.c.survey_title == 'test_title')).first().survey_id q_where = question_table.select().where( question_table.c.type_constraint_name == 'integer') question = connection.execute(q_where).first() question_id = question.question_id tcn = question.type_constraint_name seq = question.sequence_number mul = question.allow_multiple for i in range(2): submission_exec = connection.execute(submission_insert( submitter='test_submitter', submitter_email='*****@*****.**', survey_id=survey_id)) submission_id = submission_exec.inserted_primary_key[0] connection.execute(answer_insert( answer=i, question_id=question_id, submission_id=submission_id, answer_metadata={}, survey_id=survey_id, type_constraint_name=tcn, is_type_exception=False, sequence_number=seq, allow_multiple=mul)) self.assertEqual( len(get_submissions_by_email( connection, 'test_email', survey_id=survey_id ).fetchall()), 2) f_result = get_submissions_by_email( connection, 'test_email', survey_id=survey_id, filters=[ { 'question_id': question_id, 'answer_integer': 1 } ] ).fetchall() self.assertEqual(len(f_result), 1)
def testQuestionInsert(self): survey_id = connection.execute(survey_table.select().where( survey_table.c.survey_title == 'test_title')).first().survey_id sequence_number = get_free_sequence_number(connection, survey_id) stmt = question_insert(hint=None, allow_multiple=None, logic={ 'required': False, 'allow_other': False, 'allow_dont_know': False }, sequence_number=sequence_number, question_title='test insert', type_constraint_name='text', question_to_sequence_number=sequence_number + 1, survey_id=survey_id) question_id = connection.execute(stmt).inserted_primary_key[0] condition = question_table.c.question_title == 'test insert' self.assertEqual(connection.execute(question_table.select().where( condition)).first().question_id, question_id)
def testGetChoices(self): q_where = question_table.select().where( question_table.c.type_constraint_name == 'multiple_choice') question_id = connection.execute(q_where).first().question_id choices = get_choices(connection, question_id) self.assertGreater(choices.rowcount, 0)