def new(): form = SurveyForm() if form.validate_on_submit(): # file = request.files['file'] # if file: filename = secure_filename(form.surveyXml.data.filename) if filename: tf = tempfile.NamedTemporaryFile() form.surveyXml.data.save(tf.name) msg, survey = Survey.from_xml(tf.name, g.user) tf.close() for m in msg: flash(m) return redirect(url_for('researcher.index')) else: survey = Survey( title = form.title.data, description = form.description.data, endDate = form.endDate.data, startDate = None, maxNumberRespondents = form.maxNumberRespondents.data, duration = form.duration.data, researcher = g.user) db.session.add(survey) db.session.commit() flash('Your survey have been saved.') return redirect(url_for('researcher.editSurvey',id_survey = survey.id)) return render_template('/researcher/new.html', title = 'New survey', form = form)
def test_find_questions(self): u = User(nickname="john", email="*****@*****.**", role=ROLE_RESEARCHER) db.session.add(u) db.session.commit() base = os.path.abspath(os.path.dirname(__file__)) name = "como_son_nuestros_voluntarios_only_games.xml" msg, s = Survey.from_xml(os.path.join(base, name), u) game = Games(s.id) self.assertIsNotNone(game.select_game["part2", True]) self.assertIsNotNone(game.select_game["part2", False]) self.assertIsNotNone(game.select_game["decision1_v1", True]) self.assertIsNotNone(game.select_game["decision1_v1", False]) self.assertIsNotNone(game.select_game["decision2", True]) self.assertIsNotNone(game.select_game["decision2", False]) self.assertIsNotNone(game.select_game["decision3", True]) self.assertIsNotNone(game.select_game["decision3", False]) self.assertIsNotNone(game.select_game["decision4", True]) self.assertIsNotNone(game.select_game["decision4", False]) self.assertIsNotNone(game.select_game["decision5", True]) self.assertIsNotNone(game.select_game["decision5", False]) self.assertIsNotNone(game.select_game["decision6", True]) self.assertIsNotNone(game.select_game["decision6", False]) qs = Question.query.filter(Question.decision == "decision_two") for q in qs: db.session.delete(q) db.session.commit() game = Games(s.id) self.assertIsNone(game.select_game["decision2", True]) self.assertIsNone(game.select_game["decision2", False])
def test_import_export(self): u = User(nickname = 'john', email = '*****@*****.**', role = ROLE_RESEARCHER) db.session.add(u) survey = Survey(title = "test",researcher = u) db.session.add(survey) consent = Consent(text="a", survey=survey) db.session.add(consent) s1 = Section (title = "1",description = "a", sequence = 1, percent = 1, survey = survey) db.session.add(s1) s11 = Section (title = "11", description = "a", sequence = 1, percent = 0.5, parent = s1) db.session.add(s11) s12 = Section (title = "12", description = "a", sequence = 1, percent = 0.5, parent = s1) db.session.add(s12) s111 = Section (title = "111", description = "a", sequence = 1, parent = s11) db.session.add(s111) s112 = Section (title = "112", description = "a", sequence = 2, parent = s11) db.session.add(s112) q1 = QuestionText(text="q1",section=s1) db.session.add(q1) q2 = QuestionChoice(text="q2",section=s11,range_min=1,range_max=10) db.session.add(q2) l=["thing1","thing2","thing3"] q3 = QuestionChoice(text="q3",section=s11,choices =l) db.session.add(q3) condition=Condition(operation="==",value="0") db.session.add(condition) q4 = QuestionYN(text="q4", section=s11, condition=condition, parent = q3) db.session.add(q4) q5 = QuestionLikertScale(text="q5",minLikert =1,maxLikert=7, labelMin="min",labelMax="max", section=s112) db.session.add(q5) db.session.commit() xml = survey.to_xml() tf = tempfile.NamedTemporaryFile() xml.write(tf.name,encoding="ISO-8859-1", method="xml") msg,s = Survey.from_xml(tf.name,u) self.assertTrue(s.title == survey.title) self.assertTrue(s.consents.first().text == survey.consents.first().text) j = Section.query.filter(Section.title=="1",Section.root==s).first() self.assertTrue(j.percent==s1.percent) j = Section.query.filter(Section.title=="112",Section.root==s).first() self.assertTrue(j.sequence==s112.sequence) q = Question.query.filter(Question.text=="q3", Question.section_id==Section.id,Section.root==s).first() self.assertTrue(len(q.choices)==3) q = Question.query.filter(Question.text=="q4", Question.section_id==Section.id,Section.root==s).first() self.assertTrue(q.isSubquestion) self.assertFalse(q.isExpectedAnswer()) self.assertTrue(q.section.title==q4.section.title)
def test_matching(self): import utiles u = User(nickname="john", email="*****@*****.**", role=ROLE_RESEARCHER) db.session.add(u) db.session.commit() base = os.path.abspath(os.path.dirname(__file__)) name = "como_son_nuestros_voluntarios_only_games.xml" msg, s = Survey.from_xml(os.path.join(base, name), u) game = Games(s.id) s.endDate = s.endDate + datetime.timedelta(1, 0) db.session.add(s) db.session.commit() n1 = 40 utiles.generate_answers_fake(s.id, n1) game.match() users = StateSurvey.query.filter( StateSurvey.survey_id == s.id, StateSurvey.status.op("&")(StateSurvey.FINISH_OK), StateSurvey.status.op("&")(StateSurvey.PART2_MONEY) == 0, StateSurvey.status.op("&")(StateSurvey.PART2_NO_MONEY) == 0, ) for u in users: game.part2(u.user) game.raffle(u.user) self.assertEqual(n1, len(GameImpatience.query.all())) n2 = 1 utiles.generate_answers_fake(s.id, n2) game.match() users = StateSurvey.query.filter( StateSurvey.survey_id == s.id, StateSurvey.status.op("&")(StateSurvey.FINISH_OK), StateSurvey.status.op("&")(StateSurvey.PART2_MONEY) == 0, StateSurvey.status.op("&")(StateSurvey.PART2_NO_MONEY) == 0, ) for u in users: game.part2(u.user) game.raffle(u.user) self.assertEqual(n1 + n2, len(GameImpatience.query.all()))