From 318d443010954e4da6f0c5e2b8b536e8e9fb058f Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: May 02 2019 14:01:33 +0000 Subject: [PATCH 1/7] Port elections to python3 Signed-off-by: Pierre-Yves Chibon --- diff --git a/fedora_elections/__init__.py b/fedora_elections/__init__.py index 81e4b36..00ff7fa 100644 --- a/fedora_elections/__init__.py +++ b/fedora_elections/__init__.py @@ -23,6 +23,7 @@ # Frank Chiulli # Pierre-Yves Chibon # +from __future__ import unicode_literals, absolute_import __version__ = '2.7' @@ -36,10 +37,11 @@ import arrow # noqa from datetime import datetime, time, timedelta # noqa from functools import wraps # noqa -from urlparse import urlparse, urljoin # noqa +from six.moves.urllib.parse import urlparse, urljoin, urlencode # noqa import flask # noqa import munch # noqa +import six # noqa from fedora.client import AuthError, AppError # noqa from fedora.client.fas2 import AccountSystem # noqa @@ -126,7 +128,7 @@ def is_admin(user, user_groups=None): return False admins = APP.config['FEDORA_ELECTIONS_ADMIN_GROUP'] - if isinstance(admins, basestring): # pragma: no cover + if isinstance(admins, six.string_types): # pragma: no cover admins = set([admins]) else: admins = set(admins) @@ -189,7 +191,8 @@ def rjust_filter(text, length): @APP.template_filter('avatar') def avatar_filter(openid, size=64, default='retro'): - query = urllib.urlencode({'s': size, 'd': default}) + query = urlencode({'s': size, 'd': default}) + openid = openid.encode("utf-8") hashhex = hashlib.sha256(openid).hexdigest() return "https://seccdn.libravatar.org/avatar/%s?%s" % (hashhex, query) @@ -344,5 +347,5 @@ def auth_logout(): # Finalize the import of other controllers -import admin # noqa -import elections # noqa +import fedora_elections.admin # noqa +import fedora_elections.elections # noqa diff --git a/fedora_elections/admin.py b/fedora_elections/admin.py index c34694d..beab90e 100644 --- a/fedora_elections/admin.py +++ b/fedora_elections/admin.py @@ -23,6 +23,7 @@ # Frank Chiulli # Pierre-Yves Chibon # +from __future__ import unicode_literals, absolute_import from datetime import datetime, time from functools import wraps diff --git a/fedora_elections/default_config.py b/fedora_elections/default_config.py index 6799bf6..938cb53 100644 --- a/fedora_elections/default_config.py +++ b/fedora_elections/default_config.py @@ -5,6 +5,7 @@ Fedora elections default configuration. ''' import os from datetime import timedelta +from fedora_elections.mail_logging import MSG_FORMAT, ContextInjector # Set the time after which the session expires PERMANENT_SESSION_LIFETIME = timedelta(hours=1) @@ -25,6 +26,6 @@ FAS_CHECK_CERT = False OIDC_CLIENT_SECRETS = os.path.join(os.path.dirname( - os.path.abspath(__file__)), 'client_secrets.json') + os.path.abspath(__file__)), '..', 'client_secrets.json') OIDC_SCOPES = ['openid', 'email', 'profile', 'fedora'] OIDC_OPENID_REALM = 'http://localhost:5005/oidc_callback' diff --git a/fedora_elections/elections.py b/fedora_elections/elections.py index 41a2804..a4c98c7 100644 --- a/fedora_elections/elections.py +++ b/fedora_elections/elections.py @@ -23,6 +23,7 @@ # Frank Chiulli # Pierre-Yves Chibon # +from __future__ import unicode_literals, absolute_import from datetime import datetime from functools import wraps diff --git a/fedora_elections/fedmsgshim.py b/fedora_elections/fedmsgshim.py index 1285b34..0336d16 100644 --- a/fedora_elections/fedmsgshim.py +++ b/fedora_elections/fedmsgshim.py @@ -4,6 +4,7 @@ :Author: Pierre-Yves Chibon """ +from __future__ import unicode_literals, absolute_import import warnings import logging diff --git a/fedora_elections/forms.py b/fedora_elections/forms.py index 1c3fb75..8fc90b0 100644 --- a/fedora_elections/forms.py +++ b/fedora_elections/forms.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +from __future__ import unicode_literals, absolute_import import flask import wtforms diff --git a/fedora_elections/mail_logging.py b/fedora_elections/mail_logging.py index 39562ad..c990b0e 100644 --- a/fedora_elections/mail_logging.py +++ b/fedora_elections/mail_logging.py @@ -22,6 +22,8 @@ ''' Mail handler for logging. ''' +from __future__ import unicode_literals, absolute_import + import logging import logging.handlers diff --git a/fedora_elections/models.py b/fedora_elections/models.py index b82af00..b447bb6 100644 --- a/fedora_elections/models.py +++ b/fedora_elections/models.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +from __future__ import unicode_literals, absolute_import from datetime import datetime diff --git a/fedora_elections/proxy.py b/fedora_elections/proxy.py index 8e2e6b1..e53890f 100644 --- a/fedora_elections/proxy.py +++ b/fedora_elections/proxy.py @@ -25,6 +25,7 @@ redirects are using ``https``. Source: http://flask.pocoo.org/snippets/35/ by Peter Hansen ''' +from __future__ import unicode_literals, absolute_import class ReverseProxied(object): diff --git a/fedora_elections/utils.py b/fedora_elections/utils.py index 4bf23d1..c90460a 100644 --- a/fedora_elections/utils.py +++ b/fedora_elections/utils.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +from __future__ import unicode_literals, absolute_import import fedora_elections diff --git a/tests/__init__.py b/tests/__init__.py index 68b0a3a..49b1449 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -34,6 +34,7 @@ from datetime import date from datetime import timedelta from functools import wraps +import six from contextlib import contextmanager from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker @@ -117,7 +118,7 @@ class ModelFlasktests(Modeltests): def setup_db(self): """ Add a calendar and some meetings so that we can play with something. """ - from test_vote import Votetests + from tests.test_vote import Votetests votes = Votetests('test_init_vote') votes.session = self.session votes.test_init_vote() @@ -184,7 +185,7 @@ class FakeUser(object): :arg groups: list of the groups in which this fake user is supposed to be. """ - if isinstance(groups, basestring): + if isinstance(groups, six.string_types): groups = [groups] self.groups = groups self.username = username diff --git a/tests/test_candidate.py b/tests/test_candidate.py index 90bdc08..aab8751 100644 --- a/tests/test_candidate.py +++ b/tests/test_candidate.py @@ -35,7 +35,7 @@ sys.path.insert(0, os.path.join(os.path.dirname( from fedora_elections import models from tests import Modeltests, TODAY -from test_election import Electiontests +from tests.test_election import Electiontests # pylint: disable=R0904 diff --git a/tests/test_vote.py b/tests/test_vote.py index 92f1e71..1f9adac 100644 --- a/tests/test_vote.py +++ b/tests/test_vote.py @@ -35,7 +35,7 @@ sys.path.insert(0, os.path.join(os.path.dirname( from fedora_elections import models from tests import Modeltests, TODAY -from test_candidate import Candidatetests +from tests.test_candidate import Candidatetests # pylint: disable=R0904 From f2569cff1be2705596bf77ae53f747f4c438aa97 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: May 02 2019 14:01:49 +0000 Subject: [PATCH 2/7] Port the tests to python3 --- diff --git a/tests/test_flask.py b/tests/test_flask.py index 1899954..0645662 100644 --- a/tests/test_flask.py +++ b/tests/test_flask.py @@ -64,51 +64,57 @@ class Flasktests(ModelFlasktests): """ Test the index function. """ output = self.app.get('/') self.assertEqual(output.status_code, 200) - self.assertTrue('Fedora elections' in output.data) - self.assertFalse('

Current elections

' in output.data) - self.assertFalse('

Next' in output.data) - self.assertFalse('

Last' in output.data) - self.assertTrue('Log In' in output.data) + output_text = output.get_data(as_text=True) + self.assertIn('Fedora elections', output_text) + self.assertNotIn('

Current elections

', output_text) + self.assertNotIn('

Next', output_text) + self.assertNotIn('

Last', output_text) + self.assertIn('Log In', output_text) user = FakeUser([], username='pingou') with user_set(fedora_elections.APP, user): output = self.app.get('/', follow_redirects=True) self.assertEqual(output.status_code, 200) - self.assertTrue('Fedora elections' in output.data) - self.assertTrue( - 'log out' in output.data) + output_text = output.get_data(as_text=True) + self.assertIn('Fedora elections', output_text) + self.assertIn( + 'log out', + output_text) def test_index_filled(self): """ Test the index function. """ self.setup_db() output = self.app.get('/') self.assertEqual(output.status_code, 200) - self.assertTrue('

Elections' in output.data) - self.assertTrue('

Open elections

' in output.data) - self.assertTrue('Upcoming elections' in output.data) - self.assertTrue('Log In' in output.data) + output_text = output.get_data(as_text=True) + self.assertTrue('

Elections' in output_text) + self.assertTrue('

Open elections

' in output_text) + self.assertTrue('Upcoming elections' in output_text) + self.assertTrue('Log In' in output_text) user = FakeUser([], username='pingou') with user_set(fedora_elections.APP, user): output = self.app.get('/') self.assertEqual(output.status_code, 200) - self.assertTrue('

Elections' in output.data) - self.assertTrue('

Open elections

' in output.data) - self.assertTrue('Upcoming elections' in output.data) - self.assertTrue('log out' in output.data) - self.assertEqual(output.data.count('Vote now!'), 4) + 'log out' in output_text) + self.assertEqual(output_text.count('Vote now!'), 4) user = FakeUser([], username='toshio') with user_set(fedora_elections.APP, user): output = self.app.get('/') self.assertEqual(output.status_code, 200) - self.assertTrue('

Elections' in output.data) - self.assertTrue('

Open elections

' in output.data) - self.assertTrue('Upcoming elections' in output.data) + output_text = output.get_data(as_text=True) + self.assertTrue('

Elections' in output_text) + self.assertTrue('

Open elections

' in output_text) + self.assertTrue('Upcoming elections' in output_text) self.assertTrue( - 'log out' in output.data) + 'log out' in output_text) def test_is_admin(self): """ Test the is_admin function. """ @@ -208,15 +214,17 @@ class Flasktests(ModelFlasktests): flask.g.fas_user = FakeUser(['gitr2spec']) output = self.app.get('/login') self.assertEqual(output.status_code, 302) + output_text = output.get_data(as_text=True) self.assertIn( 'https://iddev.fedorainfracloud.org/openidc/Authorization?', - output.data) + output_text) output = self.app.get('/login?next=http://localhost/') self.assertEqual(output.status_code, 302) + output_text = output.get_data(as_text=True) self.assertIn( 'https://iddev.fedorainfracloud.org/openidc/Authorization?', - output.data) + output_text) # self.setup_db() # user = FakeUser([], username='pingou') @@ -232,19 +240,21 @@ class Flasktests(ModelFlasktests): with user_set(fedora_elections.APP, user): output = self.app.get('/logout', follow_redirects=True) self.assertEqual(output.status_code, 200) - self.assertTrue('Fedora elections' in output.data) + output_text = output.get_data(as_text=True) + self.assertTrue('Fedora elections' in output_text) self.assertTrue( 'You have been logged out' - in output.data) + in output_text) user = None with user_set(fedora_elections.APP, user): output = self.app.get('/logout', follow_redirects=True) self.assertEqual(output.status_code, 200) - self.assertTrue('Fedora elections' in output.data) + output_text = output.get_data(as_text=True) + self.assertTrue('Fedora elections' in output_text) self.assertFalse( 'You have been logged out' - in output.data) + in output_text) def test_about_election(self): """ Test the about_election function. """ @@ -259,26 +269,28 @@ class Flasktests(ModelFlasktests): #we get redirected to the main page. output = self.app.get('/about/blah', follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertTrue( 'The election, blah, does not exist.' - in output.data) - self.assertTrue('

Elections' in output.data) - self.assertTrue('

Open elections

' in output.data) - self.assertTrue('Upcoming elections' in output.data) + in output_text) + self.assertTrue('

Elections' in output_text) + self.assertTrue('

Open elections

' in output_text) + self.assertTrue('Upcoming elections' in output_text) #test_election does exist, so check if it shows # with the correct candidates output = self.app.get('/about/test_election') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertTrue( - 'Election Information' in output.data) + 'Election Information' in output_text) self.assertTrue( '' - in output.data) + in output_text) self.assertTrue( '' - in output.data) - self.assertTrue('Log In' in output.data) + in output_text) + self.assertTrue('Log In' in output_text) def test_archived_election(self): """ Test the archived_elections function. """ @@ -287,23 +299,25 @@ class Flasktests(ModelFlasktests): output = self.app.get('/archives', follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertTrue( 'There are no archived elections.' - in output.data) - self.assertTrue('Fedora elections' in output.data) - self.assertTrue('

Elections' in output.data) + in output_text) + self.assertTrue('Fedora elections' in output_text) + self.assertTrue('

Elections' in output_text) self.setup_db() output = self.app.get('/archives') self.assertEqual(output.status_code, 200) - self.assertTrue('Fedora elections' in output.data) + output_text = output.get_data(as_text=True) + self.assertTrue('Fedora elections' in output_text) self.assertTrue( - 'test election 2 shortdesc' in output.data) + 'test election 2 shortdesc' in output_text) self.assertTrue( - 'test election shortdesc' in output.data) - self.assertEqual(output.data.count('href="/about/'), 2) - self.assertTrue('Log In' in output.data) + 'test election shortdesc' in output_text) + self.assertEqual(output_text.count('href="/about/'), 2) + self.assertTrue('Log In' in output_text) def test_open_elections(self): """ Test the open_elections function. """ @@ -311,33 +325,36 @@ class Flasktests(ModelFlasktests): output = self.app.get('/') self.assertEqual(output.status_code, 200) - self.assertTrue('

Elections' in output.data) - self.assertTrue('

Open elections

' in output.data) - self.assertTrue('Upcoming elections' in output.data) - self.assertTrue('href="/vote/' in output.data) - self.assertTrue('Log In' in output.data) + output_text = output.get_data(as_text=True) + self.assertTrue('

Elections' in output_text) + self.assertTrue('

Open elections

' in output_text) + self.assertTrue('Upcoming elections' in output_text) + self.assertTrue('href="/vote/' in output_text) + self.assertTrue('Log In' in output_text) user = FakeUser([], username='pingou') with user_set(fedora_elections.APP, user): output = self.app.get('/') self.assertEqual(output.status_code, 200) - self.assertTrue('

Elections' in output.data) - self.assertTrue('

Open elections

' in output.data) - self.assertTrue('Upcoming elections' in output.data) - self.assertTrue('href="/vote/' in output.data) + output_text = output.get_data(as_text=True) + self.assertTrue('

Elections' in output_text) + self.assertTrue('

Open elections

' in output_text) + self.assertTrue('Upcoming elections' in output_text) + self.assertTrue('href="/vote/' in output_text) self.assertTrue( - 'log out' in output.data) - self.assertEqual(output.data.count('Vote now!'), 4) + 'log out' in output_text) + self.assertEqual(output_text.count('Vote now!'), 4) user = FakeUser([], username='toshio') with user_set(fedora_elections.APP, user): output = self.app.get('/') self.assertEqual(output.status_code, 200) - self.assertTrue('

Elections' in output.data) - self.assertTrue('

Open elections

' in output.data) - self.assertTrue('Upcoming elections' in output.data) + output_text = output.get_data(as_text=True) + self.assertTrue('

Elections' in output_text) + self.assertTrue('

Open elections

' in output_text) + self.assertTrue('Upcoming elections' in output_text) self.assertTrue( - 'log out' in output.data) + 'log out' in output_text) if __name__ == '__main__': SUITE = unittest.TestLoader().loadTestsFromTestCase(Flasktests) diff --git a/tests/test_flask_admin.py b/tests/test_flask_admin.py index 45ebcc6..468d24d 100644 --- a/tests/test_flask_admin.py +++ b/tests/test_flask_admin.py @@ -65,8 +65,9 @@ class FlaskAdmintests(ModelFlasktests): 'fedora_elections.OIDC.user_getfield', MagicMock(return_value=['elections'])): output = self.app.get('/admin/test_election/') + output_text = output.get_data(as_text=True) self.assertEqual(output.status_code, 200) - self.assertTrue('Candidates 3' in output.data) + self.assertTrue('Candidates 3' in output_text) def test_admin_no_cla(self): """ Test the admin_new_election function. """ @@ -98,16 +99,17 @@ class FlaskAdmintests(ModelFlasktests): MagicMock(return_value=['elections'])): output = self.app.get('/admin/new') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertTrue( - '

Create new election

' in output.data) + '

Create new election

' in output_text) if self.get_wtforms_version() >= (2, 2): self.assertIn( 'input class="form-control" id="shortdesc" ' - 'name="shortdesc" required type="text" ', output.data) + 'name="shortdesc" required type="text" ', output_text) else: self.assertIn( 'input class="form-control" id="shortdesc" ' - 'name="shortdesc" type="text" ', output.data) + 'name="shortdesc" type="text" ', output_text) # No csrf provided data = { @@ -125,16 +127,17 @@ class FlaskAdmintests(ModelFlasktests): output = self.app.post('/admin/new', data=data) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertTrue( - '

Create new election

' in output.data) + '

Create new election

' in output_text) if self.get_wtforms_version() >= (2, 2): self.assertIn( 'input class="form-control" id="shortdesc" ' - 'name="shortdesc" required type="text" ', output.data) + 'name="shortdesc" required type="text" ', output_text) else: self.assertIn( 'input class="form-control" id="shortdesc" ' - 'name="shortdesc" type="text" ', output.data) + 'name="shortdesc" type="text" ', output_text) csrf_token = self.get_csrf(output=output) @@ -154,19 +157,20 @@ class FlaskAdmintests(ModelFlasktests): output = self.app.post('/admin/new', data=data) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertTrue( - '

Create new election

' in output.data) + '

Create new election

' in output_text) if self.get_wtforms_version() >= (2, 2): self.assertIn( 'input class="form-control" id="shortdesc" ' - 'name="shortdesc" required type="text" ', output.data) + 'name="shortdesc" required type="text" ', output_text) else: self.assertIn( 'input class="form-control" id="shortdesc" ' - 'name="shortdesc" type="text" ', output.data) + 'name="shortdesc" type="text" ', output_text) self.assertTrue( '' - in output.data) + in output_text) # Invalid alias data = { @@ -185,19 +189,20 @@ class FlaskAdmintests(ModelFlasktests): output = self.app.post('/admin/new', data=data) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertTrue( - '

Create new election

' in output.data) + '

Create new election

' in output_text) if self.get_wtforms_version() >= (2, 2): self.assertIn( 'input class="form-control" id="shortdesc" ' - 'name="shortdesc" required type="text" ', output.data) + 'name="shortdesc" required type="text" ', output_text) else: self.assertIn( 'input class="form-control" id="shortdesc" ' - 'name="shortdesc" type="text" ', output.data) + 'name="shortdesc" type="text" ', output_text) self.assertTrue( '' - in output.data) + in output_text) # Invalid: end_date earlier than start_date data = { @@ -216,19 +221,20 @@ class FlaskAdmintests(ModelFlasktests): output = self.app.post('/admin/new', data=data) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertTrue( - '

Create new election

' in output.data) + '

Create new election

' in output_text) if self.get_wtforms_version() >= (2, 2): self.assertIn( 'input class="form-control" id="shortdesc" ' - 'name="shortdesc" required type="text" ', output.data) + 'name="shortdesc" required type="text" ', output_text) else: self.assertIn( 'input class="form-control" id="shortdesc" ' - 'name="shortdesc" type="text" ', output.data) + 'name="shortdesc" type="text" ', output_text) self.assertTrue( 'class="form-control-feedback">End date must be later than start date.' - in output.data) + in output_text) # Invalid: alias already taken data = { @@ -247,19 +253,20 @@ class FlaskAdmintests(ModelFlasktests): output = self.app.post('/admin/new', data=data) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertTrue( - '

Create new election

' in output.data) + '

Create new election

' in output_text) if self.get_wtforms_version() >= (2, 2): self.assertIn( 'input class="form-control" id="shortdesc" ' - 'name="shortdesc" required type="text" ', output.data) + 'name="shortdesc" required type="text" ', output_text) else: self.assertIn( 'input class="form-control" id="shortdesc" ' - 'name="shortdesc" type="text" ', output.data) + 'name="shortdesc" type="text" ', output_text) self.assertTrue( '' in output.data) + 'this alias.' in output_text) # Invalid: shortdesc already taken data = { @@ -278,19 +285,20 @@ class FlaskAdmintests(ModelFlasktests): output = self.app.post('/admin/new', data=data) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertTrue( - '

Create new election

' in output.data) + '

Create new election

' in output_text) if self.get_wtforms_version() >= (2, 2): self.assertIn( 'input class="form-control" id="shortdesc" ' - 'name="shortdesc" required type="text" ', output.data) + 'name="shortdesc" required type="text" ', output_text) else: self.assertIn( 'input class="form-control" id="shortdesc" ' - 'name="shortdesc" type="text" ', output.data) + 'name="shortdesc" type="text" ', output_text) self.assertTrue( '' in output.data) + 'this summary.' in output_text) # All good - max_votes is ignored as it is not a integer data = { @@ -313,23 +321,24 @@ class FlaskAdmintests(ModelFlasktests): output = self.app.post( '/admin/new', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertTrue( 'Election "new_election" added' - in output.data) + in output_text) self.assertTrue( - 'There are no candidates.' in output.data) + 'There are no candidates.' in output_text) self.assertIn( 'input class="form-control" id="admin_grp" ' 'name="admin_grp" type="text" ' - 'value="sysadmin-main, testers">', output.data) + 'value="sysadmin-main, testers">', output_text) self.assertIn( 'input class="form-control" id="lgl_voters" ' 'name="lgl_voters" type="text" ' - 'value="packager, testers">', output.data) + 'value="packager, testers">', output_text) self.assertIn( 'input class="form-control" id="max_votes" ' 'name="max_votes" type="text" ' - 'value="">', output.data) + 'value="">', output_text) # All good - max_votes is ignored as it is not a integer data = { @@ -351,23 +360,24 @@ class FlaskAdmintests(ModelFlasktests): output = self.app.post( '/admin/new', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertTrue( 'Election "new_election2" added' - in output.data) + in output_text) self.assertTrue( - 'There are no candidates.' in output.data) + 'There are no candidates.' in output_text) self.assertIn( 'input class="form-control" id="admin_grp" ' 'name="admin_grp" type="text" ' - 'value="sysadmin-main, testers">', output.data) + 'value="sysadmin-main, testers">', output_text) self.assertIn( 'input class="form-control" id="lgl_voters" ' 'name="lgl_voters" type="text" ' - 'value="packager, testers">', output.data) + 'value="packager, testers">', output_text) self.assertIn( 'input class="form-control" id="max_votes" ' 'name="max_votes" type="text" ' - 'value="">', output.data) + 'value="">', output_text) def test_admin_edit_election(self): """ Test the admin_edit_election function. """ @@ -390,16 +400,17 @@ class FlaskAdmintests(ModelFlasktests): MagicMock(return_value=['elections'])): output = self.app.get('/admin/test_election/') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertTrue( - 'Election Details' in output.data) + 'Election Details' in output_text) if self.get_wtforms_version() >= (2, 2): self.assertIn( 'input class="form-control" id="shortdesc" ' - 'name="shortdesc" required type="text" ', output.data) + 'name="shortdesc" required type="text" ', output_text) else: self.assertIn( 'input class="form-control" id="shortdesc" ' - 'name="shortdesc" type="text" ', output.data) + 'name="shortdesc" type="text" ', output_text) data = { 'alias': 'test_election', @@ -416,16 +427,17 @@ class FlaskAdmintests(ModelFlasktests): output = self.app.post('/admin/test_election/', data=data) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertTrue( - 'Election Details' in output.data) + 'Election Details' in output_text) if self.get_wtforms_version() >= (2, 2): self.assertIn( 'input class="form-control" id="shortdesc" ' - 'name="shortdesc" required type="text" ', output.data) + 'name="shortdesc" required type="text" ', output_text) else: self.assertIn( 'input class="form-control" id="shortdesc" ' - 'name="shortdesc" type="text" ', output.data) + 'name="shortdesc" type="text" ', output_text) csrf_token = self.get_csrf() @@ -444,34 +456,36 @@ class FlaskAdmintests(ModelFlasktests): output = self.app.post( '/admin/test_election/', data=data) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertTrue( - 'Election Details' in output.data) + 'Election Details' in output_text) if self.get_wtforms_version() >= (2, 2): self.assertIn( 'input class="form-control" id="shortdesc" ' - 'name="shortdesc" required type="text" ', output.data) + 'name="shortdesc" required type="text" ', output_text) else: self.assertIn( 'input class="form-control" id="shortdesc" ' - 'name="shortdesc" type="text" ', output.data) + 'name="shortdesc" type="text" ', output_text) self.assertIn( '', - output.data) + output_text) # Check election before edit output = self.app.get('/admin/test_election/') self.assertEqual(output.status_code, 200) - self.assertTrue('Candidates 3' in output.data) + output_text = output.get_data(as_text=True) + self.assertTrue('Candidates 3' in output_text) if self.get_wtforms_version() >= (2, 2): self.assertIn( 'input class="form-control" id="seats_elected" ' 'name="seats_elected" required type="text" ' - 'value="1">', output.data) + 'value="1">', output_text) else: self.assertIn( 'input class="form-control" id="seats_elected" ' 'name="seats_elected" type="text" ' - 'value="1">', output.data) + 'value="1">', output_text) data = { 'alias': 'test_election', @@ -491,21 +505,22 @@ class FlaskAdmintests(ModelFlasktests): output = self.app.post( '/admin/test_election/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertTrue( 'Election "test_election" saved' - in output.data) + in output_text) # We edited the seats_elected from 1 to 2 if self.get_wtforms_version() >= (2, 2): self.assertIn( 'input class="form-control" id="seats_elected" ' 'name="seats_elected" required type="text" ' - 'value="2">', output.data) + 'value="2">', output_text) else: self.assertIn( 'input class="form-control" id="seats_elected" ' 'name="seats_elected" type="text" ' - 'value="2">', output.data) - self.assertTrue('Candidates 3' in output.data) + 'value="2">', output_text) + self.assertTrue('Candidates 3' in output_text) def test_admin_edit_election_admin_groups(self): """ Test the admin_edit_election function when editing admin groups. @@ -536,17 +551,18 @@ class FlaskAdmintests(ModelFlasktests): # Check election before edit output = self.app.get('/admin/test_election2/') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) if self.get_wtforms_version() >= (2, 2): self.assertIn( 'input class="form-control" id="seats_elected" ' 'name="seats_elected" required type="text" ' - 'value="1">', output.data) + 'value="1">', output_text) else: self.assertIn( 'input class="form-control" id="seats_elected" ' 'name="seats_elected" type="text" ' - 'value="1">', output.data) - self.assertTrue('Candidates ', output_text) + self.assertTrue('Candidates