From 2b1dd0f3e80aefcab1342a03fe82dd3a91f1305f Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz <henrik@levkowetz.com> Date: Thu, 1 Aug 2019 15:09:51 +0000 Subject: [PATCH] Merged in [16590] from rjsparks@nostrum.com: Example of using webtest. The full testcase was not converted because the add_rule form is modified in-flight by javascript when a control value is changed. - Legacy-Id: 16609 Note: SVN reference [16590] has been migrated to Git commit e89f200abc0d9af7609e4bff3592f87eddee1359 --- ietf/community/tests.py | 32 ++++++++++++++--------- ietf/templates/community/manage_list.html | 4 +-- requirements.txt | 2 ++ requirements3.txt | 1 + 4 files changed, 24 insertions(+), 15 deletions(-) diff --git a/ietf/community/tests.py b/ietf/community/tests.py index 062cb6d76..f9cffff7f 100644 --- a/ietf/community/tests.py +++ b/ietf/community/tests.py @@ -9,6 +9,8 @@ from pyquery import PyQuery from django.urls import reverse as urlreverse from django.contrib.auth.models import User +from django_webtest import WebTest + import debug # pyflakes:ignore from ietf.community.models import CommunityList, SearchRule, EmailSubscription @@ -20,13 +22,13 @@ from ietf.group.utils import setup_default_community_list_for_group from ietf.doc.models import State from ietf.doc.utils import add_state_change_event from ietf.person.models import Person, Email -from ietf.utils.test_utils import login_testing_unauthorized, TestCase +from ietf.utils.test_utils import login_testing_unauthorized from ietf.utils.mail import outbox from ietf.doc.factories import WgDraftFactory from ietf.group.factories import GroupFactory, RoleFactory from ietf.person.factories import PersonFactory -class CommunityListTests(TestCase): +class CommunityListTests(WebTest): def test_rule_matching(self): plain = PersonFactory(user__username='plain') ad = Person.objects.get(user__username='ad') @@ -108,25 +110,29 @@ class CommunityListTests(TestCase): url = urlreverse(ietf.community.views.manage_list, kwargs={ "username": "plain" }) login_testing_unauthorized(self, "plain", url) - r = self.client.get(url) - self.assertEqual(r.status_code, 200) + page = self.app.get(url, user='plain') + self.assertEqual(page.status_int, 200) # add document - r = self.client.post(url, { "action": "add_documents", "documents": draft.pk }) - self.assertEqual(r.status_code, 302) + self.assertIn('add_document', page.forms) + form = page.forms['add_document'] + form['documents']=draft.pk + page = form.submit('action',value='add_documents') + self.assertEqual(page.status_int, 302) clist = CommunityList.objects.get(user__username="plain") - self.assertTrue(clist.added_docs.filter(pk=draft.pk)) + self.assertTrue(clist.added_docs.filter(pk=draft.pk)) + page = page.follow() - # document shows up on GET - r = self.client.get(url) - self.assertEqual(r.status_code, 200) - self.assertContains(r, draft.name) + self.assertContains(page, draft.name) # remove document - r = self.client.post(url, { "action": "remove_document", "document": draft.pk }) - self.assertEqual(r.status_code, 302) + self.assertIn('remove_document_%s' % draft.pk, page.forms) + form = page.forms['remove_document_%s' % draft.pk] + page = form.submit('action',value='remove_document') + self.assertEqual(page.status_int, 302) clist = CommunityList.objects.get(user__username="plain") self.assertTrue(not clist.added_docs.filter(pk=draft.pk)) + page = page.follow() # add rule r = self.client.post(url, { diff --git a/ietf/templates/community/manage_list.html b/ietf/templates/community/manage_list.html index 89ff91bb5..817a873fa 100644 --- a/ietf/templates/community/manage_list.html +++ b/ietf/templates/community/manage_list.html @@ -33,7 +33,7 @@ <tr> <td>{{ d.name }}</td> <td> - <form method="post"> + <form method="post" id="remove_document_{{d.pk}}"> {% csrf_token %} <input type="hidden" name="document" value="{{ d.pk }}"> <button class="btn btn-danger btn-xs" name="action" value="remove_document">Remove</button> @@ -55,7 +55,7 @@ <p>You can also add documents here:</p> {% endif %} - <form class="form add-document" method="post"> + <form class="form add-document" method="post" id="add_document"> {% csrf_token %} {% bootstrap_field add_doc_form.documents show_label=False %} <button class="btn btn-primary" name="action" value="add_documents">Add documents</button> diff --git a/requirements.txt b/requirements.txt index 1434187af..a47532682 100644 --- a/requirements.txt +++ b/requirements.txt @@ -21,6 +21,7 @@ django-password-strength>=1.2.1 django-referrer-policy>=1.0 django-simple-history>=2.3.0 django-tastypie>=0.13.2 +django-webtest>=1.9.7 django-widget-tweaks>=1.3 docutils>=0.12,!=0.15 factory-boy>=2.9.0 @@ -32,6 +33,7 @@ httplib2>=0.10.3 jsonfield>=1.0.3 # for SubmissionCheck. This is https://github.com/bradjasper/django-jsonfield/. jwcrypto>=0.4.0 # for signed notifications #lxml>=3.4.0 # from PyQuery; +markdown2>=2.3.8 mock>=2.0.0 mysqlclient>=1.3.13 oauth2client>=4.0.0 # required by google-api-python-client, but not always pulled in diff --git a/requirements3.txt b/requirements3.txt index 70719cdd1..ff1361acd 100644 --- a/requirements3.txt +++ b/requirements3.txt @@ -21,6 +21,7 @@ django-password-strength>=1.2.1 django-referrer-policy>=1.0 django-simple-history>=2.3.0 django-tastypie>=0.13.2 +django-webtest>=1.9.7 django-widget-tweaks>=1.3 docutils>=0.12,!=0.15 factory-boy>=2.9.0