def _remote_survey_url_vioscreen(transaction, account_id, source_id, language_tag, survey_redirect_url, vioscreen_ext_sample_id): # assumes an instance of Transaction is already available acct_repo = AccountRepo(transaction) survey_template_repo = SurveyTemplateRepo(transaction) if vioscreen_ext_sample_id: # User is about to start a vioscreen survey for this sample # record this in the database. db_vioscreen_id = survey_template_repo.create_vioscreen_id( account_id, source_id, vioscreen_ext_sample_id) else: raise ValueError("Vioscreen Template requires " "vioscreen_ext_sample_id parameter.") (birth_year, gender, height, weight) = \ survey_template_repo.fetch_user_basic_physiology( account_id, source_id) account = acct_repo.get_account(account_id) country_code = account.address.country_code url = vioscreen.gen_survey_url(db_vioscreen_id, language_tag, survey_redirect_url, birth_year=birth_year, gender=gender, height=height, weight=weight, country_code=country_code) return url
def test_fetch_user_basic_physiology(self): with Transaction() as t: tr = SurveyTemplateRepo(t) # year and gender already set for this survey # weight and height are scrambled in the test # database as they're remarked as free text with t.cursor() as cur: cur.execute("""UPDATE ag.survey_answers_other SET response='["254"]' WHERE survey_id=%s AND survey_question_id=%s""", (TEST1_SURVEY_ID, 108)) # height_cm cur.execute("""UPDATE ag.survey_answers_other SET response='["100"]' WHERE survey_id=%s AND survey_question_id=%s""", (TEST1_SURVEY_ID, 113)) # weight_kg tr = SurveyTemplateRepo(t) obs = tr.fetch_user_basic_physiology(TEST1_ACCOUNT_ID, TEST1_SOURCE_ID) exp = (1973, 'Male', 100, 220.462) self.assertEqual(obs, exp) cur.execute("""UPDATE ag.survey_answers_other SET response='["100"]' WHERE survey_id=%s AND survey_question_id=%s""", (TEST1_SURVEY_ID, 108)) # height_cm cur.execute("""UPDATE ag.survey_answers SET response='inches' WHERE survey_id=%s AND survey_question_id=%s""", (TEST1_SURVEY_ID, 109)) # height_units cur.execute("""UPDATE ag.survey_answers SET response='pounds' WHERE survey_id=%s AND survey_question_id=%s""", (TEST1_SURVEY_ID, 114)) # weight_units obs = tr.fetch_user_basic_physiology(TEST1_ACCOUNT_ID, TEST1_SOURCE_ID) exp = (1973, 'Male', 100, 100) self.assertEqual(obs, exp) # equiv of Unspecified for height cur.execute("""UPDATE ag.survey_answers_other SET response='[""]' WHERE survey_id=%s AND survey_question_id=%s""", (TEST1_SURVEY_ID, 108)) # height_cm obs = tr.fetch_user_basic_physiology(TEST1_ACCOUNT_ID, TEST1_SOURCE_ID) exp = (1973, 'Male', None, 100) self.assertEqual(obs, exp) # equiv of Unspecified for weight cur.execute("""UPDATE ag.survey_answers_other SET response='[""]' WHERE survey_id=%s AND survey_question_id=%s""", (TEST1_SURVEY_ID, 113)) # weight_kg obs = tr.fetch_user_basic_physiology(TEST1_ACCOUNT_ID, TEST1_SOURCE_ID) exp = (1973, 'Male', None, None) self.assertEqual(obs, exp)