def handle(self, *args, **options):
        survey = Survey.factory(
            name='Sample Survey',
            success_redirect='http://localhost:8000/admin/')
        survey.add_question(Text, 'Single line text question')
        survey.add_question(MultiText, 'Multiline question', required=True)
        survey.add_question(Email, 'Email address')

        survey.add_question(Dropdown,
                            'Favourite fruit',
                            field_parms=OrderedDict([('a', 'Apple'),
                                                     ('b', 'Banana'),
                                                     ('k', 'Kiwi')]))
        survey.add_question(Radio,
                            'Planet',
                            field_parms=OrderedDict([('e', 'Earth'),
                                                     ('m', 'Mars')]))
        survey.add_question(Checkboxes,
                            'Choose all that apply',
                            field_parms=OrderedDict([('a', 'Audi'),
                                                     ('b', 'BMW'),
                                                     ('v', 'Volkswagon')]))
        survey.add_question(Rating, 'Rate our service')

        survey.add_question(Integer, 'Pick an integer number')
        survey.add_question(Float, 'Pick a float number')

        survey = Survey.factory(name='Favourites Survey',
                                success_redirect='http://localhost/admin/')
        q = survey.add_question(Text, 'What is your favourite colour?')

        # generate some answers
        for colour in colours:
            group = AnswerGroup.factory(survey_version=survey.latest_version)
            survey.answer_question(q, group, colour)

        survey.new_version()
        q2 = survey.add_question(
            Text, 'What is your favourite way of spelling "favourite"?')

        group = AnswerGroup.factory(survey_version=survey.latest_version)
        survey.answer_question(q, group, colour[0])
        survey.answer_question(q2, group, 'favourite')

        user = User.objects.first()
        group = AnswerGroup.factory(survey_version=survey.latest_version,
                                    group_data=user)
        survey.answer_question(q, group, colour[1])
        survey.answer_question(q2, group, 'with the "u"')

        survey.new_version()
    def handle(self, *args, **options):
        survey = Survey.factory(name="Sample Survey", success_redirect="http://localhost:8000/admin/")
        survey.add_question(Text, "Single line text question")
        survey.add_question(MultiText, "Multiline question", required=True)
        survey.add_question(Email, "Email address")

        survey.add_question(
            Dropdown, "Favourite fruit", field_parms=OrderedDict([("a", "Apple"), ("b", "Banana"), ("k", "Kiwi")])
        )
        survey.add_question(Radio, "Planet", field_parms=OrderedDict([("e", "Earth"), ("m", "Mars")]))
        survey.add_question(
            Checkboxes,
            "Choose all that apply",
            field_parms=OrderedDict([("a", "Audi"), ("b", "BMW"), ("v", "Volkswagon")]),
        )
        survey.add_question(Rating, "Rate our service")

        survey.add_question(Integer, "Pick an integer number")
        survey.add_question(Float, "Pick a float number")

        survey = Survey.factory(name="Favourites Survey", success_redirect="http://localhost/admin/")
        q = survey.add_question(Text, "What is your favourite colour?")

        # generate some answers
        for colour in colours:
            group = AnswerGroup.factory(survey_version=survey.latest_version)
            survey.answer_question(q, group, colour)

        survey.new_version()
        q2 = survey.add_question(Text, 'What is your favourite way of spelling "favourite"?')

        group = AnswerGroup.factory(survey_version=survey.latest_version)
        survey.answer_question(q, group, colour[0])
        survey.answer_question(q2, group, "favourite")

        user = User.objects.first()
        group = AnswerGroup.factory(survey_version=survey.latest_version, group_data=user)
        survey.answer_question(q, group, colour[1])
        survey.answer_question(q2, group, 'with the "u"')

        survey.new_version()
Exemple #3
0
    def test_question_admin(self):
        self.initiate()

        question_admin = QuestionAdmin(Question, self.site)
        survey = Survey.factory(name="survey")
        version = survey.latest_version

        q1 = survey.add_question(Text, "1st question")
        survey.add_question(Text, "2nd question")

        # -- show_reorder
        url = "/admin/dform/questionorder/?survey_version__id=%s" % version.id
        html = self.field_value(question_admin, q1, "show_reorder")
        self._assert_link(html, url, "Reorder")

        # -- show_answers
        url = "/admin/dform/answer/?question__id=%s" % q1.id

        html = self.field_value(question_admin, q1, "show_answers")
        self.assertEqual("", html)

        # add an answer
        ag = AnswerGroup.factory(survey_version=survey.latest_version)
        a1 = survey.answer_question(q1, ag, "1st Answer")
        html = self.field_value(question_admin, q1, "show_answers")
        self._assert_link(html, url, "1 Answer")
        self.assertNotIn("Answers", html)

        # another answer
        ag2 = AnswerGroup.factory(survey_version=survey.latest_version)
        survey.answer_question(q1, ag2, "2nd Answer")
        html = self.field_value(question_admin, q1, "show_answers")
        self._assert_link(html, url, "2 Answers")

        # -- question order
        qo_admin = QuestionOrderAdmin(QuestionOrder, self.site)
        qo2 = QuestionOrder.objects.last()
        text = self.field_value(qo_admin, qo2, "show_text")
        self.assertEqual("2nd question", text)

        # move_up & move_down tested in awl.rankedmodel, just trip them for
        # coverage
        self.field_value(qo_admin, qo2, "move_up")
        self.field_value(qo_admin, qo2, "move_down")

        # -- answer admin
        answer_admin = AnswerAdmin(Answer, self.site)
        text = self.field_value(answer_admin, a1, "show_text")
        self.assertEqual("1st question", text)

        text = self.field_value(answer_admin, a1, "show_field_key")
        self.assertEqual("Text", text)
Exemple #4
0
    def test_question_admin(self):
        self.initiate()

        question_admin = QuestionAdmin(Question, self.site)
        survey = Survey.factory(name='survey')
        version = survey.latest_version

        q1 = survey.add_question(Text, '1st question')
        survey.add_question(Text, '2nd question')

        # -- show_reorder
        url = '/admin/dform/questionorder/?survey_version__id=%s' % version.id
        html = self.field_value(question_admin, q1, 'show_reorder')
        self._assert_link(html, url, 'Reorder')

        # -- show_answers
        url = '/admin/dform/answer/?question__id=%s' % q1.id

        html = self.field_value(question_admin, q1, 'show_answers')
        self.assertEqual('', html)

        # add an answer
        ag = AnswerGroup.factory(survey_version=survey.latest_version)
        a1 = survey.answer_question(q1, ag, '1st Answer')
        html = self.field_value(question_admin, q1, 'show_answers')
        self._assert_link(html, url, '1 Answer')
        self.assertNotIn('Answers', html)

        # another answer
        ag2 = AnswerGroup.factory(survey_version=survey.latest_version)
        survey.answer_question(q1, ag2, '2nd Answer')
        html = self.field_value(question_admin, q1, 'show_answers')
        self._assert_link(html, url, '2 Answers')

        # -- question order
        qo_admin = QuestionOrderAdmin(QuestionOrder, self.site)
        qo2 = QuestionOrder.objects.last()
        text = self.field_value(qo_admin, qo2, 'show_text')
        self.assertEqual('2nd question', text)

        # move_up & move_down tested in awl.rankedmodel, just trip them for
        # coverage
        self.field_value(qo_admin, qo2, 'move_up')
        self.field_value(qo_admin, qo2, 'move_down')

        # -- answer admin
        answer_admin = AnswerAdmin(Answer, self.site)
        text = self.field_value(answer_admin, a1, 'show_text')
        self.assertEqual('1st question', text)

        text = self.field_value(answer_admin, a1, 'show_field_key')
        self.assertEqual('Text', text)
Exemple #5
0
    def test_form(self):
        # coverage for edge cases not covered by SurveyViewTests

        with self.assertRaises(AttributeError):
            SurveyForm(initial={"foo": "bar"}, survey_version=None)

        survey = Survey.factory(name="survey", success_redirect="/foo/")
        survey.add_question(Text, "1st question")
        form = SurveyForm(survey_version=survey.latest_version)

        self.assertFalse(form.has_required())

        survey.add_question(Text, "2nd question", required=True)
        form = SurveyForm(survey_version=survey.latest_version)

        self.assertTrue(form.has_required())
Exemple #6
0
    def test_form(self):
        # coverage for edge cases not covered by SurveyViewTests

        with self.assertRaises(AttributeError):
            SurveyForm(initial={'foo': 'bar'}, survey_version=None)

        survey = Survey.factory(name='survey', success_redirect='/foo/')
        survey.add_question(Text, '1st question')
        form = SurveyForm(survey_version=survey.latest_version)

        self.assertFalse(form.has_required())

        survey.add_question(Text, '2nd question', required=True)
        form = SurveyForm(survey_version=survey.latest_version)

        self.assertTrue(form.has_required())
Exemple #7
0
    def test_recaptcha(self):
        survey = Survey.factory(name="test")
        url = "/dform/survey/%s/%s/" % (survey.latest_version.id, survey.token)

        with self.settings(DFORM_RECAPTCHA_KEY="this_is_a_key"):
            # make sure the recaptcha pieces didn't show up
            response = self.client.get(url)
            content = response.content.decode("utf-8")
            self.assertNotIn("recaptcha", content)

            # test again with recaptcha enabled
            survey.use_recaptcha = True
            survey.save()
            response = self.client.get(url)
            content = response.content.decode("utf-8")
            self.assertIn("recaptcha/api.js", content)
            self.assertIn("g-recaptcha", content)
            self.assertIn("this_is_a_key", content)
Exemple #8
0
    def test_on_success(self):
        survey = Survey.factory(name="test")
        version = survey.latest_version

        with self.assertRaises(AttributeError):
            version.on_success()

        with self.settings(DFORM_SUCCESS_REDIRECT="/one/"):
            self.assertEqual("/one/", version.on_success())

            survey.success_redirect = "/two/"
            survey.save()
            survey = refetch(survey)
            version = refetch(version)
            self.assertEqual("/two/", version.on_success())

            version.success_redirect = "/three/"
            self.assertEqual("/three/", version.on_success())
Exemple #9
0
    def test_on_success(self):
        survey = Survey.factory(name='test')
        version = survey.latest_version

        with self.assertRaises(AttributeError):
            version.on_success()

        with self.settings(DFORM_SUCCESS_REDIRECT='/one/'):
            self.assertEqual('/one/', version.on_success())

            survey.success_redirect = '/two/'
            survey.save()
            survey = refetch(survey)
            version = refetch(version)
            self.assertEqual('/two/', version.on_success())

            version.success_redirect = '/three/'
            self.assertEqual('/three/', version.on_success())
Exemple #10
0
def create_survey():
    # Creates and returns a survey and its questions
    survey = Survey.factory(name="survey", success_redirect="http://localhost/")

    # add some questions
    fields = OrderedDict()
    fields["multitext"] = survey.add_question(MultiText, "multi")
    fields["text"] = survey.add_question(Text, "text value and stuff and things")
    o = OrderedDict([("a", "Apple"), ("b", "Bear")])
    fields["dropdown"] = survey.add_question(Dropdown, "drop", field_parms=o)
    o = OrderedDict([("c", "Chair"), ("d", "Dog")])
    fields["radio"] = survey.add_question(Radio, "radio", field_parms=o)
    o = OrderedDict([("e", "Egg"), ("f", "Fan")])
    fields["checkboxes"] = survey.add_question(Checkboxes, "check", field_parms=o)
    fields["rating"] = survey.add_question(Rating, "rating")
    fields["integer"] = survey.add_question(Integer, "integer")
    fields["float"] = survey.add_question(Float, "float")

    return survey, fields
Exemple #11
0
def create_survey():
    # Creates and returns a survey and its questions
    survey = Survey.factory(name='survey',
                            success_redirect='http://localhost/')

    # add some questions
    fields = OrderedDict()
    fields['multitext'] = survey.add_question(MultiText, 'multi')
    fields['text'] = survey.add_question(Text,
                                         'text value and stuff and things')
    o = OrderedDict([('a', 'Apple'), ('b', 'Bear')])
    fields['dropdown'] = survey.add_question(Dropdown, 'drop', field_parms=o)
    o = OrderedDict([('c', 'Chair'), ('d', 'Dog')])
    fields['radio'] = survey.add_question(Radio, 'radio', field_parms=o)
    o = OrderedDict([('e', 'Egg'), ('f', 'Fan')])
    fields['checkboxes'] = survey.add_question(Checkboxes,
                                               'check',
                                               field_parms=o)
    fields['rating'] = survey.add_question(Rating, 'rating')
    fields['integer'] = survey.add_question(Integer, 'integer')
    fields['float'] = survey.add_question(Float, 'float')

    return survey, fields
Exemple #12
0
    def test_answer(self):
        self.initiate()

        answer_group_admin = AnswerGroupAdmin(AnswerGroup, self.site)

        survey = Survey.factory(name="survey")
        q1 = survey.add_question(Text, "1st question")

        # create a basic AnswerGroup and test its results
        ag1 = AnswerGroup.factory(survey_version=survey.latest_version)

        result = self.field_value(answer_group_admin, ag1, "show_data")
        self.assertEqual("", result)
        html = self.field_value(answer_group_admin, ag1, "show_questions")
        url, text = parse_link(html)
        self.assertEqual("1 Question", text)
        result = self.field_value(answer_group_admin, ag1, "show_answers")
        self.assertEqual("", result)

        # add a question and check for change
        q2 = survey.add_question(Text, "2nd question")

        html = self.field_value(answer_group_admin, ag1, "show_questions")
        url, text = parse_link(html)
        self.assertEqual("2 Questions", text)

        # add an answer and check for change
        survey.answer_question(q1, ag1, "stuff")
        html = self.field_value(answer_group_admin, ag1, "show_answers")
        url, text = parse_link(html)
        self.assertEqual("1 Answer", text)

        # add another answer
        survey.answer_question(q2, ag1, "stuff")
        html = self.field_value(answer_group_admin, ag1, "show_answers")
        url, text = parse_link(html)
        self.assertEqual("2 Answers", text)
Exemple #13
0
    def test_answer(self):
        self.initiate()

        answer_group_admin = AnswerGroupAdmin(AnswerGroup, self.site)

        survey = Survey.factory(name='survey')
        q1 = survey.add_question(Text, '1st question')

        # create a basic AnswerGroup and test its results
        ag1 = AnswerGroup.factory(survey_version=survey.latest_version)

        result = self.field_value(answer_group_admin, ag1, 'show_data')
        self.assertEqual('', result)
        html = self.field_value(answer_group_admin, ag1, 'show_questions')
        url, text = parse_link(html)
        self.assertEqual('1 Question', text)
        result = self.field_value(answer_group_admin, ag1, 'show_answers')
        self.assertEqual('', result)

        # add a question and check for change
        q2 = survey.add_question(Text, '2nd question')

        html = self.field_value(answer_group_admin, ag1, 'show_questions')
        url, text = parse_link(html)
        self.assertEqual('2 Questions', text)

        # add an answer and check for change
        survey.answer_question(q1, ag1, 'stuff')
        html = self.field_value(answer_group_admin, ag1, 'show_answers')
        url, text = parse_link(html)
        self.assertEqual('1 Answer', text)

        # add another answer
        survey.answer_question(q2, ag1, 'stuff')
        html = self.field_value(answer_group_admin, ag1, 'show_answers')
        url, text = parse_link(html)
        self.assertEqual('2 Answers', text)
Exemple #14
0
    def test_survey_admin_links(self):
        # different test cases from test_survey_admin that need non-standard
        # surveys to be built while we're testing, so this is going in its own
        # method
        self.initiate()

        survey_admin = SurveyAdmin(Survey, self.site)
        version_admin = SurveyVersionAdmin(SurveyVersion, self.site)
        group_admin = AnswerGroupAdmin(AnswerGroup, self.site)
        survey = Survey.factory(name="survey")
        first_version = survey.latest_version

        # -- show_questions
        html = self.field_value(survey_admin, survey, "show_questions")
        self.assertEqual("", html)

        html = self.field_value(version_admin, first_version, "show_questions")
        self.assertEqual("", html)

        # add question, try again
        q_url = "/admin/dform/question/?survey_versions__id=%s" % (survey.latest_version.id)
        r_url = "/admin/dform/questionorder/?survey_version__id=%s" % (survey.latest_version.id)

        q = survey.add_question(Text, "first question")

        html = self.field_value(survey_admin, survey, "show_questions")
        self._assert_question_fields(html, q_url, "1 Question", r_url)
        self.assertNotIn("Questions", html)

        html = self.field_value(version_admin, first_version, "show_questions")
        self._assert_question_fields(html, q_url, "1 Question", r_url)
        self.assertNotIn("Questions", html)

        # add question, handling multiples
        survey.add_question(Text, "second question")

        html = self.field_value(survey_admin, survey, "show_questions")
        self._assert_question_fields(html, q_url, "2 Questions", r_url)

        html = self.field_value(version_admin, first_version, "show_questions")
        self._assert_question_fields(html, q_url, "2 Questions", r_url)

        # -- show answers

        # verify "show answers" URLs no answers
        html = self.field_value(survey_admin, survey, "show_answers")
        self.assertEqual("", html)

        html = self.field_value(version_admin, first_version, "show_answers")
        self.assertEqual("", html)

        # add answer
        ag = AnswerGroup.factory(survey_version=survey.latest_version)
        survey.answer_question(q, ag, "1st Answer")

        # urls for these answers
        sa_url = "/admin/dform/answergroup/?survey_version__survey__id=%s" % (survey.latest_version.id)
        sva_url = "/admin/dform/answergroup/?survey_version__id=%s" % (survey.latest_version.id)
        ch_url = "/dform/survey_with_answers/%s/%s/%s/%s/" % (survey.latest_version.id, survey.token, ag.id, ag.token)
        link_url = "/dform_admin/answer_links/%s/" % survey.latest_version.id

        # verify AG "show actions" URLs
        html = self.field_value(group_admin, ag, "show_actions")
        actions = html.split(",")
        self.assertEqual(2, len(actions))
        self._assert_link(actions[0], ch_url, "Change Answers")
        self._assert_link(actions[1], link_url, "Show Links")

        # verify "show answers" URLs, single answer
        html = self.field_value(survey_admin, survey, "show_answers")
        self._assert_link(html, sa_url, "1 Answer Set")
        self.assertNotIn("Answers", html)

        html = self.field_value(version_admin, first_version, "show_answers")
        self._assert_link(html, sva_url, "1 Answer Set")
        self.assertNotIn("Answers", html)

        # add another answer, handling multiples
        ag2 = AnswerGroup.factory(survey_version=survey.latest_version)
        survey.answer_question(q, ag2, "2nd Answer")

        html = self.field_value(survey_admin, survey, "show_answers")
        self._assert_link(html, sa_url, "2 Answer Sets")

        html = self.field_value(version_admin, first_version, "show_answers")
        self._assert_link(html, sva_url, "2 Answer Sets")

        # --- misc for coverage
        self.assertTrue(group_admin.lookup_allowed("survey_version__survey__id", 1))
        self.assertFalse(group_admin.lookup_allowed("survey_version__survey", 1))
Exemple #15
0
    def test_survey_admin_links(self):
        # different test cases from test_survey_admin that need non-standard
        # surveys to be built while we're testing, so this is going in its own
        # method
        self.initiate()

        survey_admin = SurveyAdmin(Survey, self.site)
        version_admin = SurveyVersionAdmin(SurveyVersion, self.site)
        group_admin = AnswerGroupAdmin(AnswerGroup, self.site)
        survey = Survey.factory(name='survey')
        first_version = survey.latest_version

        # -- show_questions
        html = self.field_value(survey_admin, survey, 'show_questions')
        self.assertEqual('', html)

        html = self.field_value(version_admin, first_version, 'show_questions')
        self.assertEqual('', html)

        # add question, try again
        q_url = '/admin/dform/question/?survey_versions__id=%s' % (
            survey.latest_version.id)
        r_url = '/admin/dform/questionorder/?survey_version__id=%s' % (
            survey.latest_version.id)

        q = survey.add_question(Text, 'first question')

        html = self.field_value(survey_admin, survey, 'show_questions')
        self._assert_question_fields(html, q_url, '1 Question', r_url)
        self.assertNotIn('Questions', html)

        html = self.field_value(version_admin, first_version, 'show_questions')
        self._assert_question_fields(html, q_url, '1 Question', r_url)
        self.assertNotIn('Questions', html)

        # add question, handling multiples
        survey.add_question(Text, 'second question')

        html = self.field_value(survey_admin, survey, 'show_questions')
        self._assert_question_fields(html, q_url, '2 Questions', r_url)

        html = self.field_value(version_admin, first_version, 'show_questions')
        self._assert_question_fields(html, q_url, '2 Questions', r_url)

        # -- show answers

        # verify "show answers" URLs no answers
        html = self.field_value(survey_admin, survey, 'show_answers')
        self.assertEqual('', html)

        html = self.field_value(version_admin, first_version, 'show_answers')
        self.assertEqual('', html)

        # add answer
        ag = AnswerGroup.factory(survey_version=survey.latest_version)
        survey.answer_question(q, ag, '1st Answer')

        # urls for these answers
        sa_url = '/admin/dform/answergroup/?survey_version__survey__id=%s' % (
            survey.latest_version.id)
        sva_url = '/admin/dform/answergroup/?survey_version__id=%s' % (
            survey.latest_version.id)
        ch_url = '/dform/survey_with_answers/%s/%s/%s/%s/' % (
            survey.latest_version.id, survey.token, ag.id, ag.token)
        link_url = '/dform_admin/answer_links/%s/' % survey.latest_version.id

        # verify AG "show actions" URLs
        html = self.field_value(group_admin, ag, 'show_actions')
        actions = html.split(',')
        self.assertEqual(2, len(actions))
        self._assert_link(actions[0], ch_url, 'Change Answers')
        self._assert_link(actions[1], link_url, 'Show Links')

        # verify "show answers" URLs, single answer
        html = self.field_value(survey_admin, survey, 'show_answers')
        self._assert_link(html, sa_url, '1 Answer Set')
        self.assertNotIn('Answers', html)

        html = self.field_value(version_admin, first_version, 'show_answers')
        self._assert_link(html, sva_url, '1 Answer Set')
        self.assertNotIn('Answers', html)

        # add another answer, handling multiples
        ag2 = AnswerGroup.factory(survey_version=survey.latest_version)
        survey.answer_question(q, ag2, '2nd Answer')

        html = self.field_value(survey_admin, survey, 'show_answers')
        self._assert_link(html, sa_url, '2 Answer Sets')

        html = self.field_value(version_admin, first_version, 'show_answers')
        self._assert_link(html, sva_url, '2 Answer Sets')

        # --- misc for coverage
        self.assertTrue(
            group_admin.lookup_allowed('survey_version__survey__id', 1))
        self.assertFalse(
            group_admin.lookup_allowed('survey_version__survey', 1))