Example #1
0
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)
Example #2
0
    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])
Example #3
0
    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)
Example #4
0
    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()))