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()
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)
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)
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())
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())
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)
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())
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())
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
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
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)
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)
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))
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))