From f694de1cc3e45554352df6491eda3c3d58c56a79 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: May 03 2018 08:30:30 +0000 Subject: [PATCH 1/6] Add utility scripts to run the test suite with python3 --- diff --git a/nosetests3 b/nosetests3 new file mode 100755 index 0000000..4ae313d --- /dev/null +++ b/nosetests3 @@ -0,0 +1,12 @@ +#!/usr/bin/python3 +# EASY-INSTALL-ENTRY-SCRIPT: 'nose==1.3.7','console_scripts','nosetests-3.4' +__requires__ = 'nose>=1.3.7' +import sys +from pkg_resources import load_entry_point + +if __name__ == '__main__': + sys.exit( + load_entry_point( + 'nose>=1.3.7', 'console_scripts', 'nosetests-3.%s' % + sys.version_info.minor)() + ) diff --git a/runtests3.sh b/runtests3.sh new file mode 100755 index 0000000..cfafed5 --- /dev/null +++ b/runtests3.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +PAGURE_CONFIG=`pwd`/tests/test_config \ +PYTHONPATH=pagure \ +./nosetests3 --with-coverage --cover-erase --cover-package=pagure $* From 8315535b75f1aeb312ea75422be10e947b339111 Mon Sep 17 00:00:00 2001 From: Aurélien Bompard Date: May 03 2018 08:30:30 +0000 Subject: [PATCH 2/6] Port pagure to python3 --- diff --git a/dev-data.py b/dev-data.py index 0827978..6589627 100644 --- a/dev-data.py +++ b/dev-data.py @@ -8,8 +8,8 @@ import sys from sqlalchemy import create_engine, MetaData import pagure -import pagure.flask_app import tests +from pagure.lib import create_session ''' Usage: @@ -19,7 +19,8 @@ python dev-data.py --populate python dev-data.py --all ''' -_config = pagure.config.config.reload_config() +_config = pagure.config.reload_config() + def init_database(): DB_URL = _config['DB_URL'] @@ -447,7 +448,7 @@ if __name__ == "__main__": empty_dev_db(meta, eng) if args.populate or args.all: - session = pagure.flask_app.SESSION + session = create_session(_config['DB_URL']) invalid_option = ['pingou', 'bar@pingou.com', 'foo', 'foo@bar.com'] print("") user_name = raw_input( diff --git a/files/api_key_expire_mail.py b/files/api_key_expire_mail.py index 350c5fd..cabaf9b 100644 --- a/files/api_key_expire_mail.py +++ b/files/api_key_expire_mail.py @@ -14,8 +14,8 @@ if 'PAGURE_CONFIG' not in os.environ \ os.environ['PAGURE_CONFIG'] = '/etc/pagure/pagure.cfg' import pagure -from pagure import SESSION -from pagure.lib import model +import pagure.config +from pagure.lib import model, create_session def main(debug=False): @@ -27,6 +27,7 @@ def main(debug=False): email_dates = [email_day.date() for email_day in \ [current_time + timedelta(days=i) for i in day_diff_for_mail]] + SESSION = create_session(pagure.config.config['DB_URL']) tokens = SESSION.query(model.Token).all() for token in tokens: diff --git a/pagure-ev/pagure_stream_server.py b/pagure-ev/pagure_stream_server.py index 688799f..3f6f940 100644 --- a/pagure-ev/pagure_stream_server.py +++ b/pagure-ev/pagure_stream_server.py @@ -21,17 +21,19 @@ nc localhost 8080 import logging import os -import urlparse + import redis import trollius +from six.moves.urllib.parse import urlparse + log = logging.getLogger(__name__) if 'PAGURE_CONFIG' not in os.environ \ and os.path.exists('/etc/pagure/pagure.cfg'): - print 'Using configuration file `/etc/pagure/pagure.cfg`' + print('Using configuration file `/etc/pagure/pagure.cfg`') os.environ['PAGURE_CONFIG'] = '/etc/pagure/pagure.cfg' @@ -50,7 +52,7 @@ POOL = redis.ConnectionPool( def _get_session(): global SESSION if SESSION is None: - print pagure.config.config['DB_URL'] + print(pagure.config.config['DB_URL']) SESSION = pagure.lib.create_session(pagure.config.config['DB_URL']) return SESSION @@ -203,7 +205,7 @@ def handle_client(client_reader, client_writer): log.warning("Invalid URL provided: %s" % data[1]) return - url = urlparse.urlsplit(data[1]) + url = urlparse(data[1]) try: obj = get_obj_from_path(url.path) diff --git a/pagure-milters/comment_email_milter.py b/pagure-milters/comment_email_milter.py index acb0818..7e6a706 100644 --- a/pagure-milters/comment_email_milter.py +++ b/pagure-milters/comment_email_milter.py @@ -10,9 +10,9 @@ import base64 import email import hashlib import os -import StringIO import sys import time +from io import BytesIO from multiprocessing import Process as Thread, Queue import Milter @@ -29,7 +29,7 @@ if 'PAGURE_CONFIG' not in os.environ \ logq = Queue(maxsize=4) -_config = pagure.config.config.reload_config() +_config = pagure.config.reload_config() def get_email_body(emailobj): @@ -90,7 +90,7 @@ class PagureMilter(Milter.Base): # NOTE: self.fp is only an *internal* copy of message data. You # must use addheader, chgheader, replacebody to change the message # on the MTA. - self.fp = StringIO.StringIO() + self.fp = BytesIO() self.canon_from = '@'.join(parse_addr(mailfrom)) self.fp.write('From %s %s\n' % (self.canon_from, time.ctime())) return Milter.CONTINUE diff --git a/pagure/api/fork.py b/pagure/api/fork.py index fa4c74b..bfd0068 100644 --- a/pagure/api/fork.py +++ b/pagure/api/fork.py @@ -8,6 +8,8 @@ """ +from __future__ import unicode_literals + import logging import os @@ -999,12 +1001,12 @@ def api_pull_request_create(repo, username=None, namespace=None): if not branch_to: raise pagure.exceptions.APIError( 400, error_code=APIERROR.EINVALIDREQ, - errors={u'branch_to': [u'This field is required.']}) + errors={'branch_to': ['This field is required.']}) branch_from = flask.request.form.get('branch_from') if not branch_from: raise pagure.exceptions.APIError( 400, error_code=APIERROR.EINVALIDREQ, - errors={u'branch_from': [u'This field is required.']}) + errors={'branch_from': ['This field is required.']}) parent = repo if repo.parent: diff --git a/pagure/cli/admin.py b/pagure/cli/admin.py index 8447169..bf3eb2f 100644 --- a/pagure/cli/admin.py +++ b/pagure/cli/admin.py @@ -304,13 +304,13 @@ def parse_arguments(args=None): def _ask_confirmation(): ''' Ask to confirm an action. ''' - action = raw_input('Do you want to continue? [y/N]') + action = input('Do you want to continue? [y/N]') return action.lower() in ['y', 'yes'] def _get_input(text): ''' Ask the user for input. ''' - return raw_input(text) + return input(text) def _get_project(arg_project, user=None): diff --git a/pagure/doc_utils.py b/pagure/doc_utils.py index 9d2ada6..047a18b 100644 --- a/pagure/doc_utils.py +++ b/pagure/doc_utils.py @@ -120,9 +120,7 @@ def convert_readme(content, ext, view_file_url=None): def load_doc(endpoint): """ Utility to load an RST file and turn it into fancy HTML. """ - rst = unicode(textwrap.dedent(endpoint.__doc__)) - - rst = modify_rst(rst) + rst = modify_rst(textwrap.dedent(endpoint.__doc__)) api_docs = docutils.examples.html_body(rst) diff --git a/pagure/docs_server.py b/pagure/docs_server.py index e3ea53b..e531c94 100644 --- a/pagure/docs_server.py +++ b/pagure/docs_server.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """ - (c) 2014-2015 - Copyright Red Hat Inc + (c) 2014-2016 - Copyright Red Hat Inc Authors: Pierre-Yves Chibon @@ -179,7 +179,7 @@ def view_docs(repo, username=None, namespace=None, filename=None): (tree, content, filename) = __get_tree_and_content( repo_obj, commit, path) except pagure.exceptions.FileNotFoundException as err: - flask.flash(err.message, 'error') + flask.flash('%s' % err, 'error') except Exception as err: _log.exception(err) flask.abort(500, 'Unkown error encountered and reported') diff --git a/pagure/flask_app.py b/pagure/flask_app.py index ddb1e98..c2d713e 100644 --- a/pagure/flask_app.py +++ b/pagure/flask_app.py @@ -424,4 +424,4 @@ def _get_user(username): try: return pagure.lib.get_user(flask.g.session, username) except pagure.exceptions.PagureException as e: - flask.abort(404, e.message) + flask.abort(404, '%s' % e) diff --git a/pagure/hooks/__init__.py b/pagure/hooks/__init__.py index d397b51..1a22b9c 100644 --- a/pagure/hooks/__init__.py +++ b/pagure/hooks/__init__.py @@ -9,6 +9,8 @@ """ import os + +import six import wtforms from pagure.config import config as pagure_config @@ -22,7 +24,7 @@ class RequiredIf(wtforms.validators.Required): """ def __init__(self, fields, *args, **kwargs): - if isinstance(fields, basestring): + if isinstance(fields, six.string_types): fields = [fields] self.fields = fields super(RequiredIf, self).__init__(*args, **kwargs) diff --git a/pagure/hooks/files/default_hook.py b/pagure/hooks/files/default_hook.py index 519d1e8..97a0e11 100755 --- a/pagure/hooks/files/default_hook.py +++ b/pagure/hooks/files/default_hook.py @@ -16,6 +16,7 @@ if 'PAGURE_CONFIG' not in os.environ \ import pygit2 # noqa: E402 +import six # noqa: E402 import pagure # noqa: E402 import pagure.flask_app # noqa: E402 @@ -76,7 +77,7 @@ def send_notifications(session, project, refname, revs, forced): authors = [] for author in auths: - if isinstance(author, basestring): + if isinstance(author, six.string_types): author = author else: author = author.to_json(public=True) @@ -96,7 +97,7 @@ def send_notifications(session, project, refname, revs, forced): authors=list(authors), agent=os.environ['GL_USER'], repo=project.to_json(public=True) - if not isinstance(project, basestring) else project, + if not isinstance(project, six.string_types) else project, ) fedmsg_hook = pagure.lib.plugins.get_plugin('Fedmsg') diff --git a/pagure/hooks/files/git_multimail.py b/pagure/hooks/files/git_multimail.py index 9bc2d02..7d0e1c6 100755 --- a/pagure/hooks/files/git_multimail.py +++ b/pagure/hooks/files/git_multimail.py @@ -58,6 +58,8 @@ import optparse import smtplib import time +import six + try: from email.utils import make_msgid from email.utils import getaddresses @@ -563,7 +565,7 @@ class GitObject(object): if not self.sha1: raise ValueError('Empty commit has no summary') - return iter(generate_summaries('--no-walk', self.sha1)).next() + return next(iter(generate_summaries('--no-walk', self.sha1))) def __eq__(self, other): return isinstance(other, GitObject) and self.sha1 == other.sha1 @@ -571,7 +573,7 @@ class GitObject(object): def __hash__(self): return hash(self.sha1) - def __nonzero__(self): + def __bool__(self): return bool(self.sha1) def __str__(self): @@ -1459,7 +1461,7 @@ class SMTPMailer(Mailer): try: msg = ''.join(lines) # turn comma-separated list into Python list if needed. - if isinstance(to_addrs, basestring): + if isinstance(to_addrs, six.string_types): to_addrs = [ email for (name, email) in getaddresses([to_addrs])] self.smtp.sendmail(self.envelopesender, to_addrs, msg) @@ -2148,7 +2150,7 @@ class IncrementalDateTime(object): def __init__(self): self.time = time.time() - def next(self): + def __next__(self): formatted = formatdate(self.time, True) self.time += 1 return formatted @@ -2378,7 +2380,7 @@ class Push(object): sys.stderr.write( 'Sending notification emails to: %s\n' % ( change.recipients,)) - extra_values = {'send_date': send_date.next()} + extra_values = {'send_date': next(send_date)} mailer.send( change.generate_email(self, body_filter, extra_values), change.recipients, @@ -2406,7 +2408,7 @@ class Push(object): rev = Revision( change, GitObject(sha1), num=num+1, tot=len(sha1s)) if rev.recipients: - extra_values = {'send_date': send_date.next()} + extra_values = {'send_date': next(send_date)} mailer.send( rev.generate_email(self, body_filter, extra_values), rev.recipients, diff --git a/pagure/internal/__init__.py b/pagure/internal/__init__.py index 7b82449..94fe0c8 100644 --- a/pagure/internal/__init__.py +++ b/pagure/internal/__init__.py @@ -294,7 +294,7 @@ def get_pull_request_ready_branch(): parent_repo_obj = repo_obj branches = {} - if not repo_obj.is_empty and repo_obj.listall_branches() > 1: + if not repo_obj.is_empty and len(repo_obj.listall_branches()) > 0: if not parent_repo_obj.is_empty \ and not parent_repo_obj.head_is_unborn: try: @@ -575,7 +575,7 @@ def get_branches_head(): repo_obj = pygit2.Repository(repopath) branches = {} - if not repo_obj.is_empty and repo_obj.listall_branches() > 1: + if not repo_obj.is_empty and len(repo_obj.listall_branches()) > 1: for branchname in repo_obj.listall_branches(): branch = repo_obj.lookup_branch(branchname) branches[branchname] = branch.get_object().hex diff --git a/pagure/lib/__init__.py b/pagure/lib/__init__.py index 39db198..0e5c012 100644 --- a/pagure/lib/__init__.py +++ b/pagure/lib/__init__.py @@ -29,7 +29,6 @@ import logging import os import tempfile import subprocess -import urlparse import uuid import markdown import werkzeug @@ -42,6 +41,8 @@ import redis import six import sqlalchemy import sqlalchemy.schema + +from six.moves.urllib_parse import urlparse, urlencode, parse_qsl from sqlalchemy import func from sqlalchemy import asc, desc from sqlalchemy.orm import aliased @@ -160,7 +161,14 @@ def get_next_id(session, projectid): model.PullRequest.project_id == projectid ) - nid = max([el[0] for el in query1.union(query2).all()]) or 0 + ids = [ + el[0] + for el in query1.union(query2).all() + if el[0] is not None + ] + nid = 0 + if ids: + nid = max(ids) return nid + 1 @@ -243,6 +251,7 @@ def is_valid_ssh_key(key): stdout, stderr = proc.communicate() if proc.returncode != 0: return False + stdout = stdout.decode("utf-8") if _is_valid_ssh_key_force_md5 is None: # We grab the "key ID" portion of the very first key to verify the @@ -359,7 +368,7 @@ def create_user_ssh_keys_on_disk(user, gitolite_keydir): os.mkdir(keyline_dir) keyfile = os.path.join(keyline_dir, '%s.pub' % user.user) with open(keyfile, 'w') as stream: - stream.write(keys[i].strip().encode('UTF-8')) + stream.write(keys[i].strip()) def add_issue_comment(session, issue, comment, user, ticketfolder, @@ -432,7 +441,7 @@ def add_tag_obj(session, obj, tags, user, gitfolder): ''' Add a tag to an object (either an issue or a project). ''' user_obj = get_user(session, user) - if isinstance(tags, basestring): + if isinstance(tags, six.string_types): tags = [tags] added_tags = [] @@ -848,7 +857,7 @@ def remove_tags_obj(session, obj, tags, gitfolder, user): ''' Removes the specified tag(s) of a given object. ''' user_obj = get_user(session, user) - if isinstance(tags, basestring): + if isinstance(tags, six.string_types): tags = [tags] removed_tags = [] @@ -2194,7 +2203,7 @@ def search_projects( ) # No filtering is done if private == username i.e if the owner of the # project is viewing the project - elif isinstance(private, basestring) and private != username: + elif isinstance(private, six.string_types) and private != username: # if we use the sqlalchemy.or_ in projects.filter, it will # fail to find any projects assuming there are no rows in # the ProjectUser table due to the way sqlalchemy creates @@ -2446,7 +2455,7 @@ def search_issues( model.Issue.priority == priority ) if tags is not None and tags != []: - if isinstance(tags, basestring): + if isinstance(tags, six.string_types): tags = [tags] notags = [] ytags = [] @@ -2541,7 +2550,7 @@ def search_issues( query = query.filter( model.Issue.private == False # noqa: E712 ) - elif isinstance(private, basestring): + elif isinstance(private, six.string_types): user2 = aliased(model.User) user4 = aliased(model.User) query = query.filter( @@ -2562,7 +2571,7 @@ def search_issues( if no_milestones and milestones is not None and milestones != []: # Asking for issues with no milestone or a specific milestone - if isinstance(milestones, basestring): + if isinstance(milestones, six.string_types): milestones = [milestones] query = query.filter( (model.Issue.milestone.is_(None)) | @@ -2575,7 +2584,7 @@ def search_issues( ) elif milestones is not None and milestones != []: # Asking for a single specific milestone - if isinstance(milestones, basestring): + if isinstance(milestones, six.string_types): milestones = [milestones] query = query.filter( model.Issue.milestone.in_(milestones) @@ -2916,7 +2925,7 @@ def add_attachment(repo, issue, attachmentfolder, user, filename, filestream): # Write file filestream.seek(0) - with open(filepath, 'w') as stream: + with open(filepath, 'wb') as stream: stream.write(filestream.read()) tasks.add_file_to_git.delay( @@ -3119,7 +3128,7 @@ def add_email_to_user(session, user, user_email): def update_user_ssh(session, user, ssh_key, keydir): ''' Set up a new user into the database or update its information. ''' - if isinstance(user, basestring): + if isinstance(user, six.string_types): user = get_user(session, user) user.public_ssh_key = ssh_key @@ -3134,7 +3143,7 @@ def avatar_url_from_email(email, size=64, default='retro', dns=False): """ Our own implementation since fas doesn't support this nicely yet. """ - if isinstance(email, unicode): + if not isinstance(email, six.string_types): email = email.encode('utf-8') if dns: # pragma: no cover @@ -3147,8 +3156,9 @@ def avatar_url_from_email(email, size=64, default='retro', dns=False): default=default, ) else: - import urllib - query = urllib.urlencode({'s': size, 'd': default}) + query = urlencode({'s': size, 'd': default}) + if six.PY3: + email = email.encode('utf-8') hashhex = hashlib.sha256(email).hexdigest() return "https://seccdn.libravatar.org/avatar/%s?%s" % ( hashhex, query) @@ -3159,7 +3169,7 @@ def update_tags(session, obj, tags, username, gitfolder): This object can be either an issue or a project. """ - if isinstance(tags, basestring): + if isinstance(tags, six.string_types): tags = [tags] toadd = set(tags) - set(obj.tags_text) @@ -3197,7 +3207,7 @@ def update_dependency_issue( """ Update the dependency of a specified issue (adding or removing them) """ - if isinstance(depends, basestring): + if isinstance(depends, six.string_types): depends = [depends] toadd = set(depends) - set(issue.depending_text) @@ -3252,7 +3262,7 @@ def update_blocked_issue( removing them) """ - if isinstance(blocks, basestring): + if isinstance(blocks, six.string_types): blocks = [blocks] toadd = set(blocks) - set(issue.blocking_text) @@ -3800,8 +3810,8 @@ def filter_img_src(name, value): if name in ('alt', 'height', 'width', 'class', 'data-src'): return True if name == 'src': - parsed = urlparse.urlparse(value) - return (not parsed.netloc) or parsed.netloc == urlparse.urlparse( + parsed = urlparse(value) + return (not parsed.netloc) or parsed.netloc == urlparse( pagure_config['APP_URL']).netloc return False @@ -4293,10 +4303,10 @@ def get_watch_list(session, obj): def save_report(session, repo, name, url, username): """ Save the report of issues based on the given URL of the project. """ - url_obj = urlparse.urlparse(url) + url_obj = urlparse(url) url = url_obj.geturl().replace(url_obj.query, '') query = {} - for k, v in urlparse.parse_qsl(url_obj.query): + for k, v in parse_qsl(url_obj.query): if k in query: if isinstance(query[k], list): query[k].append(v) @@ -4445,7 +4455,7 @@ def get_yearly_stats_user(session, user, date, tz='UTC'): # us a dict with the dates as keys and the number of times each # date occurs in the data as the values, we return its items as # a list of tuples - return Counter([event.date_tz(tz) for event in events]).items() + return list(Counter([event.date_tz(tz) for event in events]).items()) def get_user_activity_day(session, user, date, tz='UTC'): diff --git a/pagure/lib/git.py b/pagure/lib/git.py index d6afe98..3fa6f95 100644 --- a/pagure/lib/git.py +++ b/pagure/lib/git.py @@ -7,6 +7,7 @@ Pierre-Yves Chibon """ +from __future__ import print_function, unicode_literals # pylint: disable=too-many-branches # pylint: disable=too-many-arguments @@ -24,6 +25,7 @@ import tempfile import arrow import pygit2 +import six from sqlalchemy.exc import SQLAlchemyError from pygit2.remote import RemoteCollection @@ -82,7 +84,7 @@ def commit_to_patch(repo_obj, commits, diff_view=False): subject = '[PATCH %s/%s] %s' % ( cnt + 1, len(commits), subject) - patch.append(u"""From {commit} Mon Sep 17 00:00:00 2001 + patch.append("""From {commit} Mon Sep 17 00:00:00 2001 From: {author_name} <{author_email}> Date: {date} Subject: {subject} @@ -161,6 +163,15 @@ def _maybe_wait(result): pass +def _make_signature(name, email): + if six.PY2: + if isinstance(name, six.text_type): + name = name.encode("utf-8") + if isinstance(email, six.text_type): + email = email.encode("utf-8") + return pygit2.Signature(name=name, email=email) + + def _update_git(obj, repo, repofolder): """ Update the given issue in its git. @@ -226,7 +237,7 @@ def _update_git(obj, repo, repofolder): parents.append(parent) # Author/commiter will always be this one - author = pygit2.Signature(name='pagure', email='pagure') + author = _make_signature(name='pagure', email='pagure') # Actually commit new_repo.create_commit( @@ -304,7 +315,7 @@ def _clean_git(obj, repo, repofolder): parents.append(parent) # Author/commiter will always be this one - author = pygit2.Signature(name='pagure', email='pagure') + author = _make_signature(name='pagure', email='pagure') # Actually commit new_repo.create_commit( @@ -831,9 +842,9 @@ def _add_file_to_git(repo, issue, attachmentfolder, ticketfolder, user, parents.append(parent) # Author/commiter will always be this one - author = pygit2.Signature( - name=user.username.encode('utf-8'), - email=user.default_email.encode('utf-8') + author = _make_signature( + name=user.username, + email=user.default_email, ) # Actually commit @@ -895,7 +906,7 @@ def _update_file_in_git( index = new_repo.index # Write down what changed - with open(file_path, 'w') as stream: + with open(file_path, 'wb') as stream: stream.write(content.replace('\r', '').encode('utf-8')) # Retrieve the list of files that changed @@ -930,10 +941,7 @@ def _update_file_in_git( # Author/commiter will always be this one name = user.fullname or user.username - author = pygit2.Signature( - name=name.encode('utf-8'), - email=email.encode('utf-8') - ) + author = _make_signature(name=name, email=email) # Actually commit commit = new_repo.create_commit( @@ -987,11 +995,13 @@ def read_output(cmd, abspath, input=None, keepends=False, **kw): cwd=abspath, **kw) (out, err) = procs.communicate(input) + out = out.decode('utf-8') + err = err.decode('utf-8') retcode = procs.wait() if retcode: - print 'ERROR: %s =-- %s' % (cmd, retcode) - print out - print err + print('ERROR: %s =-- %s' % (cmd, retcode)) + print(out) + print(err) if not keepends: out = out.rstrip('\n\r') return out @@ -1287,9 +1297,9 @@ def merge_pull_request( tree = new_repo.index.write_tree() user_obj = pagure.lib.get_user(session, username) commitname = user_obj.fullname or user_obj.user - author = pygit2.Signature( - commitname.encode('utf-8'), - user_obj.default_email.encode('utf-8')) + author = _make_signature( + commitname, + user_obj.default_email) commit = new_repo.create_commit( 'refs/heads/%s' % request.branch, author, @@ -1334,9 +1344,9 @@ def merge_pull_request( _log.info(' Basing on: %s - %s', head.hex, repo_commit.oid.hex) user_obj = pagure.lib.get_user(session, username) commitname = user_obj.fullname or user_obj.user - author = pygit2.Signature( - commitname.encode('utf-8'), - user_obj.default_email.encode('utf-8')) + author = _make_signature( + commitname, + user_obj.default_email) commit = new_repo.create_commit( 'refs/heads/%s' % request.branch, author, @@ -1443,13 +1453,13 @@ def get_diff_info(repo_obj, orig_repo, branch_from, branch_to, prid=None): com = None if branch: try: - com = main_walker.next() + com = next(main_walker) main_commits.add(com.oid.hex) except StopIteration: com = None try: - branch_commit = branch_walker.next() + branch_commit = next(branch_walker) except StopIteration: branch_commit = None diff --git a/pagure/lib/git_auth.py b/pagure/lib/git_auth.py index 65d315b..233d1ea 100644 --- a/pagure/lib/git_auth.py +++ b/pagure/lib/git_auth.py @@ -10,7 +10,6 @@ from __future__ import print_function import abc -import gdbm import logging import os import pkg_resources @@ -18,6 +17,8 @@ import subprocess import tempfile import werkzeug +from six import with_metaclass +from six.moves import dbm_gnu import pagure.exceptions from pagure.config import config as pagure_config @@ -47,13 +48,11 @@ def get_git_auth_helper(backend, *args, **kwargs): return cls(*args, **kwargs) -class GitAuthHelper(object): +class GitAuthHelper(with_metaclass(abc.ABCMeta, object)): """ The class to inherit from when creating your own git authentication helper. """ - __metaclass__ = abc.ABCMeta - @classmethod @abc.abstractmethod def generate_acls(self, project, group=None): @@ -471,13 +470,13 @@ class Gitolite2Auth(GitAuthHelper): _log.info('Remove project from the gitolite cache file') cf = None try: - # unfortunately gdbm.open isn't a context manager in Python 2 :( - cf = gdbm.open(cache_file, 'ws') + # unfortunately dbm_gnu.open isn't a context manager in Python 2 :( + cf = dbm_gnu.open(cache_file, 'ws') for repo in ['', 'docs/', 'tickets/', 'requests/']: to_remove = repo + project.fullname if to_remove.encode('ascii') in cf: del cf[to_remove] - except gdbm.error as e: + except dbm_gnu.error as e: msg = ( 'Failed to remove project from gitolite cache: {msg}' .format(msg=e[1]) diff --git a/pagure/lib/login.py b/pagure/lib/login.py index a5b6c58..c8f117b 100644 --- a/pagure/lib/login.py +++ b/pagure/lib/login.py @@ -9,6 +9,8 @@ """ +from __future__ import unicode_literals + import random import string import hashlib @@ -59,8 +61,8 @@ def generate_hashed_value(password): if not isinstance(password, six.text_type): raise ValueError("Password supplied is not unicode text") - return '$2$' + bcrypt.hashpw(password.encode('utf-8'), - bcrypt.gensalt()) + return b'$2$' + bcrypt.hashpw(password.encode('utf-8'), + bcrypt.gensalt()) def check_password(entered_password, user_password, seed=None): @@ -69,31 +71,34 @@ def check_password(entered_password, user_password, seed=None): :arg entered_password: password entered by the user. :type entered_password: str (Python 3) or unicode (Python 2) :arg user_password: the hashed string fetched from the database. + :type user_password: bytes :return: a Boolean depending upon the entered_password, True if the password matches ''' if not isinstance(entered_password, six.text_type): raise ValueError("Entered password is not unicode text") + if isinstance(user_password, six.text_type): + raise ValueError("DB password is not bytes") - if not user_password.count('$') >= 2: + if not user_password.count(b'$') >= 2: raise pagure.exceptions.PagureException( 'Password of unknown version found in the database' ) - _, version, user_password = user_password.split('$', 2) + _, version, user_password = user_password.split(b'$', 2) - if version == '2': + if version == b'2': password = bcrypt.hashpw( entered_password.encode('utf-8'), - user_password.encode('utf-8')) - elif version == '1': + user_password) + elif version == b'1': password = '%s%s' % (entered_password, seed) - password = hashlib.sha512(password.encode('utf-8')).hexdigest() + password = hashlib.sha512( + password.encode('utf-8')).hexdigest().encode("utf-8") else: raise pagure.exceptions.PagureException( 'Password of unknown version found in the database' ) - return constant_time.bytes_eq( - password.encode('utf-8'), user_password.encode('utf-8')) + return constant_time.bytes_eq(password, user_password) diff --git a/pagure/lib/mimetype.py b/pagure/lib/mimetype.py index f70443b..149b906 100644 --- a/pagure/lib/mimetype.py +++ b/pagure/lib/mimetype.py @@ -1,7 +1,12 @@ # -*- coding: utf-8 -*- + +from __future__ import unicode_literals + import logging import mimetypes import kitchen.text.converters as ktc +import six + import pagure.lib.encoding_utils @@ -24,7 +29,7 @@ def guess_type(filename, data): mimetype, encoding = mimetypes.guess_type(filename) if data: if not mimetype: - if '\0' in data: + if not isinstance(data, six.text_type) and b'\0' in data: mimetype = 'application/octet-stream' else: mimetype = 'text/plain' diff --git a/pagure/lib/model.py b/pagure/lib/model.py index f7a8ac4..7571fee 100644 --- a/pagure/lib/model.py +++ b/pagure/lib/model.py @@ -8,6 +8,8 @@ """ +from __future__ import unicode_literals + __requires__ = ['SQLAlchemy >= 0.8', 'jinja2 >= 2.4'] # noqa import pkg_resources # noqa: E402,F401 @@ -134,7 +136,9 @@ def create_default_status(session, acls=None): session.rollback() _log.debug('Type %s could not be added', grptype) - for acl in sorted(acls) or {}: + acls = acls or {} + keys = sorted(list(acls.keys())) + for acl in keys: item = ACL( name=acl, description=acls[acl] @@ -1246,6 +1250,12 @@ class Issue(BASE): for comment in self.comments if not comment.notification] + @property + def sortable_priority(self): + ''' Return an empty string if no priority is set allowing issues to + be sorted using this attribute. ''' + return self.priority if self.priority else '' + def to_json(self, public=False, with_comments=True, with_project=False): ''' Returns a dictionary representation of the issue. diff --git a/pagure/lib/notify.py b/pagure/lib/notify.py index 60dcdb8..5097418 100644 --- a/pagure/lib/notify.py +++ b/pagure/lib/notify.py @@ -8,7 +8,8 @@ pagure notifications. """ -from __future__ import print_function +from __future__ import print_function, unicode_literals + # pylint: disable=too-many-branches # pylint: disable=too-many-arguments @@ -18,12 +19,13 @@ import datetime import hashlib import json import logging -import urlparse import re import smtplib import time +import six from email.header import Header from email.mime.text import MIMEText +from six.moves.urllib_parse import urljoin import flask import pagure.lib @@ -280,6 +282,8 @@ def send_email(text, subject, to_mail, from_email = pagure_config.get( 'FROM_EMAIL', 'pagure@fedoraproject.org') + if isinstance(from_email, bytes): + from_email = from_email.decode('utf-8') if user_from: header = Header(user_from, 'utf-8') from_email = '%s <%s>' % (header, from_email) @@ -298,7 +302,7 @@ def send_email(text, subject, to_mail, smtp = None for mailto in to_mail.split(','): msg = MIMEText(text.encode('utf-8'), 'plain', 'utf-8') - msg['Subject'] = header = Header( + msg['Subject'] = Header( '[%s] %s' % (subject_tag, subject), 'utf-8') msg['From'] = from_email @@ -320,13 +324,17 @@ def send_email(text, subject, to_mail, # Send the message via our own SMTP server, but don't include the # envelope header. - if isinstance(mailto, unicode): - mailto = mailto.encode('utf-8') msg['To'] = mailto salt = pagure_config.get('SALT_EMAIL') - if isinstance(mail_id, unicode): - mail_id = mail_id.encode('utf-8') - mhash = hashlib.sha512('<%s>%s%s' % (mail_id, salt, mailto)) + if salt and not isinstance(salt, bytes): + salt = salt.encode('utf-8') + + key = (b'<' + mail_id.encode("utf-8") + b'>' + salt + + mailto.encode("utf-8")) + if six.PY3 and isinstance(key, str): + key = key.encode('utf-8') + mhash = hashlib.sha512(key) + msg['Reply-To'] = 'reply+%s@%s' % ( mhash.hexdigest(), pagure_config['DOMAIN_EMAIL_NOTIFICATIONS']) @@ -339,7 +347,7 @@ def send_email(text, subject, to_mail, _log.debug('in_reply_to: %s', in_reply_to) _log.debug('mail_id: %s', mail_id) _log.debug('Contents:') - _log.debug(text.encode('utf-8')) + _log.debug('%s' % text) _log.debug('*****************') _log.debug(msg.as_string()) _log.debug('*****/EMAIL******') @@ -377,7 +385,7 @@ def notify_new_comment(comment, user=None): to the issue. ''' - text = u""" + text = """ %s added a new comment to an issue you are following: `` %s @@ -415,7 +423,7 @@ def notify_new_issue(issue, user=None): ''' Notify the people following a project that a new issue was added to it. ''' - text = u""" + text = """ %s reported a new issue against the project: `%s` that you are following: `` %s @@ -452,7 +460,7 @@ def notify_assigned_issue(issue, new_assignee, user): action = 'reset' if new_assignee: action = 'assigned to `%s`' % new_assignee.user - text = u""" + text = """ The issue: `%s` of project: `%s` has been %s by %s. %s @@ -489,7 +497,7 @@ def notify_status_change_issue(issue, user): status = issue.status if status.lower() != 'open' and issue.close_status: status = '%s as %s' % (status, issue.close_status) - text = u""" + text = """ The status of the issue: `%s` of project: `%s` has been updated to: %s by %s. %s @@ -519,7 +527,7 @@ The status of the issue: `%s` of project: `%s` has been updated to: %s by %s. def notify_meta_change_issue(issue, user, msg): ''' Notify that a custom field changed ''' - text = u""" + text = """ `%s` updated issue. %s @@ -551,7 +559,7 @@ def notify_assigned_request(request, new_assignee, user): action = 'reset' if new_assignee: action = 'assigned to `%s`' % new_assignee.user - text = u""" + text = """ The pull-request: `%s` of project: `%s` has been %s by %s. %s @@ -586,7 +594,7 @@ def notify_new_pull_request(request): ''' Notify the people following a project that a new pull-request was added to it. ''' - text = u""" + text = """ %s opened a new pull-request against the project: `%s` that you are following: `` %s @@ -619,7 +627,7 @@ def notify_merge_pull_request(request, user): ''' Notify the people following a project that a pull-request was merged in it. ''' - text = u""" + text = """ %s merged a pull-request against the project: `%s` that you are following. Merged pull-request: @@ -655,7 +663,7 @@ def notify_cancelled_pull_request(request, user): ''' Notify the people following a project that a pull-request was cancelled in it. ''' - text = u""" + text = """ %s canceled a pull-request against the project: `%s` that you are following. Cancelled pull-request: @@ -691,7 +699,7 @@ def notify_pull_request_comment(comment, user): ''' Notify the people following a pull-request that a new comment was added to it. ''' - text = u""" + text = """ %s commented on the pull-request: `%s` that you are following: `` %s @@ -727,7 +735,7 @@ def notify_pull_request_flag(flag, user): ''' Notify the people following a pull-request that a new flag was added to it. ''' - text = u""" + text = """ %s flagged the pull-request `%s` as %s: %s %s @@ -760,12 +768,12 @@ def notify_new_email(email, user): root_url = pagure_config.get('APP_URL', flask.request.url_root) - url = urlparse.urljoin( + url = urljoin( root_url or flask.request.url_root, flask.url_for('ui_ns.confirm_email', token=email.token), ) - text = u"""Dear %(username)s, + text = """Dear %(username)s, You have registered a new email on pagure at %(root_url)s. @@ -797,11 +805,10 @@ def notify_new_commits(abspath, project, branch, commits): for commit in commits: commits_info.append({ 'commit': commit, - # we want these to be unicodes (read_output gives us str) 'author': pagure.lib.git.get_author( - commit, abspath).decode('utf-8'), + commit, abspath), 'subject': pagure.lib.git.get_commit_subject( - commit, abspath).decode('utf-8') + commit, abspath) }) # make sure this is unicode @@ -839,7 +846,7 @@ def notify_commit_flag(flag, user): ''' Notify the people following a project that a new flag was added to one of its commit. ''' - text = u""" + text = """ %s flagged the commit `%s` as %s: %s %s diff --git a/pagure/lib/repo.py b/pagure/lib/repo.py index 11ac301..d20e6fa 100644 --- a/pagure/lib/repo.py +++ b/pagure/lib/repo.py @@ -7,6 +7,7 @@ Pierre-Yves Chibon """ +from __future__ import print_function import logging import os @@ -111,7 +112,7 @@ class PagureRepo(pygit2.Repository): (out, err) = procs.communicate(line) retcode = procs.wait() if retcode: - print 'ERROR: %s =-- %s' % (cmd, retcode) - print out - print err + print('ERROR: %s =-- %s' % (cmd, retcode)) + print(out) + print(err) out = out.rstrip('\n\r') diff --git a/pagure/lib/tasks.py b/pagure/lib/tasks.py index c84ea61..ec39c2c 100644 --- a/pagure/lib/tasks.py +++ b/pagure/lib/tasks.py @@ -8,6 +8,8 @@ """ +from __future__ import unicode_literals + import collections import datetime import gc @@ -299,7 +301,7 @@ def create_project(self, session, username, namespace, name, add_readme, author = author.encode('utf-8') author_email = author_email.encode('utf-8') author = pygit2.Signature(author, author_email) - content = u"# %s\n\n%s" % (name, project.description) + content = "# %s\n\n%s" % (name, project.description) readme_file = os.path.join(temp_gitrepo.workdir, "README.md") with open(readme_file, 'wb') as stream: stream.write(content.encode('utf-8')) diff --git a/pagure/perfrepo.py b/pagure/perfrepo.py index ca0b54d..9c45ab5 100644 --- a/pagure/perfrepo.py +++ b/pagure/perfrepo.py @@ -7,12 +7,15 @@ Patrick Uiterwijk """ +from __future__ import print_function + import pprint import os import traceback import types +import six import pygit2 import _pygit2 @@ -65,10 +68,10 @@ class FakeWalker(object): return self - def next(self): + def __next__(self): STATS['walks'][self.wid]['steps'] += 1 TOTALS['steps'] += 1 - resp = self.parent.next() + resp = next(self.parent) return resp @@ -77,9 +80,9 @@ class FakeDiffHunk(object): self.parent = parent def __getattr__(self, attr): - print 'Getting Fake Hunk %s' % attr + print('Getting Fake Hunk %s' % attr) resp = getattr(self.parent, attr) - print 'Response: %s' % resp + print('Response: %s' % resp) return resp @@ -117,9 +120,9 @@ class FakeDiffer(object): self.iter = self.parent.__iter__() return self - def next(self): + def __next__(self): STATS['diffs'][self.did]['steps'] += 1 - resp = self.iter.next() + resp = next(self.iter) if isinstance(resp, _pygit2.Patch): resp = FakeDiffPatch(resp) else: @@ -130,12 +133,11 @@ class FakeDiffer(object): return len(self.parent) -class PerfRepo(object): +class PerfRepo(six.with_metaclass(PerfRepoMeta, object)): """ An utility class allowing to go around pygit2's inability to be stable. """ - __metaclass__ = PerfRepoMeta def __init__(self, path): STATS['repo_inits'].append((path, traceback.extract_stack(limit=2)[0])) @@ -185,13 +187,15 @@ class PerfRepo(object): self.iter = self.repo.__iter__() return self - def next(self): + def __next__(self): STATS['walks'][self.wid]['steps'] += 1 TOTALS['steps'] += 1 - return self.iter.next() + return next(self.iter) -pygit2.Repository = PerfRepo +if six.PY2: + # Disable perfrepo on PY3, it doesn't work + pygit2.Repository = PerfRepo def reset_stats(): @@ -215,7 +219,7 @@ def print_stats(response): if not os.environ.get('PAGURE_PERFREPO_VERBOSE'): return response - print 'Statistics:' + print('Statistics:') pprint.pprint(STATS) return response diff --git a/pagure/pfmarkdown.py b/pagure/pfmarkdown.py index 3eedb8c..a8a8111 100644 --- a/pagure/pfmarkdown.py +++ b/pagure/pfmarkdown.py @@ -26,6 +26,7 @@ import markdown.preprocessors import markdown.util import pygit2 import re +import six import pagure.lib from pagure.config import config as pagure_config @@ -444,7 +445,7 @@ def _obj_anchor_tag(user, namespace, repo, obj, text): :return: An element tree containing the href to the issue or PR :rtype: xml.etree.ElementTree.Element """ - if isinstance(obj, basestring): + if isinstance(obj, six.string_types): url = flask.url_for( 'ui_ns.view_commit', username=user, namespace=namespace, repo=repo, commitid=obj) diff --git a/pagure/templates/commit.html b/pagure/templates/commit.html index 86be630..f9459c1 100644 --- a/pagure/templates/commit.html +++ b/pagure/templates/commit.html @@ -100,7 +100,11 @@ {% endif %} {% endif %} - {{ patch.new_file_path | unicode }} + {% if patch | hasattr('new_file_path') %} + {{ patch.new_file_path | unicode }} + {% elif patch | hasattr('delta') %} + {{ patch.delta.new_file.path | unicode }} + {% endif %} {% endfor %} diff --git a/pagure/templates/pull_request.html b/pagure/templates/pull_request.html index c0bf088..cb345ff 100644 --- a/pagure/templates/pull_request.html +++ b/pagure/templates/pull_request.html @@ -498,10 +498,10 @@ {%- else -%} {% set patchtype = "moved"%} - {{lineschanged(True, True)}} + {{ lineschanged(True, True) }}
{{patch.delta.old_file.path}}
- {{viewfilelink(patch.delta.new_file.path)}} + {{ viewfilelink(patch.delta.new_file.path) }}
file moved
{%- endif -%} diff --git a/pagure/templates/roadmap.html b/pagure/templates/roadmap.html index d6ee572..2937a20 100644 --- a/pagure/templates/roadmap.html +++ b/pagure/templates/roadmap.html @@ -37,7 +37,7 @@ - {% for issue in issues |sort(attribute='priority') %} + {% for issue in issues |sort(attribute='sortable_priority') %} {% if status is none or status|lower == 'all' or issue.status == status %} diff --git a/pagure/ui/filters.py b/pagure/ui/filters.py index dcb430f..332424b 100644 --- a/pagure/ui/filters.py +++ b/pagure/ui/filters.py @@ -14,13 +14,13 @@ import textwrap -import urlparse import arrow import flask -import md5 +import hashlib import six +from six.moves.urllib.parse import urlparse, parse_qsl from pygments import highlight from pygments.lexers.text import DiffLexer from pygments.formatters import HtmlFormatter @@ -92,8 +92,8 @@ def format_loc(loc, commit=None, filename=None, tree_id=None, prequest=None, comments = {} if prequest and not isinstance(prequest, flask.wrappers.Request): for com in prequest.comments: - if commit and unicode(com.commit_id) == unicode(commit) \ - and unicode(com.filename) == unicode(filename): + if commit and com.commit_id == commit \ + and com.filename == filename: if com.line in comments: comments[com.line].append(com) else: @@ -110,6 +110,8 @@ def format_loc(loc, commit=None, filename=None, tree_id=None, prequest=None, if line == '': break if filename and commit: + if isinstance(filename, str) and six.PY2: + filename = filename.decode('UTF-8') output.append( '' ' 1: + and len(repo_obj.listall_branches()) > 1: if not orig_repo.head_is_unborn: compare_branch = orig_repo.lookup_branch( @@ -545,7 +546,7 @@ def view_file(repo, identifier, filename, username=None, namespace=None): '.gif', '.png', '.bmp', '.tif', '.tiff', '.jpg', '.jpeg', '.ppm', '.pnm', '.pbm', '.pgm', '.webp', '.ico'): try: - Image.open(StringIO(content.data)) + Image.open(BytesIO(content.data)) output_type = 'image' except IOError as err: _log.debug( @@ -701,6 +702,8 @@ def view_raw_file( # First commit in the repo diff = commit.tree.diff_to_tree(swap=True) data = diff.patch + if six.PY3: + data = data.encode('utf-8').decode('utf-8') if not data: flask.abort(404, 'No content found') @@ -2128,7 +2131,9 @@ def edit_file(repo, branchname, filename, username=None, namespace=None): flask.abort(400, 'Cannot edit binary files') else: - data = form.content.data.decode('utf-8') + data = form.content.data + if not isinstance(data, six.string_types): + data = data.decode('utf-8') return flask.render_template( 'edit_file.html', diff --git a/pagure/utils.py b/pagure/utils.py index 0c9222a..4997806 100644 --- a/pagure/utils.py +++ b/pagure/utils.py @@ -10,11 +10,12 @@ import os import re -import urlparse +from six.moves.urllib.parse import urlparse, urljoin from functools import wraps import flask import pygit2 +import six import werkzeug from pagure.config import config as pagure_config @@ -40,9 +41,8 @@ def is_safe_url(target): # pragma: no cover """ Checks that the target url is safe and sending to the current website not some other malicious one. """ - ref_url = urlparse.urlparse(flask.request.host_url) - test_url = urlparse.urlparse( - urlparse.urljoin(flask.request.host_url, target)) + ref_url = urlparse(flask.request.host_url) + test_url = urlparse(urljoin(flask.request.host_url, target)) return test_url.scheme in ('http', 'https') and \ ref_url.netloc == test_url.netloc @@ -183,7 +183,9 @@ def __get_file_in_tree(repo_obj, tree, filepath, bail_on_tree=False): if isinstance(tree, pygit2.Blob): return for entry in tree: - fname = entry.name.decode('utf-8') + fname = entry.name + if six.PY2: + fname = entry.name.decode('utf-8') if fname == filename: if len(filepath) == 1: blob = repo_obj.get(entry.id) From 6264174771f6cbeb01e4f098d76776c378b8582f Mon Sep 17 00:00:00 2001 From: Aurélien Bompard Date: May 03 2018 12:21:52 +0000 Subject: [PATCH 3/6] Port the unit-tests to python3 --- diff --git a/tests/__init__.py b/tests/__init__.py index a1f80c0..2ad6541 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -8,9 +8,12 @@ """ +from __future__ import unicode_literals + __requires__ = ['SQLAlchemy >= 0.7'] import pkg_resources +import imp import json import logging import os @@ -22,21 +25,21 @@ import sys import tempfile import time import unittest +from io import StringIO logging.basicConfig(stream=sys.stderr) -# Always enable performance counting for tests -os.environ['PAGURE_PERFREPO'] = 'true' - +from bs4 import BeautifulSoup from contextlib import contextmanager from datetime import date from datetime import datetime from datetime import timedelta from functools import wraps -from urlparse import urlparse, parse_qs +from six.moves.urllib.parse import urlparse, parse_qs import mock import pygit2 import redis +import six from bs4 import BeautifulSoup from celery.app.task import EagerResult @@ -44,6 +47,10 @@ from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from sqlalchemy.orm import scoped_session +if six.PY2: + # Always enable performance counting for tests + os.environ['PAGURE_PERFREPO'] = 'true' + sys.path.insert(0, os.path.join(os.path.dirname( os.path.abspath(__file__)), '..')) @@ -82,6 +89,7 @@ ATTACHMENTS_FOLDER = '%(path)s/attachments' BROKER_URL = 'redis+socket://%(global_path)s/broker' CELERY_CONFIG = { "task_always_eager": True, + #"task_eager_propagates": True, } """ # The Celery docs warn against using task_always_eager: @@ -132,21 +140,29 @@ def create_maybe_waiter(method, getter): # Handle the POST wait case form_url = None form_args = None - if 'id="waitform"' in result.data: - form_url = get_post_target(result.data) - form_args = get_post_args(result.data) - form_args['csrf_token'] = result.data.split( + try: + result_text = result.get_data(as_text=True) + except UnicodeDecodeError: + return result + if 'id="waitform"' in result_text: + form_url = get_post_target(result_text) + form_args = get_post_args(result_text) + form_args['csrf_token'] = result_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] count = 0 - while 'We are waiting for your task to finish.' in result.data: + while 'We are waiting for your task to finish.' in result_text: # Resolve wait page - target_url = get_wait_target(result.data) + target_url = get_wait_target(result_text) if count > 10: time.sleep(0.5) else: time.sleep(0.1) result = getter(target_url, follow_redirects=True) + try: + result_text = result.get_data(as_text=True) + except UnicodeDecodeError: + return result if count > 50: raise Exception('Had to wait too long') else: @@ -199,7 +215,7 @@ def _populate_db(session): item = pagure.lib.model.User( user='pingou', fullname='PY C', - password='foo', + password=b'foo', default_email='bar@pingou.com', ) session.add(item) @@ -215,7 +231,7 @@ def _populate_db(session): item = pagure.lib.model.User( user='foo', fullname='foo bar', - password='foo', + password=b'foo', default_email='foo@bar.com', ) session.add(item) @@ -345,8 +361,8 @@ class SimplePagureTest(unittest.TestCase): os.environ["PAGURE_CONFIG"] = config_path pagure_config.update(reload_config()) - reload(pagure.lib.tasks) - reload(pagure.lib.tasks_services) + imp.reload(pagure.lib.tasks) + imp.reload(pagure.lib.tasks_services) self._app = pagure.flask_app.create_app({'DB_URL': self.dbpath}) # Remove the log handlers for the tests @@ -409,7 +425,7 @@ class SimplePagureTest(unittest.TestCase): output = self.app.get(url) self.assertEqual(output.status_code, 200) - return output.data.split( + return output.get_data(as_text=True).split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] def assertURLEqual(self, url_1, url_2): @@ -460,7 +476,7 @@ class FakeUser(object): # pylint: disable=too-few-public-methods :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.id = id self.groups = groups or [] @@ -916,8 +932,6 @@ def add_binary_git_repo(folder, filename): @contextmanager def capture_output(merge_stderr=True): - import sys - from cStringIO import StringIO oldout, olderr = sys.stdout, sys.stderr try: out = StringIO() @@ -932,6 +946,26 @@ def capture_output(merge_stderr=True): sys.stdout, sys.stderr = oldout, olderr +def get_alerts(html): + soup = BeautifulSoup(html, "html.parser") + alerts = [] + for element in soup.find_all("div", class_="alert"): + severity = None + for class_ in element["class"]: + if not class_.startswith("alert-"): + continue + if class_ == "alert-dismissible": + continue + severity = class_[len("alert-"):] + break + element.find("button").decompose() # close button + alerts.append(dict( + severity=severity, + text="".join(element.stripped_strings) + )) + return alerts + + if __name__ == '__main__': SUITE = unittest.TestLoader().loadTestsFromTestCase(Modeltests) unittest.TextTestRunner(verbosity=2).run(SUITE) diff --git a/tests/test_alembic.py b/tests/test_alembic.py index 6aec50c..9b35983 100644 --- a/tests/test_alembic.py +++ b/tests/test_alembic.py @@ -34,7 +34,7 @@ class TestAlembic(unittest.TestCase): ['grep', ' (head), '], stdin=proc1.stdout, stdout=subprocess.PIPE) stdout = proc2.communicate()[0] - stdout = stdout.strip().split('\n') + stdout = stdout.strip().decode('utf-8').split('\n') self.assertEqual(len(stdout), 1) diff --git a/tests/test_pagure_flask.py b/tests/test_pagure_flask.py index f2412a0..85ec699 100644 --- a/tests/test_pagure_flask.py +++ b/tests/test_pagure_flask.py @@ -56,7 +56,8 @@ class PagureGetRemoteRepoPath(tests.SimplePagureTest): """ Test is_repo_committer in pagure when there is no logged in user. """ repo = pagure.lib._get_project(self.session, 'test') - output = pagure.utils.is_repo_committer(repo) + with self.app.application.app_context(): + output = pagure.utils.is_repo_committer(repo) self.assertFalse(output) def test_is_repo_committer_logged_in(self): diff --git a/tests/test_pagure_flask_api.py b/tests/test_pagure_flask_api.py index 927e497..bd239f4 100644 --- a/tests/test_pagure_flask_api.py +++ b/tests/test_pagure_flask_api.py @@ -35,9 +35,9 @@ class PagureFlaskApitests(tests.SimplePagureTest): output = self.app.get('/api/0/version') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(data['version'], pagure.__api_version__) - self.assertEqual(data.keys(), ['version']) + self.assertEqual(sorted(data.keys()), ['version']) def test_api_project_tags(self): """ Test the api_project_tags function. """ @@ -45,14 +45,14 @@ class PagureFlaskApitests(tests.SimplePagureTest): output = self.app.get('/api/0/foo/tags/') self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(set(data.keys()), set(['output', 'error'])) self.assertEqual(data['output'], 'notok') self.assertEqual(data['error'], 'Project not found') output = self.app.get('/api/0/test/tags/') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(sorted(data.keys()), ['tags', 'total_tags']) self.assertEqual(data['tags'], []) self.assertEqual(data['total_tags'], 0) @@ -82,25 +82,60 @@ class PagureFlaskApitests(tests.SimplePagureTest): output = self.app.get('/api/0/test/tags/') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(sorted(data.keys()), ['tags', 'total_tags']) self.assertEqual(data['tags'], ['tag1']) self.assertEqual(data['total_tags'], 1) output = self.app.get('/api/0/test/tags/?pattern=t') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(sorted(data.keys()), ['tags', 'total_tags']) self.assertEqual(data['tags'], ['tag1']) self.assertEqual(data['total_tags'], 1) output = self.app.get('/api/0/test/tags/?pattern=p') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(sorted(data.keys()), ['tags', 'total_tags']) self.assertEqual(data['tags'], []) self.assertEqual(data['total_tags'], 0) + def test_api_groups(self): + """ Test the api_groups function. """ + + # Add a couple of groups so that we can list them + item = pagure.lib.model.PagureGroup( + group_name='group1', + group_type='user', + display_name='User group', + user_id=1, # pingou + ) + self.session.add(item) + + item = pagure.lib.model.PagureGroup( + group_name='rel-eng', + group_type='user', + display_name='Release engineering group', + user_id=1, # pingou + ) + self.session.add(item) + self.session.commit() + + output = self.app.get('/api/0/groups') + self.assertEqual(output.status_code, 200) + data = json.loads(output.get_data(as_text=True)) + self.assertEqual(data['groups'], ['group1', 'rel-eng']) + self.assertEqual(sorted(data.keys()), ['groups', 'total_groups']) + self.assertEqual(data['total_groups'], 2) + + output = self.app.get('/api/0/groups?pattern=re') + self.assertEqual(output.status_code, 200) + data = json.loads(output.get_data(as_text=True)) + self.assertEqual(data['groups'], ['rel-eng']) + self.assertEqual(sorted(data.keys()), ['groups', 'total_groups']) + self.assertEqual(data['total_groups'], 1) + if __name__ == '__main__': unittest.main(verbosity=2) diff --git a/tests/test_pagure_flask_api_auth.py b/tests/test_pagure_flask_api_auth.py index 9369886..98dd387 100644 --- a/tests/test_pagure_flask_api_auth.py +++ b/tests/test_pagure_flask_api_auth.py @@ -36,7 +36,7 @@ class PagureFlaskApiAuthtests(tests.SimplePagureTest): output = self.app.post('/api/0/foo/new_issue') self.assertEqual(output.status_code, 401) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(pagure.api.APIERROR.EINVALIDTOK.name, data['error_code']) self.assertEqual(pagure.api.APIERROR.EINVALIDTOK.value, data['error']) @@ -45,7 +45,7 @@ class PagureFlaskApiAuthtests(tests.SimplePagureTest): output = self.app.post('/api/0/foo/new_issue', headers=headers) self.assertEqual(output.status_code, 401) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(pagure.api.APIERROR.EINVALIDTOK.name, data['error_code']) self.assertEqual(pagure.api.APIERROR.EINVALIDTOK.value, data['error']) @@ -58,7 +58,7 @@ class PagureFlaskApiAuthtests(tests.SimplePagureTest): output = self.app.post('/api/0/test/new_issue') self.assertEqual(output.status_code, 401) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(pagure.api.APIERROR.EINVALIDTOK.name, data['error_code']) self.assertEqual(pagure.api.APIERROR.EINVALIDTOK.value, data['error']) @@ -67,7 +67,7 @@ class PagureFlaskApiAuthtests(tests.SimplePagureTest): output = self.app.post('/api/0/test/new_issue', headers=headers) self.assertEqual(output.status_code, 401) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(pagure.api.APIERROR.EINVALIDTOK.name, data['error_code']) self.assertEqual(pagure.api.APIERROR.EINVALIDTOK.value, data['error']) @@ -80,7 +80,7 @@ class PagureFlaskApiAuthtests(tests.SimplePagureTest): output = self.app.post('/api/0/test/new_issue') self.assertEqual(output.status_code, 401) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(pagure.api.APIERROR.EINVALIDTOK.name, data['error_code']) self.assertEqual(pagure.api.APIERROR.EINVALIDTOK.value, data['error']) @@ -89,7 +89,7 @@ class PagureFlaskApiAuthtests(tests.SimplePagureTest): output = self.app.post('/api/0/test/new_issue', headers=headers) self.assertEqual(output.status_code, 401) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(pagure.api.APIERROR.EINVALIDTOK.name, data['error_code']) self.assertEqual(pagure.api.APIERROR.EINVALIDTOK.value, data['error']) @@ -103,7 +103,7 @@ class PagureFlaskApiAuthtests(tests.SimplePagureTest): output = self.app.post('/api/0/test/new_issue') self.assertEqual(output.status_code, 401) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(pagure.api.APIERROR.EINVALIDTOK.name, data['error_code']) self.assertEqual(pagure.api.APIERROR.EINVALIDTOK.value, data['error']) @@ -112,7 +112,7 @@ class PagureFlaskApiAuthtests(tests.SimplePagureTest): output = self.app.post('/api/0/test/new_issue', headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { diff --git a/tests/test_pagure_flask_api_fork.py b/tests/test_pagure_flask_api_fork.py index 65f1b82..d2e51ec 100644 --- a/tests/test_pagure_flask_api_fork.py +++ b/tests/test_pagure_flask_api_fork.py @@ -8,6 +8,8 @@ """ +from __future__ import unicode_literals + __requires__ = ['SQLAlchemy >= 0.8'] import pkg_resources @@ -69,7 +71,7 @@ class PagureFlaskApiForktests(tests.Modeltests): # Invalid repo output = self.app.get('/api/0/foo/pull-requests') self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -81,7 +83,7 @@ class PagureFlaskApiForktests(tests.Modeltests): # List pull-requests output = self.app.get('/api/0/test/pull-requests') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['requests'][0]['date_created'] = '1431414800' data['requests'][0]['updated_on'] = '1431414800' data['requests'][0]['project']['date_created'] = '1431414800' @@ -200,7 +202,7 @@ class PagureFlaskApiForktests(tests.Modeltests): # Access Pull-Request authenticated output = self.app.get('/api/0/test/pull-requests', headers=headers) self.assertEqual(output.status_code, 200) - data2 = json.loads(output.data) + data2 = json.loads(output.get_data(as_text=True)) data2['requests'][0]['date_created'] = '1431414800' data2['requests'][0]['updated_on'] = '1431414800' data2['requests'][0]['project']['date_created'] = '1431414800' @@ -239,7 +241,7 @@ class PagureFlaskApiForktests(tests.Modeltests): # Invalid repo output = self.app.get('/api/0/foo/pull-request/1') self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -251,7 +253,7 @@ class PagureFlaskApiForktests(tests.Modeltests): # Invalid issue for this repo output = self.app.get('/api/0/test2/pull-request/1') self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -263,7 +265,7 @@ class PagureFlaskApiForktests(tests.Modeltests): # Valid issue output = self.app.get('/api/0/test/pull-request/1') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['date_created'] = '1431414800' data['updated_on'] = '1431414800' data['project']['date_created'] = '1431414800' @@ -372,7 +374,7 @@ class PagureFlaskApiForktests(tests.Modeltests): # Access Pull-Request authenticated output = self.app.get('/api/0/test/pull-request/1', headers=headers) self.assertEqual(output.status_code, 200) - data2 = json.loads(output.data) + data2 = json.loads(output.get_data(as_text=True)) data2['date_created'] = '1431414800' data2['project']['date_created'] = '1431414800' data2['project']['date_modified'] = '1431414800' @@ -416,7 +418,7 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/foo/pull-request/1/close', headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -429,7 +431,7 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/test2/pull-request/1/close', headers=headers) self.assertEqual(output.status_code, 401) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(pagure.api.APIERROR.EINVALIDTOK.name, data['error_code']) self.assertEqual(pagure.api.APIERROR.EINVALIDTOK.value, data['error']) @@ -438,7 +440,7 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/2/close', headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'error': 'Pull-Request not found', 'error_code': "ENOREQ"} @@ -473,7 +475,7 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/1/close', headers=headers) self.assertEqual(output.status_code, 403) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -489,7 +491,7 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/1/close', headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {"message": "Pull-request closed!"} @@ -533,7 +535,7 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/foo/pull-request/1/merge', headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -546,7 +548,7 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/test2/pull-request/1/merge', headers=headers) self.assertEqual(output.status_code, 401) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(pagure.api.APIERROR.EINVALIDTOK.name, data['error_code']) self.assertEqual(pagure.api.APIERROR.EINVALIDTOK.value, data['error']) @@ -555,7 +557,7 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/2/merge', headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'error': 'Pull-Request not found', 'error_code': "ENOREQ"} @@ -590,7 +592,7 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/1/merge', headers=headers) self.assertEqual(output.status_code, 403) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -606,7 +608,7 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/1/merge', headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {"message": "Changes merged!"} @@ -650,7 +652,7 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/foo/pull-request/1/merge', headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -663,7 +665,7 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/test2/pull-request/1/merge', headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'error': 'Pull-Request not found', 'error_code': "ENOREQ"} @@ -673,7 +675,7 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/2/merge', headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'error': 'Pull-Request not found', 'error_code': "ENOREQ"} @@ -709,7 +711,7 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/1/merge', headers=headers) self.assertEqual(output.status_code, 403) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -725,7 +727,7 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/1/merge', headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {"message": "Changes merged!"} @@ -746,7 +748,7 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/foo/pull-request/1/comment', headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -759,7 +761,7 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/test2/pull-request/1/comment', headers=headers) self.assertEqual(output.status_code, 401) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(pagure.api.APIERROR.EINVALIDTOK.name, data['error_code']) self.assertEqual(pagure.api.APIERROR.EINVALIDTOK.value, data['error']) @@ -768,7 +770,7 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/1/comment', headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -808,7 +810,7 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/1/comment', data=data, headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -832,7 +834,7 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/1/comment', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'Comment added'} @@ -859,7 +861,7 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/foo/pull-request/1/comment', headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -872,7 +874,7 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/test2/pull-request/1/comment', headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -885,7 +887,7 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/1/comment', headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -925,7 +927,7 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/1/comment', data=data, headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -949,7 +951,7 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/1/comment', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'Comment added'} @@ -992,7 +994,7 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/foo/pull-request/1/subscribe', headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -1005,7 +1007,7 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/test2/pull-request/1/subscribe', headers=headers) self.assertEqual(output.status_code, 401) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(pagure.api.APIERROR.EINVALIDTOK.name, data['error_code']) self.assertEqual(pagure.api.APIERROR.EINVALIDTOK.value, data['error']) @@ -1014,12 +1016,12 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/1/subscribe', headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { - u'error': u'Pull-Request not found', - u'error_code': u'ENOREQ' + 'error': 'Pull-Request not found', + 'error_code': 'ENOREQ' } ) @@ -1053,7 +1055,7 @@ class PagureFlaskApiForktests(tests.Modeltests): '/api/0/test/pull-request/1/subscribe', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'You are no longer watching this pull-request'} @@ -1064,7 +1066,7 @@ class PagureFlaskApiForktests(tests.Modeltests): '/api/0/test/pull-request/1/subscribe', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'You are no longer watching this pull-request'} @@ -1084,7 +1086,7 @@ class PagureFlaskApiForktests(tests.Modeltests): '/api/0/test/pull-request/1/subscribe', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'You are now watching this pull-request'} @@ -1096,7 +1098,7 @@ class PagureFlaskApiForktests(tests.Modeltests): '/api/0/test/pull-request/1/subscribe', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'You are now watching this pull-request'} @@ -1115,7 +1117,7 @@ class PagureFlaskApiForktests(tests.Modeltests): '/api/0/test/pull-request/1/subscribe', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'You are no longer watching this pull-request'} @@ -1154,10 +1156,10 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/foobar/pull-request/new', headers=headers, data=data) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, - {u'error': u'Project not found', u'error_code': u'ENOPROJECT'} + {'error': 'Project not found', 'error_code': 'ENOPROJECT'} ) @patch('pagure.lib.notify.send_email', MagicMock(return_value=True)) @@ -1186,13 +1188,13 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/new', headers=headers, data=data) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { - u'error': u'Invalid or incomplete input submitted', - u'error_code': u'EINVALIDREQ', - u'errors': {u'title': [u'This field is required.']} + 'error': 'Invalid or incomplete input submitted', + 'error_code': 'EINVALIDREQ', + 'errors': {'title': ['This field is required.']} } ) @@ -1222,13 +1224,13 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/new', headers=headers, data=data) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { - u'error': u'Invalid or incomplete input submitted', - u'error_code': u'EINVALIDREQ', - u'errors': {u'branch_to': [u'This field is required.']} + 'error': 'Invalid or incomplete input submitted', + 'error_code': 'EINVALIDREQ', + 'errors': {'branch_to': ['This field is required.']} } ) @@ -1258,13 +1260,13 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/new', headers=headers, data=data) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { - u'error': u'Invalid or incomplete input submitted', - u'error_code': u'EINVALIDREQ', - u'errors': {u'branch_from': [u'This field is required.']} + 'error': 'Invalid or incomplete input submitted', + 'error_code': 'EINVALIDREQ', + 'errors': {'branch_from': ['This field is required.']} } ) @@ -1303,12 +1305,12 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/new', headers=headers, data=data) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { - u'error': u'Pull-Request have been deactivated for this project', - u'error_code': u'EPULLREQUESTSDISABLED' + 'error': 'Pull-Request have been deactivated for this project', + 'error_code': 'EPULLREQUESTSDISABLED' } ) @@ -1347,13 +1349,13 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/new', headers=headers, data=data) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { - u'error': u'This repo enforces that all commits are signed ' + 'error': 'This repo enforces that all commits are signed ' 'off by their author.', - u'error_code': u'ENOSIGNEDOFF' + 'error_code': 'ENOSIGNEDOFF' } ) @@ -1392,13 +1394,13 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/new', headers=headers, data=data) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { - u'error': u'Invalid or incomplete input submitted', - u'error_code': u'EINVALIDREQ', - u'errors': u'Branch foobarbaz does not exist' + 'error': 'Invalid or incomplete input submitted', + 'error_code': 'EINVALIDREQ', + 'errors': 'Branch foobarbaz does not exist' } ) @@ -1437,13 +1439,13 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/new', headers=headers, data=data) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { - u'error': u'Invalid or incomplete input submitted', - u'error_code': u'EINVALIDREQ', - u'errors': u'Branch foobarbaz could not be found in the ' + 'error': 'Invalid or incomplete input submitted', + 'error_code': 'EINVALIDREQ', + 'errors': 'Branch foobarbaz could not be found in the ' 'target repo' } ) @@ -1473,89 +1475,89 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/new', headers=headers, data=data) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) - data['project']['date_created'] = u'1516348115' - data['project']['date_modified'] = u'1516348115' - data['repo_from']['date_created'] = u'1516348115' - data['repo_from']['date_modified'] = u'1516348115' - data['uid'] = u'e8b68df8711648deac67c3afed15a798' - data['commit_start'] = u'114f1b468a5f05e635fcb6394273f3f907386eab' - data['commit_stop'] = u'114f1b468a5f05e635fcb6394273f3f907386eab' - data['date_created'] = u'1516348115' - data['last_updated'] = u'1516348115' - data['updated_on'] = u'1516348115' + data = json.loads(output.get_data(as_text=True)) + data['project']['date_created'] = '1516348115' + data['project']['date_modified'] = '1516348115' + data['repo_from']['date_created'] = '1516348115' + data['repo_from']['date_modified'] = '1516348115' + data['uid'] = 'e8b68df8711648deac67c3afed15a798' + data['commit_start'] = '114f1b468a5f05e635fcb6394273f3f907386eab' + data['commit_stop'] = '114f1b468a5f05e635fcb6394273f3f907386eab' + data['date_created'] = '1516348115' + data['last_updated'] = '1516348115' + data['updated_on'] = '1516348115' self.assertDictEqual( data, { - u'assignee': None, - u'branch': u'master', - u'branch_from': u'test', - u'cached_merge_status': u'unknown', - u'closed_at': None, - u'closed_by': None, - u'comments': [], - u'commit_start': u'114f1b468a5f05e635fcb6394273f3f907386eab', - u'commit_stop': u'114f1b468a5f05e635fcb6394273f3f907386eab', - u'date_created': u'1516348115', - u'id': 1, - u'initial_comment': u'Nothing much, the changes speak for themselves', - u'last_updated': u'1516348115', - u'project': {u'access_groups': {u'admin': [], - u'commit': [], - u'ticket':[]}, - u'access_users': {u'admin': [], - u'commit': [], - u'owner': [u'pingou'], - u'ticket': []}, - u'close_status': [u'Invalid', - u'Insufficient data', - u'Fixed', - u'Duplicate'], - u'custom_keys': [], - u'date_created': u'1516348115', - u'date_modified': u'1516348115', - u'description': u'test project #1', - u'fullname': u'test', - u'id': 1, - u'milestones': {}, - u'name': u'test', - u'namespace': None, - u'parent': None, - u'priorities': {}, - u'tags': [], - u'url_path': u'test', - u'user': {u'fullname': u'PY C', u'name': u'pingou'}}, - u'remote_git': None, - u'repo_from': {u'access_groups': {u'admin': [], - u'commit': [], - u'ticket': []}, - u'access_users': {u'admin': [], - u'commit': [], - u'owner': [u'pingou'], - u'ticket': []}, - u'close_status': [u'Invalid', - u'Insufficient data', - u'Fixed', - u'Duplicate'], - u'custom_keys': [], - u'date_created': u'1516348115', - u'date_modified': u'1516348115', - u'description': u'test project #1', - u'fullname': u'test', - u'id': 1, - u'milestones': {}, - u'name': u'test', - u'namespace': None, - u'parent': None, - u'priorities': {}, - u'tags': [], - u'url_path': u'test', - u'user': {u'fullname': u'PY C', u'name': u'pingou'}}, - u'status': u'Open', - u'title': u'Test PR', - u'uid': u'e8b68df8711648deac67c3afed15a798', - u'updated_on': u'1516348115', - u'user': {u'fullname': u'PY C', u'name': u'pingou'} + 'assignee': None, + 'branch': 'master', + 'branch_from': 'test', + 'cached_merge_status': 'unknown', + 'closed_at': None, + 'closed_by': None, + 'comments': [], + 'commit_start': '114f1b468a5f05e635fcb6394273f3f907386eab', + 'commit_stop': '114f1b468a5f05e635fcb6394273f3f907386eab', + 'date_created': '1516348115', + 'id': 1, + 'initial_comment': 'Nothing much, the changes speak for themselves', + 'last_updated': '1516348115', + 'project': {'access_groups': {'admin': [], + 'commit': [], + 'ticket':[]}, + 'access_users': {'admin': [], + 'commit': [], + 'owner': ['pingou'], + 'ticket': []}, + 'close_status': ['Invalid', + 'Insufficient data', + 'Fixed', + 'Duplicate'], + 'custom_keys': [], + 'date_created': '1516348115', + 'date_modified': '1516348115', + 'description': 'test project #1', + 'fullname': 'test', + 'id': 1, + 'milestones': {}, + 'name': 'test', + 'namespace': None, + 'parent': None, + 'priorities': {}, + 'tags': [], + 'url_path': 'test', + 'user': {'fullname': 'PY C', 'name': 'pingou'}}, + 'remote_git': None, + 'repo_from': {'access_groups': {'admin': [], + 'commit': [], + 'ticket': []}, + 'access_users': {'admin': [], + 'commit': [], + 'owner': ['pingou'], + 'ticket': []}, + 'close_status': ['Invalid', + 'Insufficient data', + 'Fixed', + 'Duplicate'], + 'custom_keys': [], + 'date_created': '1516348115', + 'date_modified': '1516348115', + 'description': 'test project #1', + 'fullname': 'test', + 'id': 1, + 'milestones': {}, + 'name': 'test', + 'namespace': None, + 'parent': None, + 'priorities': {}, + 'tags': [], + 'url_path': 'test', + 'user': {'fullname': 'PY C', 'name': 'pingou'}}, + 'status': 'Open', + 'title': 'Test PR', + 'uid': 'e8b68df8711648deac67c3afed15a798', + 'updated_on': '1516348115', + 'user': {'fullname': 'PY C', 'name': 'pingou'} } ) @@ -1585,89 +1587,89 @@ class PagureFlaskApiForktests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/new', headers=headers, data=data) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) - data['project']['date_created'] = u'1516348115' - data['project']['date_modified'] = u'1516348115' - data['repo_from']['date_created'] = u'1516348115' - data['repo_from']['date_modified'] = u'1516348115' - data['uid'] = u'e8b68df8711648deac67c3afed15a798' - data['commit_start'] = u'114f1b468a5f05e635fcb6394273f3f907386eab' - data['commit_stop'] = u'114f1b468a5f05e635fcb6394273f3f907386eab' - data['date_created'] = u'1516348115' - data['last_updated'] = u'1516348115' - data['updated_on'] = u'1516348115' + data = json.loads(output.get_data(as_text=True)) + data['project']['date_created'] = '1516348115' + data['project']['date_modified'] = '1516348115' + data['repo_from']['date_created'] = '1516348115' + data['repo_from']['date_modified'] = '1516348115' + data['uid'] = 'e8b68df8711648deac67c3afed15a798' + data['commit_start'] = '114f1b468a5f05e635fcb6394273f3f907386eab' + data['commit_stop'] = '114f1b468a5f05e635fcb6394273f3f907386eab' + data['date_created'] = '1516348115' + data['last_updated'] = '1516348115' + data['updated_on'] = '1516348115' self.assertDictEqual( data, { - u'assignee': None, - u'branch': u'master', - u'branch_from': u'test', - u'cached_merge_status': u'unknown', - u'closed_at': None, - u'closed_by': None, - u'comments': [], - u'commit_start': u'114f1b468a5f05e635fcb6394273f3f907386eab', - u'commit_stop': u'114f1b468a5f05e635fcb6394273f3f907386eab', - u'date_created': u'1516348115', - u'id': 1, - u'initial_comment': None, - u'last_updated': u'1516348115', - u'project': {u'access_groups': {u'admin': [], - u'commit': [], - u'ticket':[]}, - u'access_users': {u'admin': [], - u'commit': [], - u'owner': [u'pingou'], - u'ticket': []}, - u'close_status': [u'Invalid', - u'Insufficient data', - u'Fixed', - u'Duplicate'], - u'custom_keys': [], - u'date_created': u'1516348115', - u'date_modified': u'1516348115', - u'description': u'test project #1', - u'fullname': u'test', - u'id': 1, - u'milestones': {}, - u'name': u'test', - u'namespace': None, - u'parent': None, - u'priorities': {}, - u'tags': [], - u'url_path': u'test', - u'user': {u'fullname': u'PY C', u'name': u'pingou'}}, - u'remote_git': None, - u'repo_from': {u'access_groups': {u'admin': [], - u'commit': [], - u'ticket': []}, - u'access_users': {u'admin': [], - u'commit': [], - u'owner': [u'pingou'], - u'ticket': []}, - u'close_status': [u'Invalid', - u'Insufficient data', - u'Fixed', - u'Duplicate'], - u'custom_keys': [], - u'date_created': u'1516348115', - u'date_modified': u'1516348115', - u'description': u'test project #1', - u'fullname': u'test', - u'id': 1, - u'milestones': {}, - u'name': u'test', - u'namespace': None, - u'parent': None, - u'priorities': {}, - u'tags': [], - u'url_path': u'test', - u'user': {u'fullname': u'PY C', u'name': u'pingou'}}, - u'status': u'Open', - u'title': u'Test PR', - u'uid': u'e8b68df8711648deac67c3afed15a798', - u'updated_on': u'1516348115', - u'user': {u'fullname': u'PY C', u'name': u'pingou'} + 'assignee': None, + 'branch': 'master', + 'branch_from': 'test', + 'cached_merge_status': 'unknown', + 'closed_at': None, + 'closed_by': None, + 'comments': [], + 'commit_start': '114f1b468a5f05e635fcb6394273f3f907386eab', + 'commit_stop': '114f1b468a5f05e635fcb6394273f3f907386eab', + 'date_created': '1516348115', + 'id': 1, + 'initial_comment': None, + 'last_updated': '1516348115', + 'project': {'access_groups': {'admin': [], + 'commit': [], + 'ticket':[]}, + 'access_users': {'admin': [], + 'commit': [], + 'owner': ['pingou'], + 'ticket': []}, + 'close_status': ['Invalid', + 'Insufficient data', + 'Fixed', + 'Duplicate'], + 'custom_keys': [], + 'date_created': '1516348115', + 'date_modified': '1516348115', + 'description': 'test project #1', + 'fullname': 'test', + 'id': 1, + 'milestones': {}, + 'name': 'test', + 'namespace': None, + 'parent': None, + 'priorities': {}, + 'tags': [], + 'url_path': 'test', + 'user': {'fullname': 'PY C', 'name': 'pingou'}}, + 'remote_git': None, + 'repo_from': {'access_groups': {'admin': [], + 'commit': [], + 'ticket': []}, + 'access_users': {'admin': [], + 'commit': [], + 'owner': ['pingou'], + 'ticket': []}, + 'close_status': ['Invalid', + 'Insufficient data', + 'Fixed', + 'Duplicate'], + 'custom_keys': [], + 'date_created': '1516348115', + 'date_modified': '1516348115', + 'description': 'test project #1', + 'fullname': 'test', + 'id': 1, + 'milestones': {}, + 'name': 'test', + 'namespace': None, + 'parent': None, + 'priorities': {}, + 'tags': [], + 'url_path': 'test', + 'user': {'fullname': 'PY C', 'name': 'pingou'}}, + 'status': 'Open', + 'title': 'Test PR', + 'uid': 'e8b68df8711648deac67c3afed15a798', + 'updated_on': '1516348115', + 'user': {'fullname': 'PY C', 'name': 'pingou'} } ) diff --git a/tests/test_pagure_flask_api_group.py b/tests/test_pagure_flask_api_group.py index 5a87a2e..53b5f75 100644 --- a/tests/test_pagure_flask_api_group.py +++ b/tests/test_pagure_flask_api_group.py @@ -81,14 +81,14 @@ class PagureFlaskApiGroupTests(tests.SimplePagureTest): output = self.app.get('/api/0/groups') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(data['groups'], ['some_group', 'group1', 'rel-eng']) self.assertEqual(sorted(data.keys()), ['groups', 'total_groups']) self.assertEqual(data['total_groups'], 3) output = self.app.get('/api/0/groups?pattern=re') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(data['groups'], ['rel-eng']) self.assertEqual(sorted(data.keys()), ['groups', 'total_groups']) self.assertEqual(data['total_groups'], 1) @@ -116,7 +116,7 @@ class PagureFlaskApiGroupTests(tests.SimplePagureTest): output = self.app.get('/api/0/groups?extended=1') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual( data, { @@ -165,7 +165,7 @@ class PagureFlaskApiGroupTests(tests.SimplePagureTest): "group_type": "user", "name": "some_group" } - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['date_created'] = '1492020239' self.assertDictEqual(data, exp) @@ -188,7 +188,7 @@ class PagureFlaskApiGroupTests(tests.SimplePagureTest): "group_type": "user", "name": "some_group" } - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['date_created'] = '1492020239' self.assertDictEqual(data, exp) @@ -235,7 +235,7 @@ class PagureFlaskApiGroupTests(tests.SimplePagureTest): "name": "some_group" } self.maxDiff = None - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['date_created'] = '1492020239' self.assertDictEqual(data, exp) @@ -246,7 +246,7 @@ class PagureFlaskApiGroupTests(tests.SimplePagureTest): """ output = self.app.get("/api/0/group/some_group3") self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(data['error'], 'Group not found') self.assertEqual(data['error_code'], 'ENOGROUP') @@ -337,7 +337,7 @@ class PagureFlaskApiGroupTests(tests.SimplePagureTest): } ] } - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['date_created'] = '1492020239' projects = [] for p in data['projects']: @@ -349,7 +349,10 @@ class PagureFlaskApiGroupTests(tests.SimplePagureTest): output2 = self.app.get( '/api/0/group/some_group?projects=1&acl=admin', headers=headers) - self.assertEqual(output.data.split('\n'), output2.data.split('\n')) + self.assertListEqual( + output.get_data(as_text=True).split('\n'), + output2.get_data(as_text=True).split('\n') + ) def test_api_view_group_w_projects_and_acl_commit(self): """ @@ -431,7 +434,7 @@ class PagureFlaskApiGroupTests(tests.SimplePagureTest): } ] } - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['date_created'] = '1492020239' projects = [] for p in data['projects']: @@ -521,7 +524,7 @@ class PagureFlaskApiGroupTests(tests.SimplePagureTest): } ] } - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['date_created'] = '1492020239' projects = [] for p in data['projects']: @@ -565,7 +568,7 @@ class PagureFlaskApiGroupTests(tests.SimplePagureTest): "name": "some_group", "projects": [] } - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['date_created'] = '1492020239' self.assertDictEqual(data, exp) @@ -603,7 +606,7 @@ class PagureFlaskApiGroupTests(tests.SimplePagureTest): "name": "some_group", "projects": [] } - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['date_created'] = '1492020239' self.assertDictEqual(data, exp) @@ -639,7 +642,7 @@ class PagureFlaskApiGroupTests(tests.SimplePagureTest): "name": "rel-eng", "projects": [] } - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['date_created'] = '1492020239' self.assertDictEqual(data, exp) diff --git a/tests/test_pagure_flask_api_issue.py b/tests/test_pagure_flask_api_issue.py index 228bae7..539a18f 100644 --- a/tests/test_pagure_flask_api_issue.py +++ b/tests/test_pagure_flask_api_issue.py @@ -8,6 +8,8 @@ """ +from __future__ import unicode_literals + __requires__ = ['SQLAlchemy >= 0.8'] import pkg_resources @@ -308,7 +310,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # Valid token, wrong project output = self.app.post('/api/0/test2/new_issue', headers=headers) self.assertEqual(output.status_code, 401) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(sorted(data.keys()), ['error', 'error_code']) self.assertEqual( pagure.api.APIERROR.EINVALIDTOK.value, data['error']) @@ -318,7 +320,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # No input output = self.app.post('/api/0/test/new_issue', headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -339,7 +341,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/foo/new_issue', data=data, headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -352,7 +354,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/new_issue', data=data, headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -374,7 +376,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/new_issue', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['issue']['date_created'] = '1431414800' data['issue']['last_updated'] = '1431414800' self.assertDictEqual( @@ -394,7 +396,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/new_issue', data=data, headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -423,7 +425,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/new_issue', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['issue']['date_created'] = '1431414800' data['issue']['last_updated'] = '1431414800' @@ -445,7 +447,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/new_issue', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['issue']['date_created'] = '1431414800' data['issue']['last_updated'] = '1431414800' self.assertDictEqual( @@ -466,7 +468,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/new_issue', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['issue']['date_created'] = '1431414800' data['issue']['last_updated'] = '1431414800' self.assertDictEqual( @@ -487,7 +489,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/new_issue', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['issue']['date_created'] = '1431414800' data['issue']['last_updated'] = '1431414800' self.assertDictEqual( @@ -508,7 +510,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/new_issue', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['issue']['date_created'] = '1431414800' data['issue']['last_updated'] = '1431414800' self.assertDictEqual( @@ -528,7 +530,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/new_issue', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['issue']['date_created'] = '1431414800' data['issue']['last_updated'] = '1431414800' self.assertDictEqual( @@ -549,7 +551,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/new_issue', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['issue']['date_created'] = '1431414800' data['issue']['last_updated'] = '1431414800' exp = copy.deepcopy(FULL_ISSUE_LIST[1]) @@ -575,7 +577,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # Valid token, invalid request - No input output = self.app.post('/api/0/test2/new_issue', headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -591,7 +593,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # Another project, still an invalid request - No input output = self.app.post('/api/0/test/new_issue', headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -612,7 +614,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/foo/new_issue', data=data, headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -625,7 +627,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/new_issue', data=data, headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -647,7 +649,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/new_issue', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['issue']['date_created'] = '1431414800' data['issue']['last_updated'] = '1431414800' self.assertDictEqual( @@ -673,7 +675,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/new_issue', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['issue']['date_created'] = '1431414800' data['issue']['last_updated'] = '1431414800' @@ -695,7 +697,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/new_issue', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['issue']['date_created'] = '1431414800' data['issue']['last_updated'] = '1431414800' self.assertDictEqual( @@ -716,7 +718,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/new_issue', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['issue']['date_created'] = '1431414800' data['issue']['last_updated'] = '1431414800' self.assertDictEqual( @@ -737,7 +739,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/new_issue', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['issue']['date_created'] = '1431414800' data['issue']['last_updated'] = '1431414800' self.assertDictEqual( @@ -758,7 +760,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/new_issue', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['issue']['date_created'] = '1431414800' data['issue']['last_updated'] = '1431414800' self.assertDictEqual( @@ -778,7 +780,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/new_issue', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['issue']['date_created'] = '1431414800' data['issue']['last_updated'] = '1431414800' self.assertDictEqual( @@ -799,7 +801,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/new_issue', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['issue']['date_created'] = '1431414800' data['issue']['last_updated'] = '1431414800' self.assertDictEqual( @@ -819,7 +821,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/new_issue', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['issue']['date_created'] = '1431414800' data['issue']['last_updated'] = '1431414800' exp = copy.deepcopy(FULL_ISSUE_LIST[1]) @@ -840,7 +842,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # Invalid repo output = self.app.get('/api/0/foo/issues') self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -852,7 +854,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # List all opened issues output = self.app.get('/api/0/test/issues') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) for idx in range(len(data['issues'])): data['issues'][idx]['date_created'] = '1431414800' data['issues'][idx]['last_updated'] = '1431414800' @@ -893,7 +895,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # Access issues un-authenticated output = self.app.get('/api/0/test/issues') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) for idx in range(len(data['issues'])): data['issues'][idx]['date_created'] = '1431414800' data['issues'][idx]['last_updated'] = '1431414800' @@ -937,7 +939,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # Access issues authenticated but wrong token output = self.app.get('/api/0/test/issues', headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) for idx in range(len(data['issues'])): data['issues'][idx]['date_created'] = '1431414800' data['issues'][idx]['last_updated'] = '1431414800' @@ -967,7 +969,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # Access issues authenticated correctly output = self.app.get('/api/0/test/issues', headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) for idx in range(len(data['issues'])): data['issues'][idx]['date_created'] = '1431414800' data['issues'][idx]['last_updated'] = '1431414800' @@ -1015,7 +1017,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # Access issues authenticated but wrong token output = self.app.get('/api/0/test/issues', headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) for idx in range(len(data['issues'])): data['issues'][idx]['date_created'] = '1431414800' data['issues'][idx]['last_updated'] = '1431414800' @@ -1045,7 +1047,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # Access issues authenticated correctly output = self.app.get('/api/0/test/issues', headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) for idx in range(len(data['issues'])): data['issues'][idx]['date_created'] = '1431414800' data['issues'][idx]['last_updated'] = '1431414800' @@ -1071,7 +1073,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # List closed issue output = self.app.get('/api/0/test/issues?status=Closed', headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['issues'][0]['date_created'] = '1431414800' data['issues'][0]['last_updated'] = '1431414800' self.assertDictEqual( @@ -1096,7 +1098,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # List closed issue output = self.app.get('/api/0/test/issues?status=Invalid', headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -1119,7 +1121,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # List all issues output = self.app.get('/api/0/test/issues?status=All', headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) for idx in range(len(data['issues'])): data['issues'][idx]['last_updated'] = '1431414800' data['issues'][idx]['date_created'] = '1431414800' @@ -1154,7 +1156,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # List issues in reverse order output = self.app.get('/api/0/test/issues?order=asc', headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) for idx in range(len(data['issues'])): data['issues'][idx]['last_updated'] = '1431414800' data['issues'][idx]['date_created'] = '1431414800' @@ -1217,7 +1219,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # List all opened issues output = self.app.get('/api/0/test/issues') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) for idx in range(len(data['issues'])): data['issues'][idx]['date_created'] = '1431414800' data['issues'][idx]['last_updated'] = '1431414800' @@ -1245,7 +1247,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # List all issues of the milestone v1.0 output = self.app.get('/api/0/test/issues?milestones=v1.0') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) for idx in range(len(data['issues'])): data['issues'][idx]['date_created'] = '1431414800' data['issues'][idx]['last_updated'] = '1431414800' @@ -1315,7 +1317,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # List all opened issues output = self.app.get('/api/0/test/issues') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) for idx in range(len(data['issues'])): data['issues'][idx]['date_created'] = '1431414800' data['issues'][idx]['last_updated'] = '1431414800' @@ -1343,7 +1345,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # List all issues of the priority high (ie: 1) output = self.app.get('/api/0/test/issues?priority=high') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) for idx in range(len(data['issues'])): data['issues'][idx]['date_created'] = '1431414800' data['issues'][idx]['last_updated'] = '1431414800' @@ -1368,7 +1370,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.get('/api/0/test/issues?priority=1') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) for idx in range(len(data['issues'])): data['issues'][idx]['date_created'] = '1431414800' data['issues'][idx]['last_updated'] = '1431414800' @@ -1404,7 +1406,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # Try getting issues with an invalid priority output = self.app.get('/api/0/test/issues?priority=foobar') self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -1455,7 +1457,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # List all opened issues output = self.app.get('/api/0/test/issues') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) for idx in range(len(data['issues'])): data['issues'][idx]['date_created'] = '1431414800' data['issues'][idx]['last_updated'] = '1431414800' @@ -1483,7 +1485,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # List all issues with no milestone output = self.app.get('/api/0/test/issues?no_stones=1') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) for idx in range(len(data['issues'])): data['issues'][idx]['date_created'] = '1431414800' data['issues'][idx]['last_updated'] = '1431414800' @@ -1509,7 +1511,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # List all issues with a milestone output = self.app.get('/api/0/test/issues?no_stones=0') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) for idx in range(len(data['issues'])): data['issues'][idx]['date_created'] = '1431414800' data['issues'][idx]['last_updated'] = '1431414800' @@ -1592,7 +1594,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # Invalid repo output = self.app.get('/api/0/foo/issues') self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -1604,7 +1606,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # List all opened issues output = self.app.get('/api/0/test/issues') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) for idx in range(len(data['issues'])): data['issues'][idx]['date_created'] = '1431414800' data['issues'][idx]['last_updated'] = '1431414800' @@ -1633,7 +1635,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # List all opened issues from the start output = self.app.get('/api/0/test/issues?since=%s' % start) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) for idx in range(len(data['issues'])): data['issues'][idx]['date_created'] = '1431414800' data['issues'][idx]['last_updated'] = '1431414800' @@ -1659,7 +1661,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # List all opened issues from the middle output = self.app.get('/api/0/test/issues?since=%s' % middle) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) for idx in range(len(data['issues'])): data['issues'][idx]['date_created'] = '1431414800' data['issues'][idx]['last_updated'] = '1431414800' @@ -1685,7 +1687,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # List all opened issues at the end output = self.app.get('/api/0/test/issues?since=%s' % final) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) for idx in range(len(data['issues'])): data['issues'][idx]['date_created'] = '1431414800' data['issues'][idx]['last_updated'] = '1431414800' @@ -1714,7 +1716,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.get( '/api/0/test/issues?since=%s' % final, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) for idx in range(len(data['issues'])): data['issues'][idx]['last_updated'] = '1431414800' data['issues'][idx]['date_created'] = '1431414800' @@ -1763,7 +1765,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # Invalid repo output = self.app.get('/api/0/foo/issue/1') self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -1775,7 +1777,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # Invalid issue for this repo output = self.app.get('/api/0/test2/issue/1') self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -1787,7 +1789,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # Valid issue output = self.app.get('/api/0/test/issue/1') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['date_created'] = '1431414800' data['last_updated'] = '1431414800' self.assertDictEqual( @@ -1835,7 +1837,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # Access private issue un-authenticated output = self.app.get('/api/0/test/issue/7') self.assertEqual(output.status_code, 403) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -1849,7 +1851,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # Access private issue authenticated but non-existing token output = self.app.get('/api/0/test/issue/6', headers=headers) self.assertEqual(output.status_code, 401) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(sorted(data.keys()), ['error', 'error_code']) self.assertEqual( pagure.api.APIERROR.EINVALIDTOK.value, data['error']) @@ -1872,7 +1874,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # Access private issue authenticated but wrong token output = self.app.get('/api/0/test/issue/7', headers=headers) self.assertEqual(output.status_code, 403) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -1886,7 +1888,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # Access private issue authenticated correctly output = self.app.get('/api/0/test/issue/6', headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['date_created'] = '1431414800' data['last_updated'] = '1431414800' self.assertDictEqual( @@ -1919,7 +1921,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # Access private issue authenticated correctly using the issue's uid output = self.app.get('/api/0/test/issue/aaabbbccc', headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['date_created'] = '1431414800' data['last_updated'] = '1431414800' self.assertDictEqual( @@ -1967,7 +1969,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # Invalid project output = self.app.post('/api/0/foo/issue/1/milestone', headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -1979,7 +1981,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # Valid token, wrong project output = self.app.post('/api/0/test2/issue/1/milestone', headers=headers) self.assertEqual(output.status_code, 401) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(sorted(data.keys()), ['error', 'error_code']) self.assertEqual( pagure.api.APIERROR.EINVALIDTOK.value, data['error']) @@ -1989,7 +1991,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # No issue output = self.app.post('/api/0/test/issue/1/milestone', headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -2025,7 +2027,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/issue/1/milestone', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'No changes'} @@ -2044,7 +2046,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/issue/1/milestone', data=data, headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -2066,7 +2068,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/issue/1/milestone', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -2085,7 +2087,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/issue/1/milestone', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -2108,7 +2110,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/issue/1/milestone', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -2125,7 +2127,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/issue/1/milestone', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -2146,7 +2148,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/foo/issue/1/milestone', data=data, headers=headers) self.assertEqual(output.status_code, 401) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(sorted(data.keys()), ['error', 'error_code']) self.assertEqual( pagure.api.APIERROR.EINVALIDTOK.value, data['error']) @@ -2191,7 +2193,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/issue/1/comment', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'Comment added'} @@ -2213,7 +2215,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # Issue and comment exists output = self.app.get('/api/0/test/issue/1/comment/1') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['date_created'] = '1435821770' data["comment_date"] = "2015-07-02 09:22" data["avatar_url"] = "https://seccdn.libravatar.org/avatar/..." @@ -2239,7 +2241,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # Issue and comment exists, using UID output = self.app.get('/api/0/test/issue/aaabbbccc1/comment/1') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['date_created'] = '1435821770' data["comment_date"] = "2015-07-02 09:22" data["avatar_url"] = "https://seccdn.libravatar.org/avatar/..." @@ -2309,7 +2311,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/issue/1/comment', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'Comment added'} @@ -2333,7 +2335,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): headers = {'Authorization': 'token foo_token_2'} output = self.app.get('/api/0/test/issue/1/comment/1', headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['date_created'] = '1435821770' data["comment_date"] = "2015-07-02 09:22" data["avatar_url"] = "https://seccdn.libravatar.org/avatar/..." @@ -2372,7 +2374,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # Invalid project output = self.app.post('/api/0/foo/issue/1/assign', headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -2384,7 +2386,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # Valid token, wrong project output = self.app.post('/api/0/test2/issue/1/assign', headers=headers) self.assertEqual(output.status_code, 401) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(sorted(data.keys()), ['error', 'error_code']) self.assertEqual( pagure.api.APIERROR.EINVALIDTOK.value, data['error']) @@ -2394,7 +2396,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # No input output = self.app.post('/api/0/test/issue/1/assign', headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -2436,7 +2438,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/issue/1/assign', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'Issue assigned to pingou'} @@ -2446,7 +2448,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/issue/1/assign', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'Assignee reset'} @@ -2461,7 +2463,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/issue/1/assign', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'Nothing to change'} @@ -2475,7 +2477,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/issue/1/assign', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'Issue assigned to pingou'} @@ -2486,7 +2488,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/issue/1/assign', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'Assignee reset'} @@ -2497,7 +2499,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/issue/1/assign', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'Issue assigned to pingou'} @@ -2568,7 +2570,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/foo/issue/1/assign', data=data, headers=headers) self.assertEqual(output.status_code, 401) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(sorted(data.keys()), ['error', 'error_code']) self.assertEqual( pagure.api.APIERROR.EINVALIDTOK.value, data['error']) @@ -2600,7 +2602,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/foo/issue/1/assign', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'Issue assigned to pingou'} @@ -2645,7 +2647,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/issue/1/assign', data={}, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'Assignee reset'} @@ -2658,12 +2660,12 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/issue/1/assign', data=data, headers=headers) self.assertEqual(output.status_code, 403) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { - u'error': u'You are not allowed to view this issue', - u'error_code': u'EISSUENOTALLOWED' + 'error': 'You are not allowed to view this issue', + 'error_code': 'EISSUENOTALLOWED' } ) @@ -2698,7 +2700,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/foo/issue/1/subscribe', headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -2711,7 +2713,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test2/issue/1/subscribe', headers=headers) self.assertEqual(output.status_code, 401) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(sorted(data.keys()), ['error', 'error_code']) self.assertEqual( pagure.api.APIERROR.EINVALIDTOK.value, data['error']) @@ -2722,7 +2724,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/issue/1/subscribe', headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -2759,7 +2761,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/issue/1/subscribe', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'You are no longer watching this issue'} @@ -2769,7 +2771,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/issue/1/subscribe', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'You are no longer watching this issue'} @@ -2787,7 +2789,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/issue/1/subscribe', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'You are now watching this issue'} @@ -2798,7 +2800,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/issue/1/subscribe', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'You are now watching this issue'} @@ -2815,7 +2817,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/issue/1/subscribe', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'You are no longer watching this issue'} @@ -2840,7 +2842,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/foo/issue/1/custom/bugzilla', headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -2853,7 +2855,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test2/issue/1/custom/bugzilla', headers=headers) self.assertEqual(output.status_code, 401) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(sorted(data.keys()), ['error', 'error_code']) self.assertEqual( pagure.api.APIERROR.EINVALIDTOK.value, data['error']) @@ -2864,7 +2866,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/issue/1/custom/bugzilla', headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -2891,7 +2893,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/issue/1/custom/bugzilla', headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -2911,7 +2913,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/issue/1/custom/bugzilla', headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -2933,7 +2935,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/issue/1/custom/bugzilla', headers=headers) self.assertEqual(output.status_code, 401) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(sorted(data.keys()), ['error', 'error_code']) self.assertEqual( pagure.api.APIERROR.EINVALIDTOK.value, data['error']) @@ -2969,7 +2971,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.post( '/api/0/test/issue/1/custom/bugzilla', headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -2987,7 +2989,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): '/api/0/test/issue/1/custom/bugzilla', headers=headers, data={'value': 'foobar'}) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -3007,7 +3009,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): '/api/0/test/issue/1/custom/bugzilla', headers=headers, data={'value': 'https://bugzilla.redhat.com/1234'}) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -3030,7 +3032,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): '/api/0/test/issue/1/custom/bugzilla', headers=headers, data={'value': ''}) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -3065,7 +3067,7 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.get('/api/0/test/issues/history/stats') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(len(data), 1) self.assertEqual(len(data['stats']), 53) @@ -3096,10 +3098,10 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.get('/api/0/user/pingou/issues') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) args = { - u"assignee": True, - u"author": True, + "assignee": True, + "author": True, "milestones": [], "no_stones": None, "order": None, @@ -3121,10 +3123,10 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # Restrict to a certain, fake milestone output = self.app.get('/api/0/user/pingou/issues?milestones=v1.0') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) args = { - u"assignee": True, - u"author": True, + "assignee": True, + "author": True, "milestones": ['v1.0'], "no_stones": None, "order": None, @@ -3146,10 +3148,10 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # Restrict to a certain status output = self.app.get('/api/0/user/pingou/issues?status=closed') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) args = { - u"assignee": True, - u"author": True, + "assignee": True, + "author": True, "milestones": [], "no_stones": None, "order": None, @@ -3171,10 +3173,10 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): # Restrict to a certain status output = self.app.get('/api/0/user/pingou/issues?status=all') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) args = { - u"assignee": True, - u"author": True, + "assignee": True, + "author": True, "milestones": [], "no_stones": None, "order": None, @@ -3215,18 +3217,18 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.get('/api/0/user/foo/issues') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) args = { - u"assignee": True, - u"author": True, - u"milestones": [], - u"no_stones": None, - u"order": None, - u"order_key": None, - u"page": 1, - u"since": None, - u"status": None, - u"tags": [], + "assignee": True, + "author": True, + "milestones": [], + "no_stones": None, + "order": None, + "order_key": None, + "page": 1, + "since": None, + "status": None, + "tags": [], } self.assertEqual(data['args'], args) @@ -3244,25 +3246,25 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.get('/api/0/user/foo/issues?page=0') self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual( data, { - u'error': u'Invalid page requested', - u'error_code': u'ENOCODE' + 'error': 'Invalid page requested', + 'error_code': 'ENOCODE' } ) output = self.app.get('/api/0/user/foo/issues?page=abc') self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual( data, { - u'error': u'Invalid page requested', - u'error_code': u'ENOCODE' + 'error': 'Invalid page requested', + 'error_code': 'ENOCODE' } ) @@ -3273,18 +3275,18 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.get('/api/0/user/foo/issues?assignee=0') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) args = { - u"assignee": False, - u"author": True, - u"milestones": [], - u"no_stones": None, - u"order": None, - u"order_key": None, - u"page": 1, - u"since": None, - u"status": None, - u"tags": [], + "assignee": False, + "author": True, + "milestones": [], + "no_stones": None, + "order": None, + "order_key": None, + "page": 1, + "since": None, + "status": None, + "tags": [], } self.assertEqual(data['args'], args) @@ -3302,10 +3304,10 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): output = self.app.get('/api/0/user/pingou/issues?author=0') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) args = { - u"assignee": True, - u"author": False, + "assignee": True, + "author": False, "milestones": [], "no_stones": None, "order": None, @@ -3326,4 +3328,6 @@ class PagureFlaskApiIssuetests(tests.SimplePagureTest): if __name__ == '__main__': - unittest.main(verbosity=2) + SUITE = unittest.TestLoader().loadTestsFromTestCase( + PagureFlaskApiIssuetests) + unittest.TextTestRunner(verbosity=2).run(SUITE) diff --git a/tests/test_pagure_flask_api_issue_change_status.py b/tests/test_pagure_flask_api_issue_change_status.py index 353368b..e904857 100644 --- a/tests/test_pagure_flask_api_issue_change_status.py +++ b/tests/test_pagure_flask_api_issue_change_status.py @@ -107,7 +107,7 @@ class PagureFlaskApiIssueChangeStatustests(tests.Modeltests): output = self.app.post( '/api/0/foobar/issue/1/status', headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -124,7 +124,7 @@ class PagureFlaskApiIssueChangeStatustests(tests.Modeltests): # Valid token, wrong project output = self.app.post('/api/0/test2/issue/1/status', headers=headers) self.assertEqual(output.status_code, 401) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(pagure.api.APIERROR.EINVALIDTOK.name, data['error_code']) self.assertEqual(pagure.api.APIERROR.EINVALIDTOK.value, data['error']) @@ -137,7 +137,7 @@ class PagureFlaskApiIssueChangeStatustests(tests.Modeltests): # No issue output = self.app.post('/api/0/test/issue/42/status', headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -164,7 +164,7 @@ class PagureFlaskApiIssueChangeStatustests(tests.Modeltests): output = self.app.post( '/api/0/test/issue/1/status', data=data, headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -192,7 +192,7 @@ class PagureFlaskApiIssueChangeStatustests(tests.Modeltests): output = self.app.post( '/api/0/test/issue/1/status', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'No changes'} @@ -217,7 +217,7 @@ class PagureFlaskApiIssueChangeStatustests(tests.Modeltests): output = self.app.post( '/api/0/test/issue/1/status', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, @@ -233,7 +233,7 @@ class PagureFlaskApiIssueChangeStatustests(tests.Modeltests): output = self.app.post( '/api/0/foo/issue/1/status', data=data, headers=headers) self.assertEqual(output.status_code, 401) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(pagure.api.APIERROR.EINVALIDTOK.name, data['error_code']) self.assertEqual(pagure.api.APIERROR.EINVALIDTOK.value, data['error']) @@ -252,7 +252,7 @@ class PagureFlaskApiIssueChangeStatustests(tests.Modeltests): output = self.app.post( '/api/0/test/issue/1/status', data=data, headers=headers) self.assertEqual(output.status_code, 403) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, @@ -276,7 +276,7 @@ class PagureFlaskApiIssueChangeStatustests(tests.Modeltests): output = self.app.post( '/api/0/test/issue/1/status', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, diff --git a/tests/test_pagure_flask_api_issue_comment.py b/tests/test_pagure_flask_api_issue_comment.py index e948368..d471db0 100644 --- a/tests/test_pagure_flask_api_issue_comment.py +++ b/tests/test_pagure_flask_api_issue_comment.py @@ -89,7 +89,7 @@ class PagureFlaskApiIssueCommenttests(tests.Modeltests): # Invalid project output = self.app.post('/api/0/foo/issue/1/comment', headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -106,7 +106,7 @@ class PagureFlaskApiIssueCommenttests(tests.Modeltests): # Valid token, wrong project output = self.app.post('/api/0/test2/issue/1/comment', headers=headers) self.assertEqual(output.status_code, 401) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(pagure.api.APIERROR.EINVALIDTOK.name, data['error_code']) self.assertEqual(pagure.api.APIERROR.EINVALIDTOK.value, data['error']) @@ -118,7 +118,7 @@ class PagureFlaskApiIssueCommenttests(tests.Modeltests): # Invalid issue output = self.app.post('/api/0/test/issue/10/comment', headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -144,7 +144,7 @@ class PagureFlaskApiIssueCommenttests(tests.Modeltests): output = self.app.post( '/api/0/test/issue/1/comment', data=data, headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -172,7 +172,7 @@ class PagureFlaskApiIssueCommenttests(tests.Modeltests): output = self.app.post( '/api/0/test/issue/1/comment', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'Comment added'} @@ -200,7 +200,7 @@ class PagureFlaskApiIssueCommenttests(tests.Modeltests): output = self.app.post( '/api/0/test/issue/2/comment', data=data, headers=headers) self.assertEqual(output.status_code, 401) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(pagure.api.APIERROR.EINVALIDTOK.name, data['error_code']) self.assertEqual(pagure.api.APIERROR.EINVALIDTOK.value, data['error']) @@ -234,7 +234,7 @@ class PagureFlaskApiIssueCommenttests(tests.Modeltests): output = self.app.post( '/api/0/test/issue/2/comment', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'Comment added'} @@ -248,7 +248,7 @@ class PagureFlaskApiIssueCommenttests(tests.Modeltests): # Invalid project output = self.app.post('/api/0/foo/issue/1/comment', headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -265,7 +265,7 @@ class PagureFlaskApiIssueCommenttests(tests.Modeltests): # Valid token, no such issue, project-less token so different failure output = self.app.post('/api/0/test2/issue/1/comment', headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -281,7 +281,7 @@ class PagureFlaskApiIssueCommenttests(tests.Modeltests): # Invalid issue output = self.app.post('/api/0/test/issue/10/comment', headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -307,7 +307,7 @@ class PagureFlaskApiIssueCommenttests(tests.Modeltests): output = self.app.post( '/api/0/test/issue/1/comment', data=data, headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -336,7 +336,7 @@ class PagureFlaskApiIssueCommenttests(tests.Modeltests): output = self.app.post( '/api/0/test/issue/1/comment', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'Comment added'} @@ -364,7 +364,7 @@ class PagureFlaskApiIssueCommenttests(tests.Modeltests): output = self.app.post( '/api/0/test/issue/2/comment', data=data, headers=headers) self.assertEqual(output.status_code, 401) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(pagure.api.APIERROR.EINVALIDTOK.name, data['error_code']) self.assertEqual(pagure.api.APIERROR.EINVALIDTOK.value, data['error']) @@ -398,7 +398,7 @@ class PagureFlaskApiIssueCommenttests(tests.Modeltests): output = self.app.post( '/api/0/test/issue/2/comment', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'Comment added'} diff --git a/tests/test_pagure_flask_api_issue_create.py b/tests/test_pagure_flask_api_issue_create.py index 855bdb7..1b9b0c4 100644 --- a/tests/test_pagure_flask_api_issue_create.py +++ b/tests/test_pagure_flask_api_issue_create.py @@ -8,6 +8,7 @@ """ +from __future__ import unicode_literals import datetime import unittest @@ -77,7 +78,7 @@ class PagureFlaskApiIssueCreatetests(tests.Modeltests): # Create an issue on /test/ where pingou is the main admin output = self.app.post('/api/0/test/new_issue', headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual( pagure.api.APIERROR.EINVALIDREQ.name, data['error_code']) self.assertEqual( @@ -85,8 +86,8 @@ class PagureFlaskApiIssueCreatetests(tests.Modeltests): self.assertEqual( data['errors'], { - u'issue_content': [u'This field is required.'], - u'title': [u'This field is required.'] + 'issue_content': ['This field is required.'], + 'title': ['This field is required.'] } ) @@ -109,7 +110,7 @@ class PagureFlaskApiIssueCreatetests(tests.Modeltests): headers=headers, data=data) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual( pagure.api.APIERROR.EINVALIDREQ.name, data['error_code']) self.assertEqual( @@ -117,7 +118,7 @@ class PagureFlaskApiIssueCreatetests(tests.Modeltests): self.assertEqual( data['errors'], { - u'issue_content': [u'This field is required.'] + 'issue_content': ['This field is required.'] } ) @@ -141,7 +142,7 @@ class PagureFlaskApiIssueCreatetests(tests.Modeltests): headers=headers, data=data) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['issue']['date_created'] = '1431414800' data['issue']['last_updated'] = '1431414800' self.assertEqual( @@ -195,7 +196,7 @@ class PagureFlaskApiIssueCreatetests(tests.Modeltests): headers=headers, data=data) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['issue']['date_created'] = '1431414800' data['issue']['last_updated'] = '1431414800' self.assertEqual( @@ -249,7 +250,7 @@ class PagureFlaskApiIssueCreatetests(tests.Modeltests): headers=headers, data=data) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['issue']['date_created'] = '1431414800' data['issue']['last_updated'] = '1431414800' self.assertEqual( @@ -303,7 +304,7 @@ class PagureFlaskApiIssueCreatetests(tests.Modeltests): headers=headers, data=data) self.assertEqual(output.status_code, 401) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual( pagure.api.APIERROR.EINVALIDTOK.name, data['error_code']) self.assertEqual( diff --git a/tests/test_pagure_flask_api_issue_custom_fields.py b/tests/test_pagure_flask_api_issue_custom_fields.py index d15ccc5..d038166 100644 --- a/tests/test_pagure_flask_api_issue_custom_fields.py +++ b/tests/test_pagure_flask_api_issue_custom_fields.py @@ -59,7 +59,7 @@ class PagureFlaskApiCustomFieldIssuetests(tests.Modeltests): output = self.app.post( '/api/0/test/issue/1/custom', headers=headers, data=payload) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -79,7 +79,7 @@ class PagureFlaskApiCustomFieldIssuetests(tests.Modeltests): output = self.app.post( '/api/0/test/issue/1/custom', headers=headers, data=payload) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -110,15 +110,15 @@ class PagureFlaskApiCustomFieldIssuetests(tests.Modeltests): output = self.app.post( '/api/0/test/issue/1/custom', headers=headers, data=payload) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) - data["messages"].sort() + data = json.loads(output.get_data(as_text=True)) + data["messages"].sort(key=lambda d: list(d.keys())[0]) self.assertDictEqual( data, { - "messages": sorted([ + "messages": [ {"bugzilla": "No changes"}, {"upstream": "Custom field upstream adjusted to True"}, - ]) + ] } ) @@ -134,18 +134,18 @@ class PagureFlaskApiCustomFieldIssuetests(tests.Modeltests): '/api/0/test/issue/1/custom', headers=headers, data=payload) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) - data["messages"].sort() + data = json.loads(output.get_data(as_text=True)) + data["messages"].sort(key=lambda d: list(d.keys())[0]) self.assertDictEqual( data, { - "messages": sorted([ + "messages": [ {"bugzilla": "Custom field bugzilla adjusted to " "https://bugzilla.redhat.com/1234"}, {"reviewstatus": "Custom field reviewstatus adjusted to ack"}, {"upstream": "Custom field upstream adjusted to False (was: True)"}, - ]) + ] } ) @@ -160,17 +160,17 @@ class PagureFlaskApiCustomFieldIssuetests(tests.Modeltests): '/api/0/test/issue/1/custom', headers=headers, data=payload) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) - data["messages"].sort() + data = json.loads(output.get_data(as_text=True)) + data["messages"].sort(key=lambda d: list(d.keys())[0]) self.assertDictEqual( data, { - "messages": sorted([ + "messages": [ {"bugzilla": "Custom field bugzilla reset " "(from https://bugzilla.redhat.com/1234)"}, {"reviewstatus": "Custom field reviewstatus reset (from ack)"}, {"upstream": "Custom field upstream reset (from False)"}, - ]) + ] } ) diff --git a/tests/test_pagure_flask_api_pr_flag.py b/tests/test_pagure_flask_api_pr_flag.py index 3f044b4..9aed6a2 100644 --- a/tests/test_pagure_flask_api_pr_flag.py +++ b/tests/test_pagure_flask_api_pr_flag.py @@ -8,6 +8,8 @@ """ +from __future__ import unicode_literals + import unittest import sys import os @@ -72,7 +74,7 @@ class PagureFlaskApiPRFlagtests(tests.Modeltests): output = self.app.post( '/api/0/foo/pull-request/1/flag', headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -89,7 +91,7 @@ class PagureFlaskApiPRFlagtests(tests.Modeltests): output = self.app.post( '/api/0/test2/pull-request/1/flag', headers=headers) self.assertEqual(output.status_code, 401) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(pagure.api.APIERROR.EINVALIDTOK.name, data['error_code']) self.assertEqual(pagure.api.APIERROR.EINVALIDTOK.value, data['error']) @@ -102,7 +104,7 @@ class PagureFlaskApiPRFlagtests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/10/flag', headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -119,16 +121,16 @@ class PagureFlaskApiPRFlagtests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/1/flag', headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { - u'error': u'Invalid or incomplete input submitted', - u'error_code': u'EINVALIDREQ', - u'errors': { - u'comment': [u'This field is required.'], - u'url': [u'This field is required.'], - u'username': [u'This field is required.'] + 'error': 'Invalid or incomplete input submitted', + 'error_code': 'EINVALIDREQ', + 'errors': { + 'comment': ['This field is required.'], + 'url': ['This field is required.'], + 'username': ['This field is required.'] } } ) @@ -148,7 +150,7 @@ class PagureFlaskApiPRFlagtests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/1/flag', data=data, headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -188,29 +190,29 @@ class PagureFlaskApiPRFlagtests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/1/flag', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) - data['flag']['date_created'] = u'1510742565' + data = json.loads(output.get_data(as_text=True)) + data['flag']['date_created'] = '1510742565' pr_uid = data['flag']['pull_request_uid'] - data['flag']['pull_request_uid'] = u'62b49f00d489452994de5010565fab81' + data['flag']['pull_request_uid'] = '62b49f00d489452994de5010565fab81' self.assertDictEqual( data, { - u'flag': { - u'comment': u'Tests running', - u'date_created': u'1510742565', - u'percent': None, - u'pull_request_uid': u'62b49f00d489452994de5010565fab81', - u'status': u'pending', - u'url': u'http://jenkins.cloud.fedoraproject.org/', - u'user': { - u'default_email': u'bar@pingou.com', - u'emails': [u'bar@pingou.com', u'foo@pingou.com'], - u'fullname': u'PY C', - u'name': u'pingou' + 'flag': { + 'comment': 'Tests running', + 'date_created': '1510742565', + 'percent': None, + 'pull_request_uid': '62b49f00d489452994de5010565fab81', + 'status': 'pending', + 'url': 'http://jenkins.cloud.fedoraproject.org/', + 'user': { + 'default_email': 'bar@pingou.com', + 'emails': ['bar@pingou.com', 'foo@pingou.com'], + 'fullname': 'PY C', + 'name': 'pingou' }, - u'username': u'Jenkins'}, - u'message': u'Flag added', - u'uid': u'jenkins_build_pagure_100+seed' + 'username': 'Jenkins'}, + 'message': 'Flag added', + 'uid': 'jenkins_build_pagure_100+seed' } ) @@ -224,15 +226,15 @@ class PagureFlaskApiPRFlagtests(tests.Modeltests): # Check the notification sent mock_email.assert_called_once_with( - u'\nJenkins flagged the pull-request `test pull-request` ' - u'as pending: Tests running\n\n' - u'https://pagure.org/test/pull-request/1\n', - u'PR #1 - Jenkins: pending', - u'bar@pingou.com', - in_reply_to=u'test-pull-request-' + pr_uid, - mail_id=u'test-pull-request-' + pr_uid + '-1', - project_name=u'test', - user_from=u'Jenkins' + '\nJenkins flagged the pull-request `test pull-request` ' + 'as pending: Tests running\n\n' + 'https://pagure.org/test/pull-request/1\n', + 'PR #1 - Jenkins: pending', + 'bar@pingou.com', + in_reply_to='test-pull-request-' + pr_uid, + mail_id='test-pull-request-' + pr_uid + '-1', + project_name='test', + user_from='Jenkins' ) def test_updating_flag(self): @@ -250,28 +252,28 @@ class PagureFlaskApiPRFlagtests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/1/flag', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) - data['flag']['date_created'] = u'1510742565' - data['flag']['pull_request_uid'] = u'62b49f00d489452994de5010565fab81' + data = json.loads(output.get_data(as_text=True)) + data['flag']['date_created'] = '1510742565' + data['flag']['pull_request_uid'] = '62b49f00d489452994de5010565fab81' self.assertDictEqual( data, { - u'flag': { - u'comment': u'Tests running', - u'date_created': u'1510742565', - u'percent': None, - u'pull_request_uid': u'62b49f00d489452994de5010565fab81', - u'status': u'pending', - u'url': u'http://jenkins.cloud.fedoraproject.org/', - u'user': { - u'default_email': u'bar@pingou.com', - u'emails': [u'bar@pingou.com', u'foo@pingou.com'], - u'fullname': u'PY C', - u'name': u'pingou' + 'flag': { + 'comment': 'Tests running', + 'date_created': '1510742565', + 'percent': None, + 'pull_request_uid': '62b49f00d489452994de5010565fab81', + 'status': 'pending', + 'url': 'http://jenkins.cloud.fedoraproject.org/', + 'user': { + 'default_email': 'bar@pingou.com', + 'emails': ['bar@pingou.com', 'foo@pingou.com'], + 'fullname': 'PY C', + 'name': 'pingou' }, - u'username': u'Jenkins'}, - u'message': u'Flag added', - u'uid': u'jenkins_build_pagure_100+seed' + 'username': 'Jenkins'}, + 'message': 'Flag added', + 'uid': 'jenkins_build_pagure_100+seed' } ) @@ -295,28 +297,28 @@ class PagureFlaskApiPRFlagtests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/1/flag', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) - data['flag']['date_created'] = u'1510742565' - data['flag']['pull_request_uid'] = u'62b49f00d489452994de5010565fab81' + data = json.loads(output.get_data(as_text=True)) + data['flag']['date_created'] = '1510742565' + data['flag']['pull_request_uid'] = '62b49f00d489452994de5010565fab81' self.assertDictEqual( data, { - u'flag': { - u'comment': u'Tests passed', - u'date_created': u'1510742565', - u'percent': 100, - u'pull_request_uid': u'62b49f00d489452994de5010565fab81', - u'status': u'success', - u'url': u'http://jenkins.cloud.fedoraproject.org/', - u'user': { - u'default_email': u'bar@pingou.com', - u'emails': [u'bar@pingou.com', u'foo@pingou.com'], - u'fullname': u'PY C', - u'name': u'pingou' + 'flag': { + 'comment': 'Tests passed', + 'date_created': '1510742565', + 'percent': 100, + 'pull_request_uid': '62b49f00d489452994de5010565fab81', + 'status': 'success', + 'url': 'http://jenkins.cloud.fedoraproject.org/', + 'user': { + 'default_email': 'bar@pingou.com', + 'emails': ['bar@pingou.com', 'foo@pingou.com'], + 'fullname': 'PY C', + 'name': 'pingou' }, - u'username': u'Jenkins'}, - u'message': u'Flag updated', - u'uid': u'jenkins_build_pagure_100+seed' + 'username': 'Jenkins'}, + 'message': 'Flag updated', + 'uid': 'jenkins_build_pagure_100+seed' } ) @@ -345,28 +347,28 @@ class PagureFlaskApiPRFlagtests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/1/flag', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) - data['flag']['date_created'] = u'1510742565' - data['flag']['pull_request_uid'] = u'62b49f00d489452994de5010565fab81' + data = json.loads(output.get_data(as_text=True)) + data['flag']['date_created'] = '1510742565' + data['flag']['pull_request_uid'] = '62b49f00d489452994de5010565fab81' self.assertDictEqual( data, { - u'flag': { - u'comment': u'Tests passed', - u'date_created': u'1510742565', - u'percent': 100, - u'pull_request_uid': u'62b49f00d489452994de5010565fab81', - u'status': u'success', - u'url': u'http://jenkins.cloud.fedoraproject.org/', - u'user': { - u'default_email': u'bar@pingou.com', - u'emails': [u'bar@pingou.com', u'foo@pingou.com'], - u'fullname': u'PY C', - u'name': u'pingou' + 'flag': { + 'comment': 'Tests passed', + 'date_created': '1510742565', + 'percent': 100, + 'pull_request_uid': '62b49f00d489452994de5010565fab81', + 'status': 'success', + 'url': 'http://jenkins.cloud.fedoraproject.org/', + 'user': { + 'default_email': 'bar@pingou.com', + 'emails': ['bar@pingou.com', 'foo@pingou.com'], + 'fullname': 'PY C', + 'name': 'pingou' }, - u'username': u'Jenkins'}, - u'message': u'Flag added', - u'uid': u'jenkins_build_pagure_100+seed' + 'username': 'Jenkins'}, + 'message': 'Flag added', + 'uid': 'jenkins_build_pagure_100+seed' } ) @@ -388,31 +390,31 @@ class PagureFlaskApiPRFlagtests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/1/flag', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) - data['flag']['date_created'] = u'1510742565' - data['flag']['pull_request_uid'] = u'62b49f00d489452994de5010565fab81' + data = json.loads(output.get_data(as_text=True)) + data['flag']['date_created'] = '1510742565' + data['flag']['pull_request_uid'] = '62b49f00d489452994de5010565fab81' self.assertNotEqual( data['uid'], 'jenkins_build_pagure_100+seed') data['uid'] = 'jenkins_build_pagure_100+seed' self.assertDictEqual( data, { - u'flag': { - u'comment': u'Tests running again', - u'date_created': u'1510742565', - u'percent': None, - u'pull_request_uid': u'62b49f00d489452994de5010565fab81', - u'status': u'pending', - u'url': u'http://jenkins.cloud.fedoraproject.org/', - u'user': { - u'default_email': u'bar@pingou.com', - u'emails': [u'bar@pingou.com', u'foo@pingou.com'], - u'fullname': u'PY C', - u'name': u'pingou' + 'flag': { + 'comment': 'Tests running again', + 'date_created': '1510742565', + 'percent': None, + 'pull_request_uid': '62b49f00d489452994de5010565fab81', + 'status': 'pending', + 'url': 'http://jenkins.cloud.fedoraproject.org/', + 'user': { + 'default_email': 'bar@pingou.com', + 'emails': ['bar@pingou.com', 'foo@pingou.com'], + 'fullname': 'PY C', + 'name': 'pingou' }, - u'username': u'Jenkins'}, - u'message': u'Flag added', - u'uid': u'jenkins_build_pagure_100+seed' + 'username': 'Jenkins'}, + 'message': 'Flag added', + 'uid': 'jenkins_build_pagure_100+seed' } ) @@ -453,7 +455,7 @@ class PagureFlaskApiPRFlagtests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/1/flag', data=send_data, headers=headers) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(output.status_code, 200) self.assertEqual(data['flag']['status'], 'pend!') @@ -461,7 +463,7 @@ class PagureFlaskApiPRFlagtests(tests.Modeltests): send_data['percent'] = 50 output = self.app.post( '/api/0/test/pull-request/1/flag', data=send_data, headers=headers) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(output.status_code, 200) self.assertEqual(data['flag']['status'], 'succeed!') @@ -469,7 +471,7 @@ class PagureFlaskApiPRFlagtests(tests.Modeltests): send_data['percent'] = 0 output = self.app.post( '/api/0/test/pull-request/1/flag', data=send_data, headers=headers) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(output.status_code, 200) self.assertEqual(data['flag']['status'], 'fail!') @@ -477,7 +479,7 @@ class PagureFlaskApiPRFlagtests(tests.Modeltests): send_data['status'] = 'what?' output = self.app.post( '/api/0/test/pull-request/1/flag', data=send_data, headers=headers) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(output.status_code, 200) self.assertEqual(data['flag']['status'], 'what?') @@ -485,7 +487,7 @@ class PagureFlaskApiPRFlagtests(tests.Modeltests): send_data['status'] = 'nooo.....' output = self.app.post( '/api/0/test/pull-request/1/flag', data=send_data, headers=headers) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(output.status_code, 400) self.assertDictEqual( data, @@ -546,7 +548,7 @@ class PagureFlaskApiPRFlagUserTokentests(tests.Modeltests): output = self.app.post( '/api/0/foo/pull-request/1/flag', headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -562,7 +564,7 @@ class PagureFlaskApiPRFlagUserTokentests(tests.Modeltests): output = self.app.post( '/api/0/test2/pull-request/1/flag', headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -579,16 +581,16 @@ class PagureFlaskApiPRFlagUserTokentests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/1/flag', headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { - u'error': u'Invalid or incomplete input submitted', - u'error_code': u'EINVALIDREQ', - u'errors': { - u'comment': [u'This field is required.'], - u'url': [u'This field is required.'], - u'username': [u'This field is required.'] + 'error': 'Invalid or incomplete input submitted', + 'error_code': 'EINVALIDREQ', + 'errors': { + 'comment': ['This field is required.'], + 'url': ['This field is required.'], + 'username': ['This field is required.'] } } ) @@ -609,7 +611,7 @@ class PagureFlaskApiPRFlagUserTokentests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/1/flag', data=data, headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -642,7 +644,7 @@ class PagureFlaskApiPRFlagUserTokentests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/1/flag', data=data, headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -678,28 +680,28 @@ class PagureFlaskApiPRFlagUserTokentests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/1/flag', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) - data['flag']['date_created'] = u'1510742565' - data['flag']['pull_request_uid'] = u'62b49f00d489452994de5010565fab81' + data = json.loads(output.get_data(as_text=True)) + data['flag']['date_created'] = '1510742565' + data['flag']['pull_request_uid'] = '62b49f00d489452994de5010565fab81' self.assertDictEqual( data, { - u'flag': { - u'comment': u'Tests failed', - u'date_created': u'1510742565', - u'percent': 0, - u'pull_request_uid': u'62b49f00d489452994de5010565fab81', - u'status': u'failure', - u'url': u'http://jenkins.cloud.fedoraproject.org/', - u'user': { - u'default_email': u'bar@pingou.com', - u'emails': [u'bar@pingou.com', u'foo@pingou.com'], - u'fullname': u'PY C', - u'name': u'pingou' + 'flag': { + 'comment': 'Tests failed', + 'date_created': '1510742565', + 'percent': 0, + 'pull_request_uid': '62b49f00d489452994de5010565fab81', + 'status': 'failure', + 'url': 'http://jenkins.cloud.fedoraproject.org/', + 'user': { + 'default_email': 'bar@pingou.com', + 'emails': ['bar@pingou.com', 'foo@pingou.com'], + 'fullname': 'PY C', + 'name': 'pingou' }, - u'username': u'Jenkins'}, - u'message': u'Flag added', - u'uid': u'jenkins_build_pagure_100+seed' + 'username': 'Jenkins'}, + 'message': 'Flag added', + 'uid': 'jenkins_build_pagure_100+seed' } ) @@ -731,28 +733,28 @@ class PagureFlaskApiPRFlagUserTokentests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/1/flag', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) - data['flag']['date_created'] = u'1510742565' - data['flag']['pull_request_uid'] = u'62b49f00d489452994de5010565fab81' + data = json.loads(output.get_data(as_text=True)) + data['flag']['date_created'] = '1510742565' + data['flag']['pull_request_uid'] = '62b49f00d489452994de5010565fab81' self.assertDictEqual( data, { - u'flag': { - u'comment': u'Tests failed', - u'date_created': u'1510742565', - u'percent': None, - u'pull_request_uid': u'62b49f00d489452994de5010565fab81', - u'status': u'failure', - u'url': u'http://jenkins.cloud.fedoraproject.org/', - u'user': { - u'default_email': u'bar@pingou.com', - u'emails': [u'bar@pingou.com', u'foo@pingou.com'], - u'fullname': u'PY C', - u'name': u'pingou' + 'flag': { + 'comment': 'Tests failed', + 'date_created': '1510742565', + 'percent': None, + 'pull_request_uid': '62b49f00d489452994de5010565fab81', + 'status': 'failure', + 'url': 'http://jenkins.cloud.fedoraproject.org/', + 'user': { + 'default_email': 'bar@pingou.com', + 'emails': ['bar@pingou.com', 'foo@pingou.com'], + 'fullname': 'PY C', + 'name': 'pingou' }, - u'username': u'Jenkins'}, - u'message': u'Flag added', - u'uid': u'jenkins_build_pagure_100+seed' + 'username': 'Jenkins'}, + 'message': 'Flag added', + 'uid': 'jenkins_build_pagure_100+seed' } ) @@ -777,28 +779,28 @@ class PagureFlaskApiPRFlagUserTokentests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/1/flag', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) - data['flag']['date_created'] = u'1510742565' - data['flag']['pull_request_uid'] = u'62b49f00d489452994de5010565fab81' + data = json.loads(output.get_data(as_text=True)) + data['flag']['date_created'] = '1510742565' + data['flag']['pull_request_uid'] = '62b49f00d489452994de5010565fab81' self.assertDictEqual( data, { - u'flag': { - u'comment': u'Tests passed', - u'date_created': u'1510742565', - u'percent': 100, - u'pull_request_uid': u'62b49f00d489452994de5010565fab81', - u'status': u'success', - u'url': u'http://jenkins.cloud.fedoraproject.org/', - u'user': { - u'default_email': u'bar@pingou.com', - u'emails': [u'bar@pingou.com', u'foo@pingou.com'], - u'fullname': u'PY C', - u'name': u'pingou' + 'flag': { + 'comment': 'Tests passed', + 'date_created': '1510742565', + 'percent': 100, + 'pull_request_uid': '62b49f00d489452994de5010565fab81', + 'status': 'success', + 'url': 'http://jenkins.cloud.fedoraproject.org/', + 'user': { + 'default_email': 'bar@pingou.com', + 'emails': ['bar@pingou.com', 'foo@pingou.com'], + 'fullname': 'PY C', + 'name': 'pingou' }, - u'username': u'Jenkins'}, - u'message': u'Flag updated', - u'uid': u'jenkins_build_pagure_100+seed' + 'username': 'Jenkins'}, + 'message': 'Flag updated', + 'uid': 'jenkins_build_pagure_100+seed' } ) diff --git a/tests/test_pagure_flask_api_project.py b/tests/test_pagure_flask_api_project.py index 52ffa84..875b490 100644 --- a/tests/test_pagure_flask_api_project.py +++ b/tests/test_pagure_flask_api_project.py @@ -8,6 +8,8 @@ """ +from __future__ import unicode_literals + __requires__ = ['SQLAlchemy >= 0.8'] import pkg_resources @@ -94,7 +96,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): # Check tags output = self.app.get('/api/0/test/git/tags') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'tags': ['0.0.1'], 'total_tags': 1} @@ -103,13 +105,13 @@ class PagureFlaskApiProjecttests(tests.Modeltests): # Check tags with commits output = self.app.get('/api/0/test/git/tags?with_commits=True') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['tags']['0.0.1'] = 'bb8fa2aa199da08d6085e1c9badc3d83d188d38c' self.assertDictEqual( data, { - u'tags': {u'0.0.1': u'bb8fa2aa199da08d6085e1c9badc3d83d188d38c'}, - u'total_tags': 1} + 'tags': {'0.0.1': 'bb8fa2aa199da08d6085e1c9badc3d83d188d38c'}, + 'total_tags': 1} ) shutil.rmtree(newpath) @@ -136,7 +138,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): # Verify the API data self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -157,7 +159,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): # Check that no branches show up on the API output = self.app.get('/api/0/test/git/branches') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -187,7 +189,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): }, 'total_urls': 2 } - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual(data, expected_rv) def test_api_git_urls_no_project(self): @@ -200,7 +202,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): 'error': 'Project not found', 'error_code': 'ENOPROJECT' } - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual(data, expected_rv) @patch.dict('pagure.config.config', {'PRIVATE_PROJECTS': True}) @@ -227,7 +229,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): }, 'total_urls': 2 } - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual(data, expected_rv) @patch.dict('pagure.config.config', {'PRIVATE_PROJECTS': True}) @@ -247,7 +249,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): 'error': 'Project not found', 'error_code': 'ENOPROJECT' } - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual(data, expected_rv) def test_api_projects_pattern(self): @@ -256,7 +258,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.get('/api/0/projects?pattern=test') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['projects'][0]['date_created'] = "1436527638" data['projects'][0]['date_modified'] = "1436527638" expected_data = { @@ -319,7 +321,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.get('/api/0/projects?pattern=te*&short=1') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) expected_data = { "args": { "fork": None, @@ -376,7 +378,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): # Check the API output = self.app.get('/api/0/projects?tags=inf') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -395,7 +397,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): ) output = self.app.get('/api/0/projects?tags=infra') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['projects'][0]['date_created'] = "1436527638" data['projects'][0]['date_modified'] = "1436527638" expected_data = { @@ -448,7 +450,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.get('/api/0/projects?owner=pingou') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['projects'][0]['date_created'] = "1436527638" data['projects'][0]['date_modified'] = "1436527638" data['projects'][1]['date_created'] = "1436527638" @@ -581,7 +583,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.get('/api/0/projects?username=pingou') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['projects'][0]['date_created'] = "1436527638" data['projects'][0]['date_modified'] = "1436527638" data['projects'][1]['date_created'] = "1436527638" @@ -711,7 +713,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.get('/api/0/projects?username=pingou&tags=infra') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['projects'][0]['date_created'] = "1436527638" data['projects'][0]['date_modified'] = "1436527638" expected_data = { @@ -764,7 +766,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.get('/api/0/projects?namespace=somenamespace') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['projects'][0]['date_created'] = "1436527638" data['projects'][0]['date_modified'] = "1436527638" expected_data = { @@ -841,7 +843,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): # Non-existing project output = self.app.get('/api/0/random') self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'error_code': 'ENOPROJECT', 'error': 'Project not found'} @@ -850,7 +852,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): # Existing project output = self.app.get('/api/0/test') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['date_created'] = "1436527638" data['date_modified'] = "1436527638" expected_data ={ @@ -939,7 +941,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): # Existing project output = self.app.get('/api/0/test?expand_group=1') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['date_created'] = "1436527638" data['date_modified'] = "1436527638" expected_data ={ @@ -1007,7 +1009,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): # Existing project output = self.app.get('/api/0/test?expand_group=0') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['date_created'] = "1436527638" data['date_modified'] = "1436527638" expected_data ={ @@ -1053,7 +1055,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.get('/api/0/projects?page=1') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) for i in range(3): data['projects'][i]['date_created'] = "1436527638" data['projects'][i]['date_modified'] = "1436527638" @@ -1203,7 +1205,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.get('/api/0/projects?page=2&per_page=2') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['projects'][0]['date_created'] = "1436527638" data['projects'][0]['date_modified'] = "1436527638" expected_data = { @@ -1301,7 +1303,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.get('/api/0/projects?page=1&per_page=0') self.assertEqual(output.status_code, 400) - error = json.loads(output.data) + error = json.loads(output.get_data(as_text=True)) self.assertEqual( error['error'], 'The per_page value must be between 1 and 100') @@ -1312,7 +1314,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.get('/api/0/projects?page=1&per_page=101') self.assertEqual(output.status_code, 400) - error = json.loads(output.data) + error = json.loads(output.get_data(as_text=True)) self.assertEqual( error['error'], 'The per_page value must be between 1 and 100') @@ -1331,7 +1333,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.get('/api/0/projects?page=99999') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertURLEqual( data["pagination"].pop("first"), "http://localhost/api/0/projects?per_page=20&page=1", @@ -1384,7 +1386,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): '/api/0/test', headers=headers, data={'main_admin': 'foo'}) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['date_created'] = '1496338274' data['date_modified'] = '1496338274' expected_output = { @@ -1447,7 +1449,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): '/api/0/test', headers=headers, data={'main_admin': 'foo', 'retain_access': True}) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['date_created'] = '1496338274' data['date_modified'] = '1496338274' expected_output = { @@ -1521,7 +1523,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): '/api/0/test', headers=headers, data={'main_admin': 'foo', 'retain_access': True}) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['date_created'] = '1496338274' data['date_modified'] = '1496338274' expected_output = { @@ -1586,7 +1588,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): '/api/0/test', headers=headers, data=json.dumps({'main_admin': 'foo'})) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['date_created'] = '1496338274' data['date_modified'] = '1496338274' expected_output = { @@ -1650,7 +1652,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): '/api/0/test', headers=headers, data={'main_admin': 'foo'}) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['date_created'] = '1496338274' data['date_modified'] = '1496338274' expected_output = { @@ -1726,7 +1728,8 @@ class PagureFlaskApiProjecttests(tests.Modeltests): 'project'), 'error_code': 'ENOTMAINADMIN' } - self.assertEqual(json.loads(output.data), expected_error) + self.assertEqual( + json.loads(output.get_data(as_text=True)), expected_error) def test_api_modify_project_not_admin(self): """ Test the api_modify_project method of the flask api when the @@ -1748,7 +1751,8 @@ class PagureFlaskApiProjecttests(tests.Modeltests): 'error': 'You are not allowed to modify this project', 'error_code': 'EMODIFYPROJECTNOTALLOWED' } - self.assertEqual(json.loads(output.data), expected_error) + self.assertEqual( + json.loads(output.get_data(as_text=True)), expected_error) def test_api_modify_project_invalid_request(self): """ Test the api_modify_project method of the flask api when the @@ -1770,7 +1774,8 @@ class PagureFlaskApiProjecttests(tests.Modeltests): 'error': 'Invalid or incomplete input submitted', 'error_code': 'EINVALIDREQ' } - self.assertEqual(json.loads(output.data), expected_error) + self.assertEqual( + json.loads(output.get_data(as_text=True)), expected_error) def test_api_modify_project_invalid_keys(self): """ Test the api_modify_project method of the flask api when the @@ -1792,7 +1797,8 @@ class PagureFlaskApiProjecttests(tests.Modeltests): 'error': 'Invalid or incomplete input submitted', 'error_code': 'EINVALIDREQ' } - self.assertEqual(json.loads(output.data), expected_error) + self.assertEqual( + json.loads(output.get_data(as_text=True)), expected_error) def test_api_modify_project_invalid_new_main_admin(self): """ Test the api_modify_project method of the flask api when the @@ -1815,7 +1821,8 @@ class PagureFlaskApiProjecttests(tests.Modeltests): 'error': 'No such user found', 'error_code': 'ENOUSER' } - self.assertEqual(json.loads(output.data), expected_error) + self.assertEqual( + json.loads(output.get_data(as_text=True)), expected_error) def test_api_project_watchers(self): """ Test the api_project_watchers method of the flask api. """ @@ -1831,14 +1838,14 @@ class PagureFlaskApiProjecttests(tests.Modeltests): ] } } - self.assertDictEqual(json.loads(output.data), expected_data) + self.assertDictEqual(json.loads(output.get_data(as_text=True)), expected_data) user = tests.FakeUser(username='pingou') with tests.user_set(self.app.application, user): # Non-existing project output = self.app.get('/api/0/random/watchers') self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'error_code': 'ENOPROJECT', 'error': 'Project not found'} @@ -1855,7 +1862,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): ] } } - self.assertDictEqual(json.loads(output.data), expected_data) + self.assertDictEqual(json.loads(output.get_data(as_text=True)), expected_data) project = pagure.lib.get_authorized_project(self.session, 'test') @@ -1874,7 +1881,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): ] } } - self.assertDictEqual(json.loads(output.data), expected_data) + self.assertDictEqual(json.loads(output.get_data(as_text=True)), expected_data) # The owner is watching issues explicitly pagure.lib.update_watch_status( @@ -1890,7 +1897,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): ] } } - self.assertDictEqual(json.loads(output.data), expected_data) + self.assertDictEqual(json.loads(output.get_data(as_text=True)), expected_data) # The owner is watching commits explicitly pagure.lib.update_watch_status( @@ -1906,7 +1913,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): ] } } - self.assertDictEqual(json.loads(output.data), expected_data) + self.assertDictEqual(json.loads(output.get_data(as_text=True)), expected_data) # The owner is watching commits explicitly and foo is watching # issues implicitly @@ -1929,7 +1936,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): "pingou": ["commits"] } } - self.assertDictEqual(json.loads(output.data), expected_data) + self.assertDictEqual(json.loads(output.get_data(as_text=True)), expected_data) # The owner and foo are watching issues implicitly pagure.lib.update_watch_status( @@ -1945,7 +1952,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): "pingou": ["issues"] } } - self.assertDictEqual(json.loads(output.data), expected_data) + self.assertDictEqual(json.loads(output.get_data(as_text=True)), expected_data) # The owner and foo through group membership are watching issues # implicitly @@ -1995,7 +2002,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): "pingou": ["issues"] } } - self.assertDictEqual(json.loads(output.data), expected_data) + self.assertDictEqual(json.loads(output.get_data(as_text=True)), expected_data) # The owner is watching issues implicitly and foo will be watching # commits explicitly but is in a group with commit access @@ -2015,7 +2022,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): "pingou": ["issues"] } } - self.assertDictEqual(json.loads(output.data), expected_data) + self.assertDictEqual(json.loads(output.get_data(as_text=True)), expected_data) def test_api_new_project(self): """ Test the api_new_project method of the flask api. """ @@ -2030,7 +2037,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): # Invalid token output = self.app.post('/api/0/new', headers=headers) self.assertEqual(output.status_code, 401) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(sorted(data.keys()), ['error', 'error_code']) self.assertEqual( pagure.api.APIERROR.EINVALIDTOK.value, data['error']) @@ -2042,7 +2049,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): # No input output = self.app.post('/api/0/new', headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -2063,7 +2070,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.post( '/api/0/new', data=data, headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -2082,7 +2089,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.post( '/api/0/new/', data=data, headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -2100,7 +2107,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.post( '/api/0/new/', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'Project "test_42" created'} @@ -2128,7 +2135,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.post( '/api/0/new/', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'Project "pingou/test" created'} @@ -2146,7 +2153,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): # Invalid token output = self.app.post('/api/0/new', headers=headers) self.assertEqual(output.status_code, 401) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(sorted(data.keys()), ['error', 'error_code']) self.assertEqual( pagure.api.APIERROR.EINVALIDTOK.value, data['error']) @@ -2158,7 +2165,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): # No input output = self.app.post('/api/0/new', headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -2179,7 +2186,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.post( '/api/0/new', data=data, headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -2198,7 +2205,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.post( '/api/0/new/', data=data, headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -2216,7 +2223,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.post( '/api/0/new/', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'Project "test_42" created'} @@ -2234,7 +2241,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.post( '/api/0/new/', data=data, headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -2258,7 +2265,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.post( '/api/0/new/', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'Project "rpms/test_42" created'} @@ -2284,7 +2291,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.post( '/api/0/new/', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'Project "pingou/testproject" created'} @@ -2302,7 +2309,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.post( '/api/0/new/', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'Project "testns/testproject2" created'} @@ -2322,7 +2329,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): # Invalid token output = self.app.post('/api/0/fork', headers=headers) self.assertEqual(output.status_code, 401) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(sorted(data.keys()), ['error', 'error_code']) self.assertEqual( pagure.api.APIERROR.EINVALIDTOK.value, data['error']) @@ -2334,7 +2341,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): # No input output = self.app.post('/api/0/fork', headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -2352,7 +2359,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.post( '/api/0/fork', data=data, headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -2370,7 +2377,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.post( '/api/0/fork/', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -2386,7 +2393,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.post( '/api/0/fork/', data=data, headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -2404,7 +2411,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.post( '/api/0/fork/', data=data, headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -2422,7 +2429,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.post( '/api/0/fork/', data=data, headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -2445,7 +2452,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): # Invalid token output = self.app.post('/api/0/fork', headers=headers) self.assertEqual(output.status_code, 401) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(sorted(data.keys()), ['error', 'error_code']) self.assertEqual( pagure.api.APIERROR.EINVALIDTOK.value, data['error']) @@ -2457,7 +2464,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): # No input output = self.app.post('/api/0/fork', headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -2475,7 +2482,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.post( '/api/0/fork', data=data, headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -2493,7 +2500,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.post( '/api/0/fork/', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -2509,7 +2516,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.post( '/api/0/fork/', data=data, headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -2527,7 +2534,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.post( '/api/0/fork/', data=data, headers=headers) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -2545,7 +2552,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.post( '/api/0/fork/', data=data, headers=headers) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, { @@ -2568,7 +2575,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): '/api/0/test/git/generateacls', headers=headers, data={'wait': False}) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) expected_output = { 'message': 'Project ACL generation queued', 'taskid': 'abc-1234' @@ -2592,7 +2599,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): '/api/0/test/git/generateacls', headers=headers, data=json.dumps({'wait': False})) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) expected_output = { 'message': 'Project ACL generation queued', 'taskid': 'abc-1234' @@ -2620,7 +2627,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): '/api/0/test/git/generateacls', headers=headers, data={'wait': True}) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) expected_output = { 'message': 'Project ACLs generated', } @@ -2644,7 +2651,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): '/api/0/test12345123/git/generateacls', headers=headers, data={'wait': False}) self.assertEqual(output.status_code, 404) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) expected_output = { 'error_code': 'ENOPROJECT', 'error': 'Project not found' @@ -2665,7 +2672,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.post('/api/0/test/git/branch', headers=headers, data=args) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) expected_output = { 'message': 'Project branch was created', } @@ -2690,7 +2697,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.post('/api/0/test/git/branch', headers=headers, data=json.dumps(args)) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) expected_output = { 'message': 'Project branch was created', } @@ -2717,7 +2724,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.post('/api/0/test/git/branch', headers=headers, data=args) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) expected_output = { 'message': 'Project branch was created', } @@ -2739,7 +2746,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.post('/api/0/test/git/branch', headers=headers, data=args) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) expected_output = { 'error': 'The branch "master" already exists', 'error_code': 'ENOCODE' @@ -2763,7 +2770,7 @@ class PagureFlaskApiProjecttests(tests.Modeltests): output = self.app.post('/api/0/test/git/branch', headers=headers, data=args) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) expected_output = { 'message': 'Project branch was created', } @@ -2804,7 +2811,7 @@ class PagureFlaskApiProjectFlagtests(tests.Modeltests): '/api/0/test/c/%s/flag' % commit.oid.hex, headers=headers, data=data) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) expected_output = { "error": "Invalid or incomplete input submitted", "error_code": "EINVALIDREQ", @@ -2833,7 +2840,7 @@ class PagureFlaskApiProjectFlagtests(tests.Modeltests): '/api/0/test/c/%s/flag' % commit.oid.hex, headers=headers, data=data) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) expected_output = { "error": "Invalid or incomplete input submitted", "error_code": "EINVALIDREQ", @@ -2862,7 +2869,7 @@ class PagureFlaskApiProjectFlagtests(tests.Modeltests): '/api/0/test/c/%s/flag' % commit.oid.hex, headers=headers, data=data) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) expected_output = { "error": "Invalid or incomplete input submitted", "error_code": "EINVALIDREQ", @@ -2891,7 +2898,7 @@ class PagureFlaskApiProjectFlagtests(tests.Modeltests): '/api/0/test/c/%s/flag' % commit.oid.hex, headers=headers, data=data) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) expected_output = { "error": "Invalid or incomplete input submitted", "error_code": "EINVALIDREQ", @@ -2920,7 +2927,7 @@ class PagureFlaskApiProjectFlagtests(tests.Modeltests): '/api/0/test/c/%s/flag' % commit.oid.hex, headers=headers, data=data) self.assertEqual(output.status_code, 401) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(sorted(data.keys()), ['error', 'error_code']) self.assertEqual( pagure.api.APIERROR.EINVALIDTOK.value, data['error']) @@ -2944,13 +2951,13 @@ class PagureFlaskApiProjectFlagtests(tests.Modeltests): '/api/0/test/c/%s/flag' % commit.oid.hex, headers=headers, data=data) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual( data, { - u'errors': {u'status': [u'Not a valid choice']}, - u'error_code': u'EINVALIDREQ', - u'error': u'Invalid or incomplete input submitted' + 'errors': {'status': ['Not a valid choice']}, + 'error_code': 'EINVALIDREQ', + 'error': 'Invalid or incomplete input submitted' } ) @@ -2972,26 +2979,26 @@ class PagureFlaskApiProjectFlagtests(tests.Modeltests): '/api/0/test/c/%s/flag' % commit.oid.hex, headers=headers, data=data) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) - data['flag']['date_created'] = u'1510742565' - data['flag']['commit_hash'] = u'62b49f00d489452994de5010565fab81' + data = json.loads(output.get_data(as_text=True)) + data['flag']['date_created'] = '1510742565' + data['flag']['commit_hash'] = '62b49f00d489452994de5010565fab81' expected_output = { - u'flag': { - u'comment': u'Tests passed', - u'commit_hash': u'62b49f00d489452994de5010565fab81', - u'date_created': u'1510742565', - u'percent': 100, - u'status': 'success', - u'url': u'http://jenkins.cloud.fedoraproject.org/', - u'user': { - u'default_email': u'bar@pingou.com', - u'emails': [u'bar@pingou.com', u'foo@pingou.com'], - u'fullname': u'PY C', - u'name': u'pingou'}, - u'username': u'Jenkins' + 'flag': { + 'comment': 'Tests passed', + 'commit_hash': '62b49f00d489452994de5010565fab81', + 'date_created': '1510742565', + 'percent': 100, + 'status': 'success', + 'url': 'http://jenkins.cloud.fedoraproject.org/', + 'user': { + 'default_email': 'bar@pingou.com', + 'emails': ['bar@pingou.com', 'foo@pingou.com'], + 'fullname': 'PY C', + 'name': 'pingou'}, + 'username': 'Jenkins' }, - u'message': u'Flag added', - u'uid': u'jenkins_build_pagure_100+seed' + 'message': 'Flag added', + 'uid': 'jenkins_build_pagure_100+seed' } self.assertEqual(data, expected_output) @@ -3017,30 +3024,30 @@ class PagureFlaskApiProjectFlagtests(tests.Modeltests): '/api/0/test/c/%s/flag' % commit.oid.hex, headers=headers, data=data) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertNotEqual( data['uid'], - u'jenkins_build_pagure_100+seed' + 'jenkins_build_pagure_100+seed' ) - data['flag']['date_created'] = u'1510742565' + data['flag']['date_created'] = '1510742565' data['uid'] = 'b1de8f80defd4a81afe2e09f39678087' expected_output = { - u'flag': { - u'comment': u'Tests passed', - u'commit_hash': commit.oid.hex, - u'date_created': u'1510742565', - u'percent': 100, - u'status': 'success', - u'url': u'http://jenkins.cloud.fedoraproject.org/', - u'user': { - u'default_email': u'bar@pingou.com', - u'emails': [u'bar@pingou.com', u'foo@pingou.com'], - u'fullname': u'PY C', - u'name': u'pingou'}, - u'username': u'Jenkins' + 'flag': { + 'comment': 'Tests passed', + 'commit_hash': commit.oid.hex, + 'date_created': '1510742565', + 'percent': 100, + 'status': 'success', + 'url': 'http://jenkins.cloud.fedoraproject.org/', + 'user': { + 'default_email': 'bar@pingou.com', + 'emails': ['bar@pingou.com', 'foo@pingou.com'], + 'fullname': 'PY C', + 'name': 'pingou'}, + 'username': 'Jenkins' }, - u'message': u'Flag added', - u'uid': u'b1de8f80defd4a81afe2e09f39678087' + 'message': 'Flag added', + 'uid': 'b1de8f80defd4a81afe2e09f39678087' } self.assertEqual(data, expected_output) @@ -3073,44 +3080,44 @@ class PagureFlaskApiProjectFlagtests(tests.Modeltests): '/api/0/test/c/%s/flag' % commit.oid.hex, headers=headers, data=data) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertNotEqual( data['uid'], - u'jenkins_build_pagure_100+seed' + 'jenkins_build_pagure_100+seed' ) - data['flag']['date_created'] = u'1510742565' + data['flag']['date_created'] = '1510742565' data['uid'] = 'b1de8f80defd4a81afe2e09f39678087' expected_output = { - u'flag': { - u'comment': u'Tests passed', - u'commit_hash': commit.oid.hex, - u'date_created': u'1510742565', - u'percent': 100, - u'status': 'success', - u'url': u'http://jenkins.cloud.fedoraproject.org/', - u'user': { - u'default_email': u'bar@pingou.com', - u'emails': [u'bar@pingou.com', u'foo@pingou.com'], - u'fullname': u'PY C', - u'name': u'pingou'}, - u'username': u'Jenkins' + 'flag': { + 'comment': 'Tests passed', + 'commit_hash': commit.oid.hex, + 'date_created': '1510742565', + 'percent': 100, + 'status': 'success', + 'url': 'http://jenkins.cloud.fedoraproject.org/', + 'user': { + 'default_email': 'bar@pingou.com', + 'emails': ['bar@pingou.com', 'foo@pingou.com'], + 'fullname': 'PY C', + 'name': 'pingou'}, + 'username': 'Jenkins' }, - u'message': u'Flag added', - u'uid': u'b1de8f80defd4a81afe2e09f39678087' + 'message': 'Flag added', + 'uid': 'b1de8f80defd4a81afe2e09f39678087' } self.assertEqual(data, expected_output) mock_email.assert_called_once_with( - u'\nJenkins flagged the commit ' - u'`' + commit.oid.hex + u'` as success: ' - u'Tests passed\n\n' - u'https://pagure.org/test/c/' + commit.oid.hex + u'\n', - u'Coommit #' + commit.oid.hex + u' - Jenkins: success', - u'bar@pingou.com', - in_reply_to=u'test-project-1', - mail_id=u'test-commit-1-1', - project_name=u'test', - user_from=u'Jenkins' + '\nJenkins flagged the commit ' + '`' + commit.oid.hex + '` as success: ' + 'Tests passed\n\n' + 'https://pagure.org/test/c/' + commit.oid.hex + '\n', + 'Coommit #' + commit.oid.hex + ' - Jenkins: success', + 'bar@pingou.com', + in_reply_to='test-project-1', + mail_id='test-commit-1-1', + project_name='test', + user_from='Jenkins' ) @patch.dict('pagure.config.config', @@ -3144,7 +3151,7 @@ class PagureFlaskApiProjectFlagtests(tests.Modeltests): '/api/0/test/c/%s/flag' % commit.oid.hex, headers=headers, data=send_data) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(data['flag']['status'], 'succeed!') # Try invalid flag status @@ -3153,13 +3160,13 @@ class PagureFlaskApiProjectFlagtests(tests.Modeltests): '/api/0/test/c/%s/flag' % commit.oid.hex, headers=headers, data=send_data) self.assertEqual(output.status_code, 400) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual( data, { - u'errors': {u'status': [u'Not a valid choice']}, - u'error_code': u'EINVALIDREQ', - u'error': u'Invalid or incomplete input submitted' + 'errors': {'status': ['Not a valid choice']}, + 'error_code': 'EINVALIDREQ', + 'error': 'Invalid or incomplete input submitted' } ) @@ -3171,7 +3178,7 @@ class PagureFlaskApiProjectFlagtests(tests.Modeltests): # test with no flags output = self.app.get('/api/0/test/c/%s/flag' % commit.oid.hex) - self.assertEqual(json.loads(output.data), {'total_flags': 0, 'flags': []}) + self.assertEqual(json.loads(output.get_data(as_text=True)), {'total_flags': 0, 'flags': []}) self.assertEqual(output.status_code, 200) # add some flags and retrieve them @@ -3205,41 +3212,41 @@ class PagureFlaskApiProjectFlagtests(tests.Modeltests): self.session.commit() output = self.app.get('/api/0/test/c/%s/flag' % commit.oid.hex) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) for f in data['flags']: - f['date_created'] = u'1510742565' - f['commit_hash'] = u'62b49f00d489452994de5010565fab81' + f['date_created'] = '1510742565' + f['commit_hash'] = '62b49f00d489452994de5010565fab81' expected_output = { - u"flags": [ + "flags": [ { - u"comment": u"Build is running", - u"commit_hash": u"62b49f00d489452994de5010565fab81", - u"date_created": u"1510742565", - u"percent": None, - u"status": u"pending", - u"url": u"https://koji.fp.o/koji...", - u"user": { - u"fullname": u"foo bar", - u"name": u"foo" + "comment": "Build is running", + "commit_hash": "62b49f00d489452994de5010565fab81", + "date_created": "1510742565", + "percent": None, + "status": "pending", + "url": "https://koji.fp.o/koji...", + "user": { + "fullname": "foo bar", + "name": "foo" }, - u"username": u"simple-koji-ci" + "username": "simple-koji-ci" }, { - u"comment": u"Build succeeded", - u"commit_hash": u"62b49f00d489452994de5010565fab81", - u"date_created": u"1510742565", - u"percent": None, - u"status": u"success", - u"url": u"https://koji.fp.o/koji...", - u"user": { - u"fullname": u"foo bar", - u"name": u"foo" + "comment": "Build succeeded", + "commit_hash": "62b49f00d489452994de5010565fab81", + "date_created": "1510742565", + "percent": None, + "status": "success", + "url": "https://koji.fp.o/koji...", + "user": { + "fullname": "foo bar", + "name": "foo" }, - u"username": u"complex-koji-ci" + "username": "complex-koji-ci" } ], - u"total_flags": 2 + "total_flags": 2 } self.assertEqual(data, expected_output) diff --git a/tests/test_pagure_flask_api_ui_private_repo.py b/tests/test_pagure_flask_api_ui_private_repo.py index aa7a604..e4f9ee2 100644 --- a/tests/test_pagure_flask_api_ui_private_repo.py +++ b/tests/test_pagure_flask_api_ui_private_repo.py @@ -1,5 +1,7 @@ # -*- coding: utf-8 -*- +from __future__ import unicode_literals + __requires__ = ['SQLAlchemy >= 0.8'] import pkg_resources @@ -12,7 +14,7 @@ import os import json import pygit2 -from mock import patch +from mock import patch, MagicMock sys.path.insert(0, os.path.join(os.path.dirname( os.path.abspath(__file__)), '..')) @@ -379,7 +381,8 @@ class PagurePrivateRepotest(tests.Modeltests): self.assertEqual(output.status_code, 200) self.assertIn( '

All Projects ' - '0

', output.get_data(as_text=True)) + '0', + output.get_data(as_text=True)) # Add a private project item = pagure.lib.model.Project( @@ -405,23 +408,26 @@ class PagurePrivateRepotest(tests.Modeltests): output = self.app.get('/?page=abc') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '

All Projects ' - '1

', output.get_data(as_text=True)) + '1', + output_text) user = tests.FakeUser(username='foo') with tests.user_set(self.app.application, user): output = self.app.get('/') + output_text = output.get_data(as_text=True) self.assertIn( 'My Projects 2', - output.get_data(as_text=True)) + output_text) self.assertIn( 'Forks 0', - output.get_data(as_text=True)) + output_text) self.assertEqual( - output.get_data(as_text=True).count('

No group found

'), 1) + output_text.count('

No group found

'), 1) self.assertEqual( - output.get_data(as_text=True).count('
'), 6) + output_text.count('
'), 6) def test_view_user(self): """ Test the view_user endpoint. """ @@ -471,45 +477,48 @@ class PagurePrivateRepotest(tests.Modeltests): user = tests.FakeUser(username='foo') with tests.user_set(self.app.application, user): output = self.app.get('/user/foo') + output_text = output.get_data(as_text=True) self.assertIn( 'Projects 2', - output.get_data(as_text=True)) + output_text) self.assertIn( 'Forks 0', - output.get_data(as_text=True)) + output_text) self.assertEqual( - output.get_data(as_text=True).count('

No group found

'), 1) + output_text.count('

No group found

'), 1) self.assertEqual( - output.get_data(as_text=True).count('
'), 5) + output_text.count('
'), 5) user.username = 'pingou' with tests.user_set(self.app.application, user): output = self.app.get('/user/foo') + output_text = output.get_data(as_text=True) self.assertIn( 'Projects 1', - output.get_data(as_text=True)) + output_text) self.assertIn( 'Forks 0', - output.get_data(as_text=True)) + output_text) self.assertEqual( - output.get_data(as_text=True).count('

No group found

'), 1) + output_text.count('

No group found

'), 1) self.assertEqual( - output.get_data(as_text=True).count('
'), 5) + output_text.count('
'), 5) # Check pingou has 0 projects user.username = 'pingou' with tests.user_set(self.app.application, user): output = self.app.get('/') + output_text = output.get_data(as_text=True) self.assertIn( 'My Projects 0', - output.get_data(as_text=True)) + output_text) self.assertIn( 'Forks 0', - output.get_data(as_text=True)) + output_text) self.assertEqual( - output.get_data(as_text=True).count('

No group found

'), 1) + output_text.count('

No group found

'), 1) self.assertEqual( - output.get_data(as_text=True).count('
'), 6) + output_text.count('
'), 6) repo = pagure.lib._get_project(self.session, 'test3') @@ -526,16 +535,17 @@ class PagurePrivateRepotest(tests.Modeltests): user.username = 'pingou' with tests.user_set(self.app.application, user): output = self.app.get('/') + output_text = output.get_data(as_text=True) self.assertIn( 'My Projects 1', - output.get_data(as_text=True)) + output_text) self.assertIn( 'Forks 0', - output.get_data(as_text=True)) + output_text) self.assertEqual( - output.get_data(as_text=True).count('

No group found

'), 1) + output_text.count('

No group found

'), 1) self.assertEqual( - output.get_data(as_text=True).count('
'), 6) + output_text.count('
'), 6) @patch('pagure.decorators.admin_session_timedout') def test_private_settings_ui(self, ast): @@ -1092,17 +1102,17 @@ class PagurePrivateRepotest(tests.Modeltests): self.assertDictEqual( data, { - u'args': { - u'fork': None, - u'namespace': None, - u'owner': None, - u'pattern': None, - u'short': False, - u'tags': [u'inf'], - u'username': None + 'args': { + 'fork': None, + 'namespace': None, + 'owner': None, + 'pattern': None, + 'short': False, + 'tags': ['inf'], + 'username': None }, - u'projects': [], - u'total_projects': 0 + 'projects': [], + 'total_projects': 0 } ) @@ -1113,17 +1123,17 @@ class PagurePrivateRepotest(tests.Modeltests): self.assertDictEqual( data, { - u'args': { - u'fork': None, - u'namespace': None, - u'owner': None, - u'pattern': None, - u'short': False, - u'tags': [u'infra'], - u'username': None + 'args': { + 'fork': None, + 'namespace': None, + 'owner': None, + 'pattern': None, + 'short': False, + 'tags': ['infra'], + 'username': None }, - u'projects': [], - u'total_projects': 0 + 'projects': [], + 'total_projects': 0 } ) @@ -1136,17 +1146,17 @@ class PagurePrivateRepotest(tests.Modeltests): self.assertDictEqual( data, { - u'args': { - u'fork': None, - u'namespace': None, - u'owner': None, - u'pattern': None, - u'short': False, - u'tags': [u'infra'], - u'username': None + 'args': { + 'fork': None, + 'namespace': None, + 'owner': None, + 'pattern': None, + 'short': False, + 'tags': ['infra'], + 'username': None }, - u'projects': [], - u'total_projects': 0 + 'projects': [], + 'total_projects': 0 } ) @@ -1159,17 +1169,17 @@ class PagurePrivateRepotest(tests.Modeltests): self.assertDictEqual( data, { - u'args': { - u'fork': None, - u'namespace': None, - u'owner': None, - u'pattern': None, - u'short': False, - u'tags': [u'infra'], - u'username': None + 'args': { + 'fork': None, + 'namespace': None, + 'owner': None, + 'pattern': None, + 'short': False, + 'tags': ['infra'], + 'username': None }, - u'projects': [], - u'total_projects': 0 + 'projects': [], + 'total_projects': 0 } ) @@ -1811,26 +1821,26 @@ class PagurePrivateRepotest(tests.Modeltests): '/api/0/test4/pull-request/1/flag', data=data, headers=headers) self.assertEqual(output.status_code, 200) data = json.loads(output.get_data(as_text=True)) - data['flag']['date_created'] = u'1510742565' - data['flag']['pull_request_uid'] = u'62b49f00d489452994de5010565fab81' + data['flag']['date_created'] = '1510742565' + data['flag']['pull_request_uid'] = '62b49f00d489452994de5010565fab81' self.assertDictEqual( data, { - u'flag': { - u'comment': u'Tests failed', - u'date_created': u'1510742565', - u'percent': 0, - u'pull_request_uid': u'62b49f00d489452994de5010565fab81', - u'status': u'failure', - u'url': u'http://jenkins.cloud.fedoraproject.org/', - u'user': { - u'default_email': u'bar@pingou.com', - u'emails': [u'bar@pingou.com', u'foo@pingou.com'], - u'fullname': u'PY C', - u'name': u'pingou'}, - u'username': u'Jenkins'}, - u'message': u'Flag added', - u'uid': u'jenkins_build_pagure_100+seed' + 'flag': { + 'comment': 'Tests failed', + 'date_created': '1510742565', + 'percent': 0, + 'pull_request_uid': '62b49f00d489452994de5010565fab81', + 'status': 'failure', + 'url': 'http://jenkins.cloud.fedoraproject.org/', + 'user': { + 'default_email': 'bar@pingou.com', + 'emails': ['bar@pingou.com', 'foo@pingou.com'], + 'fullname': 'PY C', + 'name': 'pingou'}, + 'username': 'Jenkins'}, + 'message': 'Flag added', + 'uid': 'jenkins_build_pagure_100+seed' } ) @@ -1855,26 +1865,26 @@ class PagurePrivateRepotest(tests.Modeltests): '/api/0/test4/pull-request/1/flag', data=data, headers=headers) self.assertEqual(output.status_code, 200) data = json.loads(output.get_data(as_text=True)) - data['flag']['date_created'] = u'1510742565' - data['flag']['pull_request_uid'] = u'62b49f00d489452994de5010565fab81' + data['flag']['date_created'] = '1510742565' + data['flag']['pull_request_uid'] = '62b49f00d489452994de5010565fab81' self.assertDictEqual( data, { - u'flag': { - u'comment': u'Tests passed', - u'date_created': u'1510742565', - u'percent': 100, - u'pull_request_uid': u'62b49f00d489452994de5010565fab81', - u'status': u'success', - u'url': u'http://jenkins.cloud.fedoraproject.org/', - u'user': { - u'default_email': u'bar@pingou.com', - u'emails': [u'bar@pingou.com', u'foo@pingou.com'], - u'fullname': u'PY C', - u'name': u'pingou'}, - u'username': u'Jenkins'}, - u'message': u'Flag updated', - u'uid': u'jenkins_build_pagure_100+seed' + 'flag': { + 'comment': 'Tests passed', + 'date_created': '1510742565', + 'percent': 100, + 'pull_request_uid': '62b49f00d489452994de5010565fab81', + 'status': 'success', + 'url': 'http://jenkins.cloud.fedoraproject.org/', + 'user': { + 'default_email': 'bar@pingou.com', + 'emails': ['bar@pingou.com', 'foo@pingou.com'], + 'fullname': 'PY C', + 'name': 'pingou'}, + 'username': 'Jenkins'}, + 'message': 'Flag updated', + 'uid': 'jenkins_build_pagure_100+seed' } ) @@ -2774,6 +2784,7 @@ class PagurePrivateRepotest(tests.Modeltests): } ) + @patch('pagure.lib.notify.send_email', MagicMock(return_value=True)) def test_api_private_repo_change_status_issue(self): """ Test the api_change_status_issue method of the flask api. """ item = pagure.lib.model.Project( diff --git a/tests/test_pagure_flask_api_user.py b/tests/test_pagure_flask_api_user.py index d7b99fd..84a7004 100644 --- a/tests/test_pagure_flask_api_user.py +++ b/tests/test_pagure_flask_api_user.py @@ -47,14 +47,14 @@ class PagureFlaskApiUSertests(tests.Modeltests): output = self.app.get('/api/0/users') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(sorted(data['users']), ['foo', 'pingou']) self.assertEqual(sorted(data.keys()), ['mention', 'total_users', 'users']) self.assertEqual(data['total_users'], 2) output = self.app.get('/api/0/users?pattern=p') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(data['users'], ['pingou']) self.assertEqual(sorted(data.keys()), ['mention', 'total_users', 'users']) self.assertEqual(data['total_users'], 1) @@ -70,7 +70,7 @@ class PagureFlaskApiUSertests(tests.Modeltests): "forks": [], "repos": [], "user": { "fullname": "PY C", "name": "pingou"}} - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(data, exp) def test_api_view_user_with_project(self): @@ -82,7 +82,7 @@ class PagureFlaskApiUSertests(tests.Modeltests): output = self.app.get('/api/0/user/pingou') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) data['repos'][0]['date_created'] = "1490272832" data['repos'][0]['date_modified'] = "1490272832" data['repos'][1]['date_created'] = "1490272832" @@ -301,7 +301,7 @@ class PagureFlaskApiUSertests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/1/comment', data=data, headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {'message': 'Comment added'} @@ -317,7 +317,7 @@ class PagureFlaskApiUSertests(tests.Modeltests): output = self.app.post( '/api/0/test/pull-request/1/close', headers=headers) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( data, {"message": "Pull-request closed!"} @@ -332,7 +332,7 @@ class PagureFlaskApiUSertests(tests.Modeltests): # Finally retrieve the user's logs output = self.app.get('/api/0/user/pingou/activity/stats') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) date = datetime.datetime.utcnow().date().strftime('%Y-%m-%d') self.assertDictEqual(data, {date: 4}) @@ -354,7 +354,7 @@ class PagureFlaskApiUSertests(tests.Modeltests): "activities": [], "date": "2016-01-01" } - self.assertEqual(json.loads(output.data), exp) + self.assertEqual(json.loads(output.get_data(as_text=True)), exp) # Date parsed, just not really as expected output = self.app.get('/api/0/user/pingou/activity/20161245') @@ -363,13 +363,13 @@ class PagureFlaskApiUSertests(tests.Modeltests): "activities": [], "date": "1970-08-22" } - self.assertEqual(json.loads(output.data), exp) + self.assertEqual(json.loads(output.get_data(as_text=True)), exp) date = datetime.datetime.utcnow().date().strftime('%Y-%m-%d') # Retrieve the user's logs for today output = self.app.get('/api/0/user/pingou/activity/%s' % date) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) exp = { "activities": [ { @@ -460,7 +460,7 @@ class PagureFlaskApiUSertests(tests.Modeltests): output = self.app.get( '/api/0/user/pingou/activity/%s?grouped=1' % date) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) exp = { "activities": [ { @@ -504,26 +504,26 @@ class PagureFlaskApiUSertests(tests.Modeltests): # Retrieve the user's stats with no timezone specified (==UTC) output = self.app.get('/api/0/user/pingou/activity/stats') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) # date in output should be UTC date self.assertDictEqual(data, {utcdate: 1}) # Now in timestamp format... output = self.app.get('/api/0/user/pingou/activity/stats?format=timestamp') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) # timestamp in output should be UTC ts self.assertDictEqual(data, {utcts: 1}) # Retrieve the user's stats with local timezone specified output = self.app.get('/api/0/user/pingou/activity/stats?tz=America/New_York') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) # date in output should be local date self.assertDictEqual(data, {localdate: 1}) # Now in timestamp format... output = self.app.get('/api/0/user/pingou/activity/stats?format=timestamp&tz=America/New_York') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) # timestamp in output should be local ts self.assertDictEqual(data, {localts: 1}) @@ -531,7 +531,7 @@ class PagureFlaskApiUSertests(tests.Modeltests): output = self.app.get( '/api/0/user/pingou/activity/%s?grouped=1' % utcdate) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) exp = { "activities": [ { @@ -546,7 +546,7 @@ class PagureFlaskApiUSertests(tests.Modeltests): output = self.app.get( '/api/0/user/pingou/activity/%s?grouped=1&tz=America/New_York' % localdate) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) exp['date'] = localdate self.assertEqual(data, exp) @@ -582,26 +582,26 @@ class PagureFlaskApiUSertests(tests.Modeltests): # Retrieve the user's stats with no timezone specified (==UTC) output = self.app.get('/api/0/user/pingou/activity/stats') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) # date in output should be UTC date self.assertDictEqual(data, {utcdate: 1}) # Now in timestamp format... output = self.app.get('/api/0/user/pingou/activity/stats?format=timestamp') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) # timestamp in output should be UTC ts self.assertDictEqual(data, {utcts: 1}) # Retrieve the user's stats with local timezone specified output = self.app.get('/api/0/user/pingou/activity/stats?tz=Asia/Dubai') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) # date in output should be local date self.assertDictEqual(data, {localdate: 1}) # Now in timestamp format... output = self.app.get('/api/0/user/pingou/activity/stats?format=timestamp&tz=Asia/Dubai') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) # timestamp in output should be local ts self.assertDictEqual(data, {localts: 1}) @@ -609,7 +609,7 @@ class PagureFlaskApiUSertests(tests.Modeltests): output = self.app.get( '/api/0/user/pingou/activity/%s?grouped=1' % utcdate) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) exp = { "activities": [ { @@ -624,7 +624,7 @@ class PagureFlaskApiUSertests(tests.Modeltests): output = self.app.get( '/api/0/user/pingou/activity/%s?grouped=1&tz=Asia/Dubai' % localdate) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) exp['date'] = localdate self.assertEqual(data, exp) @@ -825,7 +825,7 @@ class PagureFlaskApiUsertestrequests(tests.Modeltests): output = self.app.get( '/api/0/user/pingou/requests/filed') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(len(data['requests']), 2) self.assertEqual(data['requests'][0]['user']['name'], "pingou") @@ -841,7 +841,7 @@ class PagureFlaskApiUsertestrequests(tests.Modeltests): output = self.app.get( '/api/0/user/pingou/requests/filed?status=open') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(len(data['requests']), 2) self.assertEqual(data['requests'][0]['user']['name'], "pingou") @@ -857,7 +857,7 @@ class PagureFlaskApiUsertestrequests(tests.Modeltests): output = self.app.get( '/api/0/user/pingou/requests/filed?status=closed') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(len(data['requests']), 2) self.assertEqual(data['requests'][0]['user']['name'], "pingou") @@ -873,7 +873,7 @@ class PagureFlaskApiUsertestrequests(tests.Modeltests): output = self.app.get( '/api/0/user/pingou/requests/filed?status=merged') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(len(data['requests']), 2) self.assertEqual(data['requests'][0]['user']['name'], "pingou") @@ -889,7 +889,7 @@ class PagureFlaskApiUsertestrequests(tests.Modeltests): output = self.app.get( '/api/0/user/pingou/requests/filed?status=all') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(len(data['requests']), 6) self.assertEqual(data['requests'][0]['user']['name'], "pingou") @@ -917,7 +917,7 @@ class PagureFlaskApiUsertestrequests(tests.Modeltests): output = self.app.get( '/api/0/user/pingou/requests/filed?status=all&page=2') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(len(data['requests']), 0) self.assertEqual(data['args']['page'], 2) @@ -931,7 +931,7 @@ class PagureFlaskApiUsertestrequests(tests.Modeltests): output = self.app.get( '/api/0/user/pingou/requests/actionable') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(len(data['requests']), 2) self.assertEqual(data['requests'][0]['user']['name'], "foo") @@ -947,7 +947,7 @@ class PagureFlaskApiUsertestrequests(tests.Modeltests): output = self.app.get( '/api/0/user/pingou/requests/actionable?status=open') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(len(data['requests']), 2) self.assertEqual(data['requests'][0]['user']['name'], "foo") @@ -963,7 +963,7 @@ class PagureFlaskApiUsertestrequests(tests.Modeltests): output = self.app.get( '/api/0/user/pingou/requests/actionable?status=closed') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(len(data['requests']), 2) self.assertEqual(data['requests'][0]['user']['name'], "foo") @@ -979,7 +979,7 @@ class PagureFlaskApiUsertestrequests(tests.Modeltests): output = self.app.get( '/api/0/user/pingou/requests/actionable?status=merged') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(len(data['requests']), 2) self.assertEqual(data['requests'][0]['user']['name'], "foo") @@ -995,7 +995,7 @@ class PagureFlaskApiUsertestrequests(tests.Modeltests): output = self.app.get( '/api/0/user/pingou/requests/actionable?status=all') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(len(data['requests']), 6) self.assertEqual(data['requests'][0]['user']['name'], "foo") @@ -1023,7 +1023,7 @@ class PagureFlaskApiUsertestrequests(tests.Modeltests): output = self.app.get( '/api/0/user/pingou/requests/actionable?status=all&page=2') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual(len(data['requests']), 0) self.assertEqual(data['args']['page'], 2) @@ -1061,7 +1061,7 @@ class PagureFlaskApiUsertestissues(tests.Modeltests): output = self.app.get('/api/0/user/foo/issues') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual( data, { @@ -1091,7 +1091,7 @@ class PagureFlaskApiUsertestissues(tests.Modeltests): output = self.app.get('/api/0/user/pingou/issues') self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) issues = [] for issue in data['issues_created']: issue['date_created'] = '1513111778' diff --git a/tests/test_pagure_flask_docs.py b/tests/test_pagure_flask_docs.py index 2ca2a56..2355692 100644 --- a/tests/test_pagure_flask_docs.py +++ b/tests/test_pagure_flask_docs.py @@ -8,6 +8,8 @@ """ +from __future__ import unicode_literals + __requires__ = ['SQLAlchemy >= 0.8'] import pkg_resources @@ -117,12 +119,12 @@ class PagureFlaskDocstests(tests.SimplePagureTest): output = self.app.get('/test/docs', follow_redirects=True) self.assertEqual(output.status_code, 404) self.assertTrue( - '

Documentation not found

' in output.data) + '

Documentation not found

' in output.get_data(as_text=True)) output = self.app.get('/test', follow_redirects=True) self.assertEqual(output.status_code, 404) self.assertTrue( - '

Documentation not found

' in output.data) + '

Documentation not found

' in output.get_data(as_text=True)) def test_view_docs_project_no_docs(self): """ Test the view_docs endpoint with a project that disabled the @@ -160,7 +162,7 @@ class PagureFlaskDocstests(tests.SimplePagureTest): '

No content found in the repository, you may want to read ' 'the Using the doc repository of your project ' - 'documentation.

', output.data) + 'documentation.

', output.get_data(as_text=True)) def test_view_docs(self): """ Test the view_docs endpoint. """ @@ -180,23 +182,23 @@ class PagureFlaskDocstests(tests.SimplePagureTest): output = self.app.get('/test/sources') self.assertEqual(output.status_code, 200) - self.assertEqual('
foo\n bar
', output.data) + self.assertEqual('
foo\n bar
', output.get_data(as_text=True)) output = self.app.get('/test/folder1/folder2') self.assertEqual(output.status_code, 200) self.assertTrue( '
  • ' - in output.data) + in output.get_data(as_text=True)) output = self.app.get('/test/folder1/folder2/test_file') self.assertEqual(output.status_code, 200) - self.assertEqual('
    row1\nrow2\nrow3
    ', output.data) + self.assertEqual('
    row1\nrow2\nrow3
    ', output.get_data(as_text=True)) output = self.app.get('/test/folder1') self.assertEqual(output.status_code, 200) self.assertTrue( '
  • ' - in output.data) + in output.get_data(as_text=True)) output = self.app.get('/test/folder1/foo') self.assertEqual(output.status_code, 404) @@ -220,13 +222,13 @@ class PagureFlaskDocstests(tests.SimplePagureTest): output = self.app.get('/test/sources') self.assertEqual(output.status_code, 200) - self.assertEqual('foo\n bar', output.data) + self.assertEqual('foo\n bar', output.get_data(as_text=True)) output = self.app.get('/test/folder1') self.assertEqual(output.status_code, 200) self.assertTrue( '
  • ' - in output.data) + in output.get_data(as_text=True)) @mock.patch( 'pagure.lib.encoding_utils.decode', diff --git a/tests/test_pagure_flask_form.py b/tests/test_pagure_flask_form.py index a45a7a9..02d6366 100644 --- a/tests/test_pagure_flask_form.py +++ b/tests/test_pagure_flask_form.py @@ -8,6 +8,8 @@ """ +from __future__ import unicode_literals + __requires__ = ['SQLAlchemy >= 0.8'] import pkg_resources @@ -67,7 +69,9 @@ class PagureFlaskFormTests(tests.SimplePagureTest): # CSRF token expired if hasattr(flask_wtf, '__version__') and \ - tuple(flask_wtf.__version__.split('.')) >= (0,10,0): + tuple( + [int(v) for v in flask_wtf.__version__.split('.')] + ) < (0, 10, 0): expires = time.time() - 1 else: expires = ( @@ -81,7 +85,7 @@ class PagureFlaskFormTests(tests.SimplePagureTest): import itsdangerous timestamp = itsdangerous.base64_encode( itsdangerous.int_to_bytes(int(expires))) - print '*', data + timestamp = timestamp.decode("ascii") part1, _, part2 = data.split('.', 2) form.csrf_token.data = '.'.join([part1, timestamp, part2]) else: diff --git a/tests/test_pagure_flask_internal.py b/tests/test_pagure_flask_internal.py index d8b2969..71d1468 100644 --- a/tests/test_pagure_flask_internal.py +++ b/tests/test_pagure_flask_internal.py @@ -8,6 +8,8 @@ """ +from __future__ import unicode_literals + __requires__ = ['SQLAlchemy >= 0.8'] import pkg_resources @@ -113,7 +115,7 @@ class PagureFlaskInternaltests(tests.Modeltests): # Add comment output = self.app.put('/pv/pull-request/comment/', data=data) self.assertEqual(output.status_code, 200) - js_data = json.loads(output.data) + js_data = json.loads(output.get_data(as_text=True)) self.assertDictEqual(js_data, {'message': 'Comment added'}) self.session.commit() @@ -193,7 +195,7 @@ class PagureFlaskInternaltests(tests.Modeltests): # Add comment output = self.app.put('/pv/ticket/comment/', data=data) self.assertEqual(output.status_code, 200) - js_data = json.loads(output.data) + js_data = json.loads(output.get_data(as_text=True)) self.assertDictEqual(js_data, {'message': 'Comment added'}) self.session.commit() @@ -283,7 +285,7 @@ class PagureFlaskInternaltests(tests.Modeltests): # Add comment output = self.app.put('/pv/ticket/comment/', data=data) self.assertEqual(output.status_code, 200) - js_data = json.loads(output.data) + js_data = json.loads(output.get_data(as_text=True)) self.assertDictEqual(js_data, {'message': 'Comment added'}) self.session.commit() @@ -383,7 +385,7 @@ class PagureFlaskInternaltests(tests.Modeltests): # Add comment output = self.app.put('/pv/ticket/comment/', data=data) self.assertEqual(output.status_code, 200) - js_data = json.loads(output.data) + js_data = json.loads(output.get_data(as_text=True)) self.assertDictEqual(js_data, {'message': 'Comment added'}) repo = pagure.lib.get_authorized_project(self.session, 'test') @@ -413,7 +415,7 @@ class PagureFlaskInternaltests(tests.Modeltests): # Add comment output = self.app.put('/pv/ticket/comment/', data=data) self.assertEqual(output.status_code, 200) - js_data = json.loads(output.data) + js_data = json.loads(output.get_data(as_text=True)) self.assertDictEqual(js_data, {'message': 'Comment added'}) repo = pagure.lib.get_authorized_project(self.session, 'test') @@ -533,7 +535,7 @@ class PagureFlaskInternaltests(tests.Modeltests): user.username = 'pingou' with tests.user_set(self.app.application, user): output = self.app.get('/test/adduser') - csrf_token = output.data.split( + csrf_token = output.get_data(as_text=True).split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] # Missing request identifier @@ -557,7 +559,7 @@ class PagureFlaskInternaltests(tests.Modeltests): "short_code": "Ok" } - js_data = json.loads(output.data) + js_data = json.loads(output.get_data(as_text=True)) self.assertDictEqual(js_data, exp) @patch('pagure.lib.notify.send_email') @@ -655,7 +657,7 @@ class PagureFlaskInternaltests(tests.Modeltests): user.username = 'pingou' with tests.user_set(self.app.application, user): output = self.app.get('/test/adduser') - csrf_token = output.data.split( + csrf_token = output.get_data(as_text=True).split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] # Missing request identifier @@ -679,7 +681,7 @@ class PagureFlaskInternaltests(tests.Modeltests): "short_code": "No changes" } - js_data = json.loads(output.data) + js_data = json.loads(output.get_data(as_text=True)) self.assertDictEqual(js_data, exp) @patch('pagure.lib.notify.send_email') @@ -808,7 +810,7 @@ class PagureFlaskInternaltests(tests.Modeltests): user.username = 'pingou' with tests.user_set(self.app.application, user): output = self.app.get('/test/adduser') - csrf_token = output.data.split( + csrf_token = output.get_data(as_text=True).split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] # Missing request identifier @@ -832,7 +834,7 @@ class PagureFlaskInternaltests(tests.Modeltests): "short_code": "With merge" } - js_data = json.loads(output.data) + js_data = json.loads(output.get_data(as_text=True)) self.assertDictEqual(js_data, exp) @patch('pagure.lib.notify.send_email') @@ -960,7 +962,7 @@ class PagureFlaskInternaltests(tests.Modeltests): user.username = 'pingou' with tests.user_set(self.app.application, user): output = self.app.get('/test/adduser') - csrf_token = output.data.split( + csrf_token = output.get_data(as_text=True).split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] # Missing request identifier @@ -984,7 +986,7 @@ class PagureFlaskInternaltests(tests.Modeltests): "short_code": "Conflicts" } - js_data = json.loads(output.data) + js_data = json.loads(output.get_data(as_text=True)) self.assertDictEqual(js_data, exp) def test_get_branches_of_commit(self): @@ -997,8 +999,8 @@ class PagureFlaskInternaltests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.get('/test/adduser') self.assertEqual(output.status_code, 200) - csrf_token = output.data.split( - b'name="csrf_token" type="hidden" value="')[1].split(b'">')[0] + csrf_token = output.get_data(as_text=True).split( + 'name="csrf_token" type="hidden" value="')[1].split('">')[0] # No CSRF token data = { @@ -1007,10 +1009,10 @@ class PagureFlaskInternaltests(tests.Modeltests): } output = self.app.post('/pv/branches/commit/', data=data) self.assertEqual(output.status_code, 400) - js_data = json.loads(output.data.decode('utf-8')) + js_data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( js_data, - {u'code': u'ERROR', u'message': u'Invalid input submitted'} + {'code': 'ERROR', 'message': 'Invalid input submitted'} ) # Invalid repo @@ -1021,12 +1023,12 @@ class PagureFlaskInternaltests(tests.Modeltests): } output = self.app.post('/pv/branches/commit/', data=data) self.assertEqual(output.status_code, 404) - js_data = json.loads(output.data.decode('utf-8')) + js_data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( js_data, { - u'code': u'ERROR', - u'message': u'No repo found with the information provided' + 'code': 'ERROR', + 'message': 'No repo found with the information provided' } ) @@ -1038,10 +1040,10 @@ class PagureFlaskInternaltests(tests.Modeltests): output = self.app.post('/pv/branches/commit/', data=data) self.assertEqual(output.status_code, 400) - js_data = json.loads(output.data.decode('utf-8')) + js_data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( js_data, - {u'code': u'ERROR', u'message': u'No commit id submitted'} + {'code': 'ERROR', 'message': 'No commit id submitted'} ) # Request is fine, but git repo doesn't exist @@ -1061,12 +1063,12 @@ class PagureFlaskInternaltests(tests.Modeltests): } output = self.app.post('/pv/branches/commit/', data=data) self.assertEqual(output.status_code, 404) - js_data = json.loads(output.data.decode('utf-8')) + js_data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( js_data, { - u'code': u'ERROR', - u'message': u'No git repo found with the information provided' + 'code': 'ERROR', + 'message': 'No git repo found with the information provided' } ) @@ -1155,12 +1157,12 @@ class PagureFlaskInternaltests(tests.Modeltests): } output = self.app.post('/pv/branches/commit/', data=data) self.assertEqual(output.status_code, 404) - js_data = json.loads(output.data.decode('utf-8')) + js_data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( js_data, { - u'code': u'ERROR', - u'message': 'This commit could not be found in this repo' + 'code': 'ERROR', + 'message': 'This commit could not be found in this repo' } ) @@ -1172,12 +1174,12 @@ class PagureFlaskInternaltests(tests.Modeltests): } output = self.app.post('/pv/branches/commit/', data=data) self.assertEqual(output.status_code, 200) - js_data = json.loads(output.data.decode('utf-8')) + js_data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( js_data, { - u'code': u'OK', - u'branches': ['feature_branch'], + 'code': 'OK', + 'branches': ['feature_branch'], } ) @@ -1253,7 +1255,7 @@ class PagureFlaskInternaltests(tests.Modeltests): } output = self.app.post('/pv/branches/commit/', data=data) self.assertEqual(output.status_code, 200) - js_data = json.loads(output.data.decode('utf-8')) + js_data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( js_data, { @@ -1278,10 +1280,10 @@ class PagureFlaskInternaltests(tests.Modeltests): } output = self.app.post('/pv/branches/heads/', data=data) self.assertEqual(output.status_code, 400) - js_data = json.loads(output.data.decode('utf-8')) + js_data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( js_data, - {u'code': u'ERROR', u'message': u'Invalid input submitted'} + {'code': 'ERROR', 'message': 'Invalid input submitted'} ) # Invalid repo @@ -1292,12 +1294,12 @@ class PagureFlaskInternaltests(tests.Modeltests): } output = self.app.post('/pv/branches/heads/', data=data) self.assertEqual(output.status_code, 404) - js_data = json.loads(output.data.decode('utf-8')) + js_data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( js_data, { - u'code': u'ERROR', - u'message': u'No repo found with the information provided' + 'code': 'ERROR', + 'message': 'No repo found with the information provided' } ) @@ -1309,10 +1311,10 @@ class PagureFlaskInternaltests(tests.Modeltests): output = self.app.post('/pv/branches/heads/', data=data) self.assertEqual(output.status_code, 200) - js_data = json.loads(output.data.decode('utf-8')) + js_data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( js_data, - {u"branches": {}, u"code": u"OK", u"heads": {}} + {"branches": {}, "code": "OK", "heads": {}} ) # Request is fine, but git repo doesn't exist @@ -1331,12 +1333,12 @@ class PagureFlaskInternaltests(tests.Modeltests): } output = self.app.post('/pv/branches/heads/', data=data) self.assertEqual(output.status_code, 404) - js_data = json.loads(output.data.decode('utf-8')) + js_data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( js_data, { - u'code': u'ERROR', - u'message': u'No git repo found with the information provided' + 'code': 'ERROR', + 'message': 'No git repo found with the information provided' } ) @@ -1424,7 +1426,7 @@ class PagureFlaskInternaltests(tests.Modeltests): } output = self.app.post('/pv/branches/heads/', data=data) self.assertEqual(output.status_code, 200) - js_data = json.loads(output.data.decode('utf-8')) + js_data = json.loads(output.get_data(as_text=True)) # We can't test the content since the commit hash will change all # the time, so let's just check the structure self.assertEqual( @@ -1441,10 +1443,10 @@ class PagureFlaskInternaltests(tests.Modeltests): } output = self.app.post('/pv/stats/commits/authors', data=data) self.assertEqual(output.status_code, 400) - js_data = json.loads(output.data.decode('utf-8')) + js_data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( js_data, - {u'code': u'ERROR', u'message': u'Invalid input submitted'} + {'code': 'ERROR', 'message': 'Invalid input submitted'} ) def test_get_stats_commits_invalid_repo(self): @@ -1461,11 +1463,11 @@ class PagureFlaskInternaltests(tests.Modeltests): } output = self.app.post('/pv/stats/commits/authors', data=data) self.assertEqual(output.status_code, 404) - js_data = json.loads(output.data.decode('utf-8')) + js_data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( js_data, - {u'code': u'ERROR', - u'message': u'No repo found with the information provided'} + {'code': 'ERROR', + 'message': 'No repo found with the information provided'} ) def test_get_stats_commits_empty_git(self): @@ -1485,7 +1487,7 @@ class PagureFlaskInternaltests(tests.Modeltests): } output = self.app.post('/pv/stats/commits/authors', data=data) self.assertEqual(output.status_code, 200) - js_data = json.loads(output.data.decode('utf-8')) + js_data = json.loads(output.get_data(as_text=True)) self.assertEqual( sorted(js_data.keys()), ['code', 'message', 'task_id', 'url'] @@ -1495,11 +1497,11 @@ class PagureFlaskInternaltests(tests.Modeltests): self.assertTrue(js_data['url'].startswith('/pv/task/')) output = self.app.get(js_data['url']) - js_data2 = json.loads(output.data.decode('utf-8')) + js_data2 = json.loads(output.get_data(as_text=True)) self.assertTrue( js_data2 in [ - {u'results': u"reference 'refs/heads/master' not found"}, - {u'results': u"Reference 'refs/heads/master' not found"} + {'results': "reference 'refs/heads/master' not found"}, + {'results': "Reference 'refs/heads/master' not found"} ] ) @@ -1523,7 +1525,7 @@ class PagureFlaskInternaltests(tests.Modeltests): } output = self.app.post('/pv/stats/commits/authors', data=data) self.assertEqual(output.status_code, 200) - js_data = json.loads(output.data.decode('utf-8')) + js_data = json.loads(output.get_data(as_text=True)) self.assertEqual( sorted(js_data.keys()), ['code', 'message', 'task_id', 'url'] @@ -1536,14 +1538,14 @@ class PagureFlaskInternaltests(tests.Modeltests): while output.status_code == 418: time.sleep(0.5) output = self.app.get(js_data['url']) - js_data2 = json.loads(output.data.decode('utf-8')) + js_data2 = json.loads(output.get_data(as_text=True)) self.assertTrue(js_data2['results'][3] > 1509110062) js_data2['results'][3] = 1509110062 self.assertDictEqual( js_data2, - {u'results': [ + {'results': [ 2, - [[2, [[u'Alice Author', u'alice@authors.tld']]]], + [[2, [['Alice Author', 'alice@authors.tld']]]], 1, 1509110062 ] @@ -1558,10 +1560,10 @@ class PagureFlaskInternaltests(tests.Modeltests): } output = self.app.post('/pv/stats/commits/trend', data=data) self.assertEqual(output.status_code, 400) - js_data = json.loads(output.data.decode('utf-8')) + js_data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( js_data, - {u'code': u'ERROR', u'message': u'Invalid input submitted'} + {'code': 'ERROR', 'message': 'Invalid input submitted'} ) def test_get_stats_commits_trend_invalid_repo(self): @@ -1578,11 +1580,11 @@ class PagureFlaskInternaltests(tests.Modeltests): } output = self.app.post('/pv/stats/commits/trend', data=data) self.assertEqual(output.status_code, 404) - js_data = json.loads(output.data.decode('utf-8')) + js_data = json.loads(output.get_data(as_text=True)) self.assertDictEqual( js_data, - {u'code': u'ERROR', - u'message': u'No repo found with the information provided'} + {'code': 'ERROR', + 'message': 'No repo found with the information provided'} ) def test_get_stats_commits_trend_empty_git(self): @@ -1602,7 +1604,7 @@ class PagureFlaskInternaltests(tests.Modeltests): } output = self.app.post('/pv/stats/commits/trend', data=data) self.assertEqual(output.status_code, 200) - js_data = json.loads(output.data.decode('utf-8')) + js_data = json.loads(output.get_data(as_text=True)) self.assertEqual( sorted(js_data.keys()), ['code', 'message', 'task_id', 'url'] @@ -1612,11 +1614,11 @@ class PagureFlaskInternaltests(tests.Modeltests): self.assertTrue(js_data['url'].startswith('/pv/task/')) output = self.app.get(js_data['url']) - js_data2 = json.loads(output.data.decode('utf-8')) + js_data2 = json.loads(output.get_data(as_text=True)) self.assertTrue( js_data2 in [ - {u'results': u"reference 'refs/heads/master' not found"}, - {u'results': u"Reference 'refs/heads/master' not found"} + {'results': "reference 'refs/heads/master' not found"}, + {'results': "Reference 'refs/heads/master' not found"} ] ) @@ -1640,7 +1642,7 @@ class PagureFlaskInternaltests(tests.Modeltests): } output = self.app.post('/pv/stats/commits/trend', data=data) self.assertEqual(output.status_code, 200) - js_data = json.loads(output.data.decode('utf-8')) + js_data = json.loads(output.get_data(as_text=True)) self.assertEqual( sorted(js_data.keys()), ['code', 'message', 'task_id', 'url'] @@ -1650,11 +1652,11 @@ class PagureFlaskInternaltests(tests.Modeltests): self.assertTrue(js_data['url'].startswith('/pv/task/')) output = self.app.get(js_data['url']) - js_data2 = json.loads(output.data.decode('utf-8')) + js_data2 = json.loads(output.get_data(as_text=True)) today = datetime.datetime.utcnow().date() self.assertDictEqual( js_data2, - {u'results': [[str(today), 2]]} + {'results': [[str(today), 2]]} ) def test_get_project_family_no_project(self): @@ -1672,13 +1674,13 @@ class PagureFlaskInternaltests(tests.Modeltests): output = self.app.post('/pv/test/family') self.assertEqual(output.status_code, 400) - js_data = json.loads(output.data.decode('utf-8')) + js_data = json.loads(output.get_data(as_text=True)) self.assertEqual( sorted(js_data.keys()), - [u'code', u'message'] + ['code', 'message'] ) - self.assertEqual(js_data['code'], u'ERROR') - self.assertEqual(js_data['message'], u'Invalid input submitted') + self.assertEqual(js_data['code'], 'ERROR') + self.assertEqual(js_data['message'], 'Invalid input submitted') def test_get_project_family(self): ''' Test the get_project_family from the internal API. ''' @@ -1698,13 +1700,13 @@ class PagureFlaskInternaltests(tests.Modeltests): } output = self.app.post('/pv/test/family', data=data) self.assertEqual(output.status_code, 200) - js_data = json.loads(output.data.decode('utf-8')) + js_data = json.loads(output.get_data(as_text=True)) self.assertEqual( sorted(js_data.keys()), - [u'code', u'family'] + ['code', 'family'] ) self.assertEqual(js_data['code'], 'OK') - self.assertEqual(js_data['family'], [u'test']) + self.assertEqual(js_data['family'], ['test']) def test_get_project_larger_family(self): ''' Test the get_project_family from the internal API. ''' @@ -1760,15 +1762,15 @@ class PagureFlaskInternaltests(tests.Modeltests): } output = self.app.post('/pv/test/family', data=data) self.assertEqual(output.status_code, 200) - js_data = json.loads(output.data.decode('utf-8')) + js_data = json.loads(output.get_data(as_text=True)) self.assertEqual( sorted(js_data.keys()), - [u'code', u'family'] + ['code', 'family'] ) self.assertEqual(js_data['code'], 'OK') self.assertEqual( js_data['family'], - [u'test', u'fork/foo/test', u'fork/ralph/test']) + ['test', 'fork/foo/test', 'fork/ralph/test']) def test_get_pull_request_ready_branch_main_repo_no_branch(self): '''Test the get_pull_request_ready_branch from the internal API @@ -1791,15 +1793,15 @@ class PagureFlaskInternaltests(tests.Modeltests): } output = self.app.post('/pv/pull-request/ready', data=data) self.assertEqual(output.status_code, 200) - js_data = json.loads(output.data.decode('utf-8')) + js_data = json.loads(output.get_data(as_text=True)) self.assertEqual( sorted(js_data.keys()), - [u'code', u'message'] + ['code', 'message'] ) self.assertEqual(js_data['code'], 'OK') self.assertEqual( js_data['message'], - {u'branch_w_pr': {}, u'new_branch': {}}) + {'branch_w_pr': {}, 'new_branch': {}}) def test_get_pull_request_ready_branch_on_fork(self): '''Test the get_pull_request_ready_branch from the internal API on @@ -1842,17 +1844,18 @@ class PagureFlaskInternaltests(tests.Modeltests): } output = self.app.post('/pv/pull-request/ready', data=data) self.assertEqual(output.status_code, 200) - js_data = json.loads(output.data.decode('utf-8')) + js_data = json.loads(output.get_data(as_text=True)) self.assertEqual( sorted(js_data.keys()), - [u'code', u'message'] + ['code', 'message'] ) self.assertEqual(js_data['code'], 'OK') self.assertListEqual( sorted(js_data['message'].keys()), - [u'branch_w_pr', u'new_branch']) + ['branch_w_pr', 'new_branch']) self.assertEqual(js_data['message']['branch_w_pr'], {}) - self.assertEqual(js_data['message']['new_branch'].keys(), ['feature']) + self.assertListEqual( + list(js_data['message']['new_branch']), ['feature']) self.assertEqual(len(js_data['message']['new_branch']['feature']), 2) def test_get_pull_request_ready_branch_on_fork_no_parent_no_pr(self): @@ -1906,10 +1909,10 @@ class PagureFlaskInternaltests(tests.Modeltests): } output = self.app.post('/pv/pull-request/ready', data=data) self.assertEqual(output.status_code, 400) - js_data = json.loads(output.data.decode('utf-8')) + js_data = json.loads(output.get_data(as_text=True)) self.assertEqual( sorted(js_data.keys()), - [u'code', u'message'] + ['code', 'message'] ) self.assertEqual(js_data['code'], 'ERROR') self.assertEqual( @@ -1967,17 +1970,18 @@ class PagureFlaskInternaltests(tests.Modeltests): } output = self.app.post('/pv/pull-request/ready', data=data) self.assertEqual(output.status_code, 200) - js_data = json.loads(output.data.decode('utf-8')) + js_data = json.loads(output.get_data(as_text=True)) self.assertEqual( sorted(js_data.keys()), - [u'code', u'message'] + ['code', 'message'] ) self.assertEqual(js_data['code'], 'OK') self.assertEqual( sorted(js_data['message'].keys()), - [u'branch_w_pr', u'new_branch']) + ['branch_w_pr', 'new_branch']) self.assertEqual(js_data['message']['branch_w_pr'], {}) - self.assertEqual(js_data['message']['new_branch'].keys(), ['feature']) + self.assertListEqual( + list(js_data['message']['new_branch']), ['feature']) self.assertEqual(len(js_data['message']['new_branch']['feature']), 2) diff --git a/tests/test_pagure_flask_ui_app.py b/tests/test_pagure_flask_ui_app.py index 1772096..9557498 100644 --- a/tests/test_pagure_flask_ui_app.py +++ b/tests/test_pagure_flask_ui_app.py @@ -8,6 +8,8 @@ """ +from __future__ import unicode_literals + __requires__ = ['SQLAlchemy >= 0.8'] import pkg_resources @@ -41,7 +43,7 @@ class PagureFlaskApptests(tests.Modeltests): self.assertEqual(output.status_code, 200) self.assertIn( 'Home - Pagure HTML title set', - output.data) + output.get_data(as_text=True)) def test_watch_list(self): ''' Test for watch list of a user ''' @@ -49,43 +51,46 @@ class PagureFlaskApptests(tests.Modeltests): user = tests.FakeUser(username='pingou') with tests.user_set(self.app.application, user): output = self.app.get('/') + output_text = output.get_data(as_text=True) self.assertIn( '
    You have no projects
    ', - output.data) + output_text) self.assertIn( '

    You have no forks

    ', - output.data) + output_text) self.assertIn( '

    No project in watch list

    ', - output.data) + output_text) tests.create_projects(self.session) output = self.app.get('/') + output_text = output.get_data(as_text=True) self.assertIn( 'My Projects 3', - output.data) + output_text) self.assertIn( 'My Forks 0', - output.data) + output_text) self.assertIn( 'My Watch List 3', - output.data) + output_text) def test_view_users(self): """ Test the view_users endpoint. """ output = self.app.get('/users/?page=abc') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '

    \n Users ' - '2

    ', output.data) + '2', output_text) self.assertIn( '', - output.data) + output_text) self.assertIn( '', - output.data) + output_text) @patch.dict('pagure.config.config', {'ITEM_PER_PAGE': 2}) def test_view_user_repo_cnt(self): @@ -96,26 +101,28 @@ class PagureFlaskApptests(tests.Modeltests): output = self.app.get('/user/pingou') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Projects 3', - output.data) + output_text) self.assertIn( - '
  • page 1 of 2
  • ', output.data) - self.assertEqual(output.data.count('class="repo_desc"'), 2) + '
  • page 1 of 2
  • ', output_text) + self.assertEqual(output_text.count('class="repo_desc"'), 2) self.assertIn( - 'Forks 0', output.data) + 'Forks 0', output_text) def test_view_user(self): """ Test the view_user endpoint. """ output = self.app.get('/user/pingou?repopage=abc&forkpage=def') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Projects 0', - output.data) + output_text) self.assertIn( 'Forks 0', - output.data) + output_text) tests.create_projects(self.session) self.gitrepos = tests.create_projects_git( @@ -123,14 +130,15 @@ class PagureFlaskApptests(tests.Modeltests): output = self.app.get('/user/pingou?repopage=abc&forkpage=def') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Projects 3', - output.data) + output_text) self.assertIn( - 'Forks 0', output.data) + 'Forks 0', output_text) self.assertNotIn( - '
  • page 1 of 2
  • ', output.data) - self.assertEqual(output.data.count('class="repo_desc"'), 3) + '
  • page 1 of 2
  • ', output_text) + self.assertEqual(output_text.count('class="repo_desc"'), 3) @patch.dict('pagure.config.config', {'ENABLE_UI_NEW_PROJECTS': False}) def test_new_project_when_turned_off_in_the_ui(self): @@ -159,17 +167,18 @@ class PagureFlaskApptests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.get('/') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - u'My Projects 0', - output.data) + 'My Projects 0', + output_text) # master template self.assertNotIn( - u'
    ', - output.data) + output_text) user.username = 'foo' with tests.user_set(self.app.application, user): data['csrf_token'] = csrf_token output = self.app.post('/new/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - u'
    \nProject #1
    ', - output.data) - self.assertIn(u'

    This repo is brand new!

    ', output.data) + '
    \nProject #1
    ', + output_text) + self.assertIn('

    This repo is brand new!

    ', + output_text) self.assertIn( - u'Overview - project-1 - Pagure', output.data) + 'Overview - project-1 - Pagure', output_text) # After projects = pagure.lib.search_projects(self.session) @@ -338,8 +354,9 @@ class PagureFlaskApptests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.get('/new/') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - u'Create new Project', output.data) + 'Create new Project', output_text) csrf_token = self.get_csrf(output=output) @@ -351,13 +368,14 @@ class PagureFlaskApptests(tests.Modeltests): output = self.app.post('/new/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - u'New project - Pagure', output.data) + 'New project - Pagure', output_text) self.assertIn( - u'Create new Project', output.data) + 'Create new Project', output_text) self.assertIn( - u'\n Invalid input. \n' - u' ', output.data) + '\n Invalid input. \n' + ' ', output_text) @patch.dict('pagure.config.config', {'PRIVATE_PROJECTS': True}) def test_new_project_private(self): @@ -379,10 +397,9 @@ class PagureFlaskApptests(tests.Modeltests): output = self.app.get('/new/') self.assertEqual(output.status_code, 200) self.assertIn( - u'Create new Project', output.data) + 'Create new Project', output.get_data(as_text=True)) - csrf_token = output.data.split( - 'name="csrf_token" type="hidden" value="')[1].split('">')[0] + csrf_token = self.get_csrf(output=output) data = { 'description': 'Project #1', @@ -391,40 +408,45 @@ class PagureFlaskApptests(tests.Modeltests): output = self.app.post('/new/', data=data) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - u'Create new Project', output.data) + 'Create new Project', output_text) self.assertIn( - u'\n This field is required. \n' - ' ', output.data) + '\n This field is required. \n' + ' ', output_text) data['name'] = 'project-1' output = self.app.post('/new/', data=data) self.assertEqual(output.status_code, 200) - self.assertIn('Create new Project', output.data) + output_text = output.get_data(as_text=True) + self.assertIn('Create new Project', output_text) self.assertNotIn( - u'\n This field is required. \n' - ' ', output.data) + '\n This field is required. \n' + ' ', output_text) data['csrf_token'] = csrf_token output = self.app.post('/new/', data=data) self.assertEqual(output.status_code, 200) - self.assertIn('Create new Project', output.data) + output_text = output.get_data(as_text=True) + self.assertIn('Create new Project', output_text) self.assertIn( - u'\n No user ' + '\n No user ' '"username" found\n
    ', - output.data) + output_text) user.username = 'foo' with tests.user_set(self.app.application, user): data['csrf_token'] = csrf_token output = self.app.post('/new/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - u'
    \nProject #1
    ', - output.data) - self.assertIn(u'

    This repo is brand new!

    ', output.data) + '
    \nProject #1
    ', + output_text) + self.assertIn('

    This repo is brand new!

    ', + output_text) self.assertIn( - u'Overview - foo/project-1 - Pagure', output.data) + 'Overview - foo/project-1 - Pagure', output_text) # After projects = pagure.lib.search_projects(self.session) @@ -459,10 +481,11 @@ class PagureFlaskApptests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.get('/new/') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - b'Create new Project', output.data) + 'Create new Project', output_text) - csrf_token = output.data.decode('utf-8').split( + csrf_token = output_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { @@ -473,14 +496,16 @@ class PagureFlaskApptests(tests.Modeltests): } output = self.app.post('/new/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '
    \nPrõjéctö #1
    ', - output.data if six.PY2 else output.data.decode('utf-8')) + output_text) self.assertIn( '''

    project-1

    Prõjéctö #1

    -
    ''', output.data if six.PY2 else output.data.decode('utf-8')) + ''', + output_text) data = { 'description': 'Мой первый суперский репозиторий', @@ -490,14 +515,16 @@ class PagureFlaskApptests(tests.Modeltests): } output = self.app.post('/new/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '
    \nМой первый суперский репозиторий
    ', - output.data if six.PY2 else output.data.decode('utf-8')) + output_text) self.assertIn( '''

    project-2

    Мой первый суперский репозиторий

    -
    ''', output.data if six.PY2 else output.data.decode('utf-8')) + ''', + output_text) # After projects = pagure.lib.search_projects(self.session) @@ -534,7 +561,7 @@ class PagureFlaskApptests(tests.Modeltests): output = self.app.get('/new/') self.assertEqual(output.status_code, 200) self.assertIn( - b'Create new Project', output.data) + 'Create new Project', output.get_data(as_text=True)) csrf_token = self.get_csrf(output=output) @@ -548,11 +575,11 @@ class PagureFlaskApptests(tests.Modeltests): self.assertEqual(output.status_code, 200) self.assertIn( '
    \ntest
    ', - output.data if six.PY2 else output.data.decode('utf-8')) + output.get_data(as_text=True)) self.assertEqual(pygit2init.call_count, 4) pygit2init.assert_any_call( - u'%s/repos/project-1.git' % self.path, + '%s/repos/project-1.git' % self.path, bare=True, template_path=None) path = os.path.join(self.path, 'repos', 'project-1.git') @@ -569,13 +596,13 @@ class PagureFlaskApptests(tests.Modeltests): self.assertEqual(output.status_code, 200) self.assertIn( '
    \ntest2
    ', - output.data if six.PY2 else output.data.decode('utf-8')) + output.get_data(as_text=True)) self.assertEqual(pygit2init.call_count, 8) pygit2init.assert_any_call( - u'%s/repos/project-2.git' % self.path, + '%s/repos/project-2.git' % self.path, bare=True, - template_path=u'%s/repos/project-1.git' % self.path) + template_path='%s/repos/project-1.git' % self.path) # After projects = pagure.lib.search_projects(self.session) @@ -600,20 +627,21 @@ class PagureFlaskApptests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.get('/settings/') self.assertEqual(output.status_code, 404) - self.assertTrue('

    Page not found (404)

    ' in output.data) + self.assertIn('

    Page not found (404)

    ', output.get_data(as_text=True)) user.username = 'foo' with tests.user_set(self.app.application, user): output = self.app.get('/settings/') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '
    \n Basic Information\n' - '
    ', output.data) + '
    ', output_text) self.assertIn( '', output.data) + '', output_text) - csrf_token = output.data.split( + csrf_token = output_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { @@ -622,22 +650,24 @@ class PagureFlaskApptests(tests.Modeltests): output = self.app.post('/settings/', data=data) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '
    \n Basic Information\n' - '
    ', output.data) + '
    ', output_text) data['csrf_token'] = csrf_token output = self.app.post( '/settings/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) - self.assertIn('Invalid SSH keys', output.data) + output_text = output.get_data(as_text=True) + self.assertIn('Invalid SSH keys', output_text) self.assertIn( '
    \n Basic Information\n' - '
    ', output.data) - self.assertIn('>blah', output.data) + '
    ', output_text) + self.assertIn('>blah', output_text) - csrf_token = output.data.split( + csrf_token = output_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { @@ -652,13 +682,14 @@ class PagureFlaskApptests(tests.Modeltests): output = self.app.post( '/settings/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) - self.assertIn('Public ssh key updated', output.data) + output_text = output.get_data(as_text=True) + self.assertIn('Public ssh key updated', output_text) self.assertIn( '
    \n Basic Information\n' - '
    ', output.data) + '
    ', output_text) self.assertIn( '', output.data) + '', output_text) @patch.dict('pagure.config.config', {'LOCAL_SSH_KEY': False}) @patch('pagure.ui.app.admin_session_timedout') @@ -695,12 +727,13 @@ class PagureFlaskApptests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.get('/settings/') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '
    \n Basic Information\n' - '
    ', output.data) + '
    ', output_text) self.assertNotIn( '', output.data) + '', output_text) # Before user = pagure.lib.get_user(self.session, 'foo') @@ -720,13 +753,14 @@ class PagureFlaskApptests(tests.Modeltests): output = self.app.post( '/settings/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) - self.assertNotIn('Public ssh key updated', output.data) + output_text = output.get_data(as_text=True) + self.assertNotIn('Public ssh key updated', output_text) self.assertIn( '
    \n Basic Information\n' - '
    ', output.data) + '
    ', output_text) self.assertNotIn( '', output.data) + '', output_text) - csrf_token = output.data.split( + csrf_token = output_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] # With CSRF @@ -780,7 +815,7 @@ class PagureFlaskApptests(tests.Modeltests):
  • 1
  • item 2
  • """ - self.assertEqual(output.data, exp) + self.assertEqual(output.get_data(as_text=True), exp) tests.create_projects(self.session) texts = [ @@ -818,7 +853,7 @@ class PagureFlaskApptests(tests.Modeltests): } output = self.app.post('/markdown/?repo=test', data=data) self.assertEqual(output.status_code, 200) - self.assertEqual(expected[idx], output.data) + self.assertEqual(expected[idx], output.get_data(as_text=True)) def test_markdown_preview(self): """ Test the markdown_preview endpoint with a non-existing commit. @@ -829,11 +864,12 @@ class PagureFlaskApptests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.get('/settings/') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '
    \n Basic Information\n' - '
    ', output.data) + '
    ', output_text) - csrf_token = output.data.split( + csrf_token = output_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] tests.create_projects(self.session) @@ -848,7 +884,7 @@ class PagureFlaskApptests(tests.Modeltests): } output = self.app.post('/markdown/?repo=test', data=data) self.assertEqual(output.status_code, 200) - self.assertEqual(exp, output.data) + self.assertEqual(exp, output.get_data(as_text=True)) def test_markdown_preview_valid_commit(self): """ Test the markdown_preview endpoint with an existing commit. """ @@ -858,11 +894,12 @@ class PagureFlaskApptests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.get('/settings/') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '
    \n Basic Information\n' - '
    ', output.data) + '
    ', output_text) - csrf_token = output.data.split( + csrf_token = output_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] tests.create_projects(self.session) @@ -884,7 +921,7 @@ class PagureFlaskApptests(tests.Modeltests): } output = self.app.post('/markdown/?repo=test', data=data) self.assertEqual(output.status_code, 200) - self.assertEqual(exp, output.data) + self.assertEqual(exp, output.get_data(as_text=True)) @patch('pagure.ui.app.admin_session_timedout') def test_remove_user_email(self, ast): @@ -896,20 +933,21 @@ class PagureFlaskApptests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.post('/settings/email/drop') self.assertEqual(output.status_code, 404) - self.assertTrue('

    Page not found (404)

    ' in output.data) + self.assertIn('

    Page not found (404)

    ', output.get_data(as_text=True)) user.username = 'foo' with tests.user_set(self.app.application, user): output = self.app.post('/settings/') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '
    \n Basic Information\n' - '
    ', output.data) + ' ', output_text) self.assertIn( '', output.data) + '', output_text) - csrf_token = output.data.split( + csrf_token = output_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { @@ -919,28 +957,30 @@ class PagureFlaskApptests(tests.Modeltests): output = self.app.post( '/settings/email/drop', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '
    \n Basic Information\n' - '
    ', output.data) + ' ', output_text) self.assertIn( '', output.data) + '', output_text) self.assertIn( '\n You must always have at least one email', - output.data) + output_text) user.username = 'pingou' with tests.user_set(self.app.application, user): output = self.app.post('/settings/') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '
    \n Basic Information\n' - '
    ', output.data) + ' ', output_text) self.assertIn( '', output.data) + '', output_text) - csrf_token = output.data.split( + csrf_token = output_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { @@ -950,10 +990,11 @@ class PagureFlaskApptests(tests.Modeltests): output = self.app.post( '/settings/email/drop', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '
    \n Basic Information\n' - '
    ', output.data) - self.assertEqual(output.data.count('foo@pingou.com'), 4) + ' ', output_text) + self.assertEqual(output_text.count('foo@pingou.com'), 4) data = { 'csrf_token': csrf_token, @@ -963,12 +1004,13 @@ class PagureFlaskApptests(tests.Modeltests): output = self.app.post( '/settings/email/drop', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '
    \n Basic Information\n' - '
    ', output.data) + ' ', output_text) self.assertIn( '\n You do not have the ' - 'email: foobar@pingou.com, nothing to remove', output.data) + 'email: foobar@pingou.com, nothing to remove', output_text) data = { 'csrf_token': csrf_token, @@ -978,14 +1020,16 @@ class PagureFlaskApptests(tests.Modeltests): output = self.app.post( '/settings/email/drop', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) - self.assertEqual(output.data.count('foo@pingou.com'), 0) - self.assertEqual(output.data.count('bar@pingou.com'), 3) + output_text = output.get_data(as_text=True) + self.assertEqual(output_text.count('foo@pingou.com'), 0) + self.assertEqual(output_text.count('bar@pingou.com'), 3) output = self.app.post( '/settings/email/drop', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) - self.assertEqual(output.data.count('foo@pingou.com'), 0) - self.assertEqual(output.data.count('bar@pingou.com'), 3) + output_text = output.get_data(as_text=True) + self.assertEqual(output_text.count('foo@pingou.com'), 0) + self.assertEqual(output_text.count('bar@pingou.com'), 3) ast.return_value = True output = self.app.post('/settings/email/drop', data=data) @@ -1003,28 +1047,29 @@ class PagureFlaskApptests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.post('/settings/email/add') self.assertEqual(output.status_code, 404) - self.assertTrue('

    Page not found (404)

    ' in output.data) + self.assertIn('

    Page not found (404)

    ', output.get_data(as_text=True)) user.username = 'foo' with tests.user_set(self.app.application, user): output = self.app.post('/settings/email/add') self.assertEqual(output.status_code, 200) - - self.assertTrue("Add new email" in output.data) + output_text = output.get_data(as_text=True) + self.assertIn("Add new email", output_text) self.assertIn( '', output.data) + 'name="email" type="text" value="">', output_text) user.username = 'pingou' with tests.user_set(self.app.application, user): output = self.app.post('/settings/email/add') self.assertEqual(output.status_code, 200) - self.assertTrue("Add new email" in output.data) + output_text = output.get_data(as_text=True) + self.assertIn("Add new email", output_text) self.assertIn( '', output.data) + 'name="email" type="text" value="">', output_text) - csrf_token = output.data.split( + csrf_token = output_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { @@ -1034,8 +1079,9 @@ class PagureFlaskApptests(tests.Modeltests): output = self.app.post( '/settings/email/add', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) - self.assertTrue("Add new email" in output.data) - self.assertEqual(output.data.count('foo2@pingou.com'), 1) + output_text = output.get_data(as_text=True) + self.assertIn("Add new email", output_text) + self.assertEqual(output_text.count('foo2@pingou.com'), 1) # New email data = { @@ -1046,26 +1092,28 @@ class PagureFlaskApptests(tests.Modeltests): output = self.app.post( '/settings/email/add', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '
    \n Basic Information\n' - '
    ', output.data) + ' ', output_text) self.assertIn( '\n Email pending validation', - output.data) - self.assertEqual(output.data.count('foo@pingou.com'), 4) - self.assertEqual(output.data.count('bar@pingou.com'), 5) - self.assertEqual(output.data.count('foðbar@pingou.com'), 2) + output_text) + self.assertEqual(output_text.count('foo@pingou.com'), 4) + self.assertEqual(output_text.count('bar@pingou.com'), 5) + self.assertEqual(output_text.count('foðbar@pingou.com'), 2) # Email already pending output = self.app.post( '/settings/email/add', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '
    \n ' - 'Add new email', output.data) + 'Add new email', output_text) self.assertIn( '\n This email is already ' - 'pending confirmation', output.data) + 'pending confirmation', output_text) # User already has this email data = { @@ -1076,18 +1124,21 @@ class PagureFlaskApptests(tests.Modeltests): output = self.app.post( '/settings/email/add', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) - self.assertTrue("Add new email" in output.data) + output_text = output.get_data(as_text=True) + self.assertTrue("Add new email" in output_text) self.assertTrue( 'Invalid value, can't be any of: bar@pingou.com, ' - 'foo@pingou.com. ' in output.data + 'foo@pingou.com. ' in output_text or 'Invalid value, can't be any of: foo@pingou.com, ' - 'bar@pingou.com. ' in output.data + 'bar@pingou.com. ' in output_text ) - self.assertEqual(output.data.count('foo@pingou.com'), 6) - self.assertEqual(output.data.count('bar@pingou.com'), 5) - self.assertEqual(output.data.count('foðbar@pingou.com'), 0) - + self.assertEqual( + output_text.count('foo@pingou.com'), 6) + self.assertEqual( + output_text.count('bar@pingou.com'), 5) + self.assertEqual( + output_text.count('foðbar@pingou.com'), 0) # Email registered by someone else data = { @@ -1098,10 +1149,11 @@ class PagureFlaskApptests(tests.Modeltests): output = self.app.post( '/settings/email/add', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) - self.assertTrue("Add new email" in output.data) + output_text = output.get_data(as_text=True) + self.assertTrue("Add new email" in output_text) self.assertIn( 'Invalid value, can't be any of: foo@bar.com. ', - output.data) + output_text) ast.return_value = True output = self.app.post('/settings/email/add', data=data) @@ -1119,20 +1171,21 @@ class PagureFlaskApptests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.post('/settings/email/default') self.assertEqual(output.status_code, 404) - self.assertTrue('

    Page not found (404)

    ' in output.data) + self.assertTrue('

    Page not found (404)

    ' in output.get_data(as_text=True)) user.username = 'pingou' with tests.user_set(self.app.application, user): output = self.app.get('/settings/') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '
    \n Basic Information\n' - '
    ', output.data) + '
    ', output_text) self.assertIn( '', output.data) + '', output_text) - csrf_token = output.data.split( + csrf_token = output_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { @@ -1142,10 +1195,11 @@ class PagureFlaskApptests(tests.Modeltests): output = self.app.post( '/settings/email/default', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '
    \n Basic Information\n' - '
    ', output.data) - self.assertEqual(output.data.count('foo@pingou.com'), 4) + ' ', output_text) + self.assertEqual(output_text.count('foo@pingou.com'), 4) # Set invalid default email data = { @@ -1156,14 +1210,15 @@ class PagureFlaskApptests(tests.Modeltests): output = self.app.post( '/settings/email/default', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '
    \n Basic Information\n' - '
    ', output.data) - self.assertEqual(output.data.count('foo@pingou.com'), 4) + ' ', output_text) + self.assertEqual(output_text.count('foo@pingou.com'), 4) self.assertIn( '\n You do not have the ' 'email: foobar@pingou.com, nothing to set', - output.data) + output_text) # Set default email data = { @@ -1174,13 +1229,14 @@ class PagureFlaskApptests(tests.Modeltests): output = self.app.post( '/settings/email/default', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '
    \n Basic Information\n' - '
    ', output.data) - self.assertEqual(output.data.count('foo@pingou.com'), 4) + ' ', output_text) + self.assertEqual(output_text.count('foo@pingou.com'), 4) self.assertIn( '\n Default email set to: ' - 'foo@pingou.com', output.data) + 'foo@pingou.com', output_text) ast.return_value = True output = self.app.post('/settings/email/default', data=data) @@ -1211,20 +1267,21 @@ class PagureFlaskApptests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.post('/settings/email/resend') self.assertEqual(output.status_code, 404) - self.assertTrue('

    Page not found (404)

    ' in output.data) + self.assertTrue('

    Page not found (404)

    ' in output.get_data(as_text=True)) user.username = 'pingou' with tests.user_set(self.app.application, user): output = self.app.get('/settings/') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '
    \n Basic Information\n' - '
    ', output.data) + ' ', output_text) self.assertIn( '', output.data) + '', output_text) - csrf_token = output.data.split( + csrf_token = output_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { @@ -1234,10 +1291,11 @@ class PagureFlaskApptests(tests.Modeltests): output = self.app.post( '/settings/email/resend', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '
    \n Basic Information\n' - '
    ', output.data) - self.assertEqual(output.data.count('foo@pingou.com'), 4) + ' ', output_text) + self.assertEqual(output_text.count('foo@pingou.com'), 4) # Set invalid default email data = { @@ -1248,13 +1306,14 @@ class PagureFlaskApptests(tests.Modeltests): output = self.app.post( '/settings/email/resend', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '
    \n Basic Information\n' - '
    ', output.data) - self.assertEqual(output.data.count('foo@pingou.com'), 4) + ' ', output_text) + self.assertEqual(output_text.count('foo@pingou.com'), 4) self.assertIn( '\n This email address has ' - 'already been confirmed', output.data) + 'already been confirmed', output_text) # Validate a non-validated email data = { @@ -1265,13 +1324,14 @@ class PagureFlaskApptests(tests.Modeltests): output = self.app.post( '/settings/email/resend', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '
    \n Basic Information\n' - '
    ', output.data) - self.assertEqual(output.data.count('foo@pingou.com'), 4) + ' ', output_text) + self.assertEqual(output_text.count('foo@pingou.com'), 4) self.assertIn( '\n Confirmation email re-sent', - output.data) + output_text) ast.return_value = True output = self.app.post('/settings/email/resend', data=data) @@ -1305,23 +1365,25 @@ class PagureFlaskApptests(tests.Modeltests): output = self.app.get( '/settings/email/confirm/foobar', follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '
    \n Basic Information\n' - '
    ', output.data) + ' ', output_text) self.assertIn( '\n No email associated with this token.', - output.data) + output_text) # Confirm email output = self.app.get( '/settings/email/confirm/abcdef', follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '
    \n Basic Information\n' - '
    ', output.data) + ' ', output_text) self.assertIn( '\n Email validated', - output.data) + output_text) userobj = pagure.lib.search_user(self.session, username='pingou') self.assertEqual(len(userobj.emails), 3) @@ -1361,9 +1423,10 @@ class PagureFlaskApptests(tests.Modeltests): output = self.app.get('/user/pingou/requests') self.assertEqual(output.status_code, 200) - self.assertIn('test pull-request #1', output.data) + output_text = output.get_data(as_text=True) + self.assertIn('test pull-request #1', output_text) self.assertEqual( - output.data.count('\n ' - 'Create a new token\n', output.data) + 'Create a new token\n', output_text) self.assertIn( '', - output.data) + output_text) - csrf_token = output.data.split( + csrf_token = output_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { @@ -1669,14 +1743,15 @@ class PagureFlaskApptests(tests.Modeltests): # missing CSRF output = self.app.post('/settings/token/new', data=data) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Create token - Pagure', output.data) + 'Create token - Pagure', output_text) self.assertIn( '
    \n ' - 'Create a new token\n', output.data) + 'Create a new token\n', output_text) self.assertIn( '', - output.data) + output_text) data = { 'acls': ['new_project'], @@ -1686,14 +1761,15 @@ class PagureFlaskApptests(tests.Modeltests): # Invalid ACLs output = self.app.post('/settings/token/new', data=data) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Create token - Pagure', output.data) + 'Create token - Pagure', output_text) self.assertIn( '
    \n ' - 'Create a new token\n', output.data) + 'Create a new token\n', output_text) self.assertIn( '', - output.data) + output_text) data = { 'acls': ['create_project', 'fork_project'], @@ -1704,13 +1780,14 @@ class PagureFlaskApptests(tests.Modeltests): output = self.app.post( '/settings/token/new', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'foo\'s settings - Pagure', output.data) + 'foo\'s settings - Pagure', output_text) self.assertIn( '\n Token created\n', - output.data) + output_text) self.assertEqual( - output.data.count( + output_text.count( 'Valid' ' until: '), 1) @@ -1729,7 +1806,7 @@ class PagureFlaskApptests(tests.Modeltests): # Token doesn't exist output = self.app.post('/settings/token/revoke/foobar') self.assertEqual(output.status_code, 404) - self.assertTrue('

    Page not found (404)

    ' in output.data) + self.assertTrue('

    Page not found (404)

    ' in output.get_data(as_text=True)) # Create the foobar API token but associated w/ the user 'foo' item = pagure.lib.model.Token( @@ -1744,7 +1821,7 @@ class PagureFlaskApptests(tests.Modeltests): # Token not associated w/ this user output = self.app.post('/settings/token/revoke/foobar') self.assertEqual(output.status_code, 404) - self.assertTrue('

    Page not found (404)

    ' in output.data) + self.assertTrue('

    Page not found (404)

    ' in output.get_data(as_text=True)) user.username = 'foo' with tests.user_set(self.app.application, user): @@ -1752,14 +1829,15 @@ class PagureFlaskApptests(tests.Modeltests): output = self.app.post( '/settings/token/revoke/foobar', follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - "foo's settings - Pagure", output.data) + "foo's settings - Pagure", output_text) self.assertEqual( - output.data.count( + output_text.count( 'Valid' ' until: '), 1) - csrf_token = output.data.split( + csrf_token = output_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { @@ -1771,10 +1849,11 @@ class PagureFlaskApptests(tests.Modeltests): '/settings/token/revoke/foobar', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - "foo's settings - Pagure", output.data) + "foo's settings - Pagure", output_text) self.assertEqual( - output.data.count( + output_text.count( 'Valid' ' until: '), 0) @@ -1787,10 +1866,11 @@ class PagureFlaskApptests(tests.Modeltests): '/settings/token/revoke/foobar', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - "foo's settings - Pagure", output.data) + "foo's settings - Pagure", output_text) self.assertEqual( - output.data.count( + output_text.count( 'Valid' ' until: '), 0) @@ -1841,11 +1921,14 @@ class PagureFlaskAppNoDocstests(tests.Modeltests): output = self.app.post('/new/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - u'
    \nProject #1
    ', output.data) - self.assertIn(u'

    This repo is brand new!

    ', output.data) + '
    \nProject #1
    ', + output_text) + self.assertIn('

    This repo is brand new!

    ', + output_text) self.assertIn( - u'Overview - project-1 - Pagure', output.data) + 'Overview - project-1 - Pagure', output_text) # After projects = pagure.lib.search_projects(self.session) @@ -1895,12 +1978,14 @@ class PagureFlaskAppNoTicketstests(tests.Modeltests): output = self.app.post('/new/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - u'
    \nProject #1
    ', - output.data) - self.assertIn(u'

    This repo is brand new!

    ', output.data) + '
    \nProject #1
    ', + output_text) + self.assertIn('

    This repo is brand new!

    ', + output_text) self.assertIn( - u'Overview - project-1 - Pagure', output.data) + 'Overview - project-1 - Pagure', output_text) # After projects = pagure.lib.search_projects(self.session) diff --git a/tests/test_pagure_flask_ui_app_give_project.py b/tests/test_pagure_flask_ui_app_give_project.py index 3e71b22..8181e68 100644 --- a/tests/test_pagure_flask_ui_app_give_project.py +++ b/tests/test_pagure_flask_ui_app_give_project.py @@ -74,7 +74,7 @@ class PagureFlaskGiveRepotests(tests.SimplePagureTest): self.assertEqual(output.status_code, 200) self.assertIn( 'Overview - test - Pagure', - output.data) + output.get_data(as_text=True)) self._check_user() @@ -99,7 +99,7 @@ class PagureFlaskGiveRepotests(tests.SimplePagureTest): self.assertEqual(output.status_code, 404) self.assertIn( '

    No such user foobar found

    ', - output.data) + output.get_data(as_text=True)) self._check_user() @@ -121,7 +121,7 @@ class PagureFlaskGiveRepotests(tests.SimplePagureTest): output = self.app.post( '/test/give', data=data, follow_redirects=True) self.assertEqual(output.status_code, 404) - self.assertIn('

    No user specified

    ', output.data) + self.assertIn('

    No user specified

    ', output.get_data(as_text=True)) self._check_user() @@ -146,7 +146,7 @@ class PagureFlaskGiveRepotests(tests.SimplePagureTest): self.assertEqual(output.status_code, 403) self.assertIn( '

    You are not allowed to change the settings for this ' - 'project

    ', output.data) + 'project

    ', output.get_data(as_text=True)) self._check_user() @@ -171,7 +171,7 @@ class PagureFlaskGiveRepotests(tests.SimplePagureTest): self.assertEqual(output.status_code, 403) self.assertIn( '

    You are not allowed to change the settings for this ' - 'project

    ', output.data) + 'project

    ', output.get_data(as_text=True)) self._check_user() @@ -207,7 +207,7 @@ class PagureFlaskGiveRepotests(tests.SimplePagureTest): self.assertEqual(output.status_code, 403) self.assertIn( '

    You are not allowed to give this project

    ', - output.data) + output.get_data(as_text=True)) self._check_user() @@ -241,7 +241,7 @@ class PagureFlaskGiveRepotests(tests.SimplePagureTest): self.assertIn( '\n The project has been ' 'transferred to foo\n', - output.data) + output.get_data(as_text=True)) self._check_user('foo') @@ -269,7 +269,7 @@ class PagureFlaskGiveRepotests(tests.SimplePagureTest): self.assertIn( '\n The project has been ' 'transferred to foo\n', - output.data) + output.get_data(as_text=True)) self._check_user('foo') # Make sure that the user giving the project is still an admin @@ -311,7 +311,7 @@ class PagureFlaskGiveRepotests(tests.SimplePagureTest): self.assertIn( '\n The project has been ' 'transferred to foo\n', - output.data) + output.get_data(as_text=True)) self._check_user('foo') # Make sure that the user giving the project is still an admin diff --git a/tests/test_pagure_flask_ui_app_index.py b/tests/test_pagure_flask_ui_app_index.py index 092f910..5c44ad7 100644 --- a/tests/test_pagure_flask_ui_app_index.py +++ b/tests/test_pagure_flask_ui_app_index.py @@ -40,17 +40,19 @@ class PagureFlaskAppIndextests(tests.Modeltests): self.assertEqual(output.status_code, 200) self.assertIn( 'Home - Pagure HTML title set', - output.data) + output.get_data(as_text=True)) def test_index_logged_out(self): """ Test the index endpoint when logged out. """ output = self.app.get('/') self.assertEqual(output.status_code, 200) - self.assertIn('Home - Pagure', output.data) + output_text = output.get_data(as_text=True) + self.assertIn('Home - Pagure', output_text) self.assertIn( '

    All Projects ' - '0

    ', output.data) + '0', + output_text) tests.create_projects(self.session) @@ -58,7 +60,8 @@ class PagureFlaskAppIndextests(tests.Modeltests): self.assertEqual(output.status_code, 200) self.assertIn( '

    All Projects ' - '3

    ', output.data) + '3', + output.get_data(as_text=True)) def test_index_logged_in(self): """ Test the index endpoint when logged in. """ @@ -78,16 +81,17 @@ class PagureFlaskAppIndextests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.get('/?repopage=abc&forkpage=def') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Projects 1', - output.data) + output_text) self.assertIn( 'Forks 0', - output.data) + output_text) self.assertEqual( - output.data.count('

    No group found

    '), 1) + output_text.count('

    No group found

    '), 1) self.assertEqual( - output.data.count('
    '), 6) + output_text.count('
    '), 6) def test_index_commit_access_while_admin(self): """ Test the index endpoint filter for commit access only when user @@ -109,16 +113,17 @@ class PagureFlaskAppIndextests(tests.Modeltests): # Before output = self.app.get('/?acl=commit') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Projects 1', - output.data) + output_text) self.assertIn( 'Forks 0', - output.data) + output_text) self.assertEqual( - output.data.count('

    No group found

    '), 1) + output_text.count('

    No group found

    '), 1) self.assertEqual( - output.data.count('
    '), 6) + output_text.count('
    '), 6) # Add foo to test with admin level project = pagure.lib._get_project(self.session, 'test') @@ -134,16 +139,17 @@ class PagureFlaskAppIndextests(tests.Modeltests): # After output = self.app.get('/?acl=commit') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Projects 2', - output.data) + output_text) self.assertIn( 'Forks 0', - output.data) + output_text) self.assertEqual( - output.data.count('

    No group found

    '), 1) + output_text.count('

    No group found

    '), 1) self.assertEqual( - output.data.count('
    '), 6) + output_text.count('
    '), 6) def test_index_commit_access_while_commit(self): """ Test the index endpoint filter for commit access only when user @@ -165,16 +171,17 @@ class PagureFlaskAppIndextests(tests.Modeltests): # Before output = self.app.get('/?acl=commit') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Projects 1', - output.data) + output_text) self.assertIn( 'Forks 0', - output.data) + output_text) self.assertEqual( - output.data.count('

    No group found

    '), 1) + output_text.count('

    No group found

    '), 1) self.assertEqual( - output.data.count('
    '), 6) + output_text.count('
    '), 6) # Add foo to test with commit level project = pagure.lib._get_project(self.session, 'test') @@ -190,16 +197,17 @@ class PagureFlaskAppIndextests(tests.Modeltests): # After output = self.app.get('/?acl=commit') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Projects 2', - output.data) + output_text) self.assertIn( 'Forks 0', - output.data) + output_text) self.assertEqual( - output.data.count('

    No group found

    '), 1) + output_text.count('

    No group found

    '), 1) self.assertEqual( - output.data.count('
    '), 6) + output_text.count('
    '), 6) def test_index_commit_access_while_ticket(self): """ Test the index endpoint filter for commit access only when user @@ -221,16 +229,17 @@ class PagureFlaskAppIndextests(tests.Modeltests): # Before output = self.app.get('/?acl=ticket') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Projects 1', - output.data) + output_text) self.assertIn( 'Forks 0', - output.data) + output_text) self.assertEqual( - output.data.count('

    No group found

    '), 1) + output_text.count('

    No group found

    '), 1) self.assertEqual( - output.data.count('
    '), 6) + output_text.count('
    '), 6) # Add foo to test with ticket level project = pagure.lib._get_project(self.session, 'test') @@ -246,16 +255,17 @@ class PagureFlaskAppIndextests(tests.Modeltests): # After - projects with ticket access aren't shown output = self.app.get('/?acl=ticket') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Projects 1', - output.data) + output_text) self.assertIn( 'Forks 0', - output.data) + output_text) self.assertEqual( - output.data.count('

    No group found

    '), 1) + output_text.count('

    No group found

    '), 1) self.assertEqual( - output.data.count('
    '), 6) + output_text.count('
    '), 6) def test_index_admin_access_while_admin(self): """ Test the index endpoint filter for admin access only when user @@ -277,16 +287,17 @@ class PagureFlaskAppIndextests(tests.Modeltests): # Before output = self.app.get('/?acl=admin') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Projects 1', - output.data) + output_text) self.assertIn( 'Forks 0', - output.data) + output_text) self.assertEqual( - output.data.count('

    No group found

    '), 1) + output_text.count('

    No group found

    '), 1) self.assertEqual( - output.data.count('
    '), 6) + output_text.count('
    '), 6) # Add foo to test with commit level project = pagure.lib._get_project(self.session, 'test') @@ -302,16 +313,17 @@ class PagureFlaskAppIndextests(tests.Modeltests): # After output = self.app.get('/?acl=admin') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Projects 2', - output.data) + output_text) self.assertIn( 'Forks 0', - output.data) + output_text) self.assertEqual( - output.data.count('

    No group found

    '), 1) + output_text.count('

    No group found

    '), 1) self.assertEqual( - output.data.count('
    '), 6) + output_text.count('
    '), 6) def test_index_admin_access_while_commit(self): """ Test the index endpoint filter for admin access only when user @@ -333,16 +345,17 @@ class PagureFlaskAppIndextests(tests.Modeltests): # Before output = self.app.get('/?acl=admin') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Projects 1', - output.data) + output_text) self.assertIn( 'Forks 0', - output.data) + output_text) self.assertEqual( - output.data.count('

    No group found

    '), 1) + output_text.count('

    No group found

    '), 1) self.assertEqual( - output.data.count('
    '), 6) + output_text.count('
    '), 6) # Add foo to test with commit level project = pagure.lib._get_project(self.session, 'test') @@ -358,16 +371,17 @@ class PagureFlaskAppIndextests(tests.Modeltests): # After output = self.app.get('/?acl=admin') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Projects 1', - output.data) + output_text) self.assertIn( 'Forks 0', - output.data) + output_text) self.assertEqual( - output.data.count('

    No group found

    '), 1) + output_text.count('

    No group found

    '), 1) self.assertEqual( - output.data.count('
    '), 6) + output_text.count('
    '), 6) def test_index_main_admin_access_while_commit(self): """ Test the index endpoint filter for main admin access only when @@ -389,16 +403,17 @@ class PagureFlaskAppIndextests(tests.Modeltests): # Before output = self.app.get('/?acl=main admin') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Projects 1', - output.data) + output_text) self.assertIn( 'Forks 0', - output.data) + output_text) self.assertEqual( - output.data.count('

    No group found

    '), 1) + output_text.count('

    No group found

    '), 1) self.assertEqual( - output.data.count('
    '), 6) + output_text.count('
    '), 6) # Add foo to test with commit level project = pagure.lib._get_project(self.session, 'test') @@ -414,16 +429,17 @@ class PagureFlaskAppIndextests(tests.Modeltests): # After output = self.app.get('/?acl=main admin') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Projects 1', - output.data) + output_text) self.assertIn( 'Forks 0', - output.data) + output_text) self.assertEqual( - output.data.count('

    No group found

    '), 1) + output_text.count('

    No group found

    '), 1) self.assertEqual( - output.data.count('
    '), 6) + output_text.count('
    '), 6) def test_index_fork_without_parent(self): """ Test the index view: forks should display either their parent @@ -447,12 +463,13 @@ class PagureFlaskAppIndextests(tests.Modeltests): # Before output = self.app.get('/') self.assertEqual(output.status_code, 200) - + output_text = output.get_data(as_text=True) self.assertIn( 'My Forks 1', - output.data) - segment = output.data.split('My Forks')[1].split('My Groups')[0] - self.assertRegexpMatches( + output_text) + segment = output_text.split('My Forks')[1].split('My Groups')[0] + six.assertRegex( + self, segment, r'foo/test3(\s*<[^>]+?>\s*)*?forked from(\s*<[^>]+?>\s*)*?test' ) @@ -466,12 +483,13 @@ class PagureFlaskAppIndextests(tests.Modeltests): # Check page again output = self.app.get('/') self.assertEqual(output.status_code, 200) - + output_text = output.get_data(as_text=True) self.assertIn( 'My Forks 1', - output.data) - segment = output.data.split('My Forks')[1].split('My Groups')[0] - self.assertRegexpMatches( + output_text) + segment = output_text.split('My Forks')[1].split('My Groups')[0] + six.assertRegex( + self, segment, r'foo/test3(\s*<[^>]+?>\s*)*?forked from a deleted repository' ) diff --git a/tests/test_pagure_flask_ui_fork.py b/tests/test_pagure_flask_ui_fork.py index 8d09a2e..ba6dee8 100644 --- a/tests/test_pagure_flask_ui_fork.py +++ b/tests/test_pagure_flask_ui_fork.py @@ -8,6 +8,8 @@ """ +from __future__ import unicode_literals + __requires__ = ['SQLAlchemy >= 0.8'] import pkg_resources @@ -262,25 +264,27 @@ class PagureFlaskForktests(tests.Modeltests): # View the pull-request output = self.app.get('/test/pull-request/1') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) #self.assertIn( #'

    PR#1\n' - #' PR from the feature branch\n

    ', output.data) + #' PR from the feature branch\n', + #output_text) self.assertIn( - 'title="View file as of 2a552b">sources', output.data) + 'title="View file as of 2a552b">sources', output_text) # Test if the `open changed file icon` is displayed. self.assertIn( 'class="open_changed_file_icon_wrap">' - '', output.data) + '
    ', output_text) self.assertIn( '+3', output.data) + 'pull-xs-right text-mono">+3', output_text) self.assertIn( '-1', - output.data) + output_text) @patch('pagure.lib.notify.send_email') def test_merge_request_pull_FF(self, send_email): @@ -300,14 +304,16 @@ class PagureFlaskForktests(tests.Modeltests): output = self.app.post( '/test/pull-request/1/merge', data={}, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'PR#1: PR from the feature branch - test\n - ' - 'Pagure', output.data) + 'Pagure', output_text) #self.assertIn( #'

    PR#1\n' - #' PR from the feature branch\n

    ', output.data) + #' PR from the feature branch\n', + #output_text) self.assertIn( - 'title="View file as of 2a552b">sources', output.data) + 'title="View file as of 2a552b">sources', output_text) # Wrong project data = { @@ -362,16 +368,17 @@ class PagureFlaskForktests(tests.Modeltests): output = self.app.post( '/test/pull-request/1/merge', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'PR#1: PR from the feature branch - test\n - ' - 'Pagure', output.data) + 'Pagure', output_text) self.assertIn( '

    PR#1\n' ' PR from the feature branch\n ', - output.data) + output_text) self.assertIn( '\n This request must be ' - 'assigned to be merged', output.data) + 'assigned to be merged', output_text) # PR assigned but not to this user self.session.commit() @@ -384,13 +391,14 @@ class PagureFlaskForktests(tests.Modeltests): output = self.app.post( '/test/pull-request/1/merge', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '

    PR#1\n' ' PR from the feature branch\n ', - output.data) + output_text) self.assertIn( '\n Only the assignee can ' - 'merge this review', output.data) + 'merge this review', output_text) # Project w/ minimal PR score self.session.commit() @@ -404,14 +412,15 @@ class PagureFlaskForktests(tests.Modeltests): output = self.app.post( '/test/pull-request/1/merge', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '

    PR#1\n' ' PR from the feature branch\n ', - output.data) + output_text) self.assertIn( '\n This request does not ' 'have the minimum review score necessary to be merged', - output.data) + output_text) # Merge self.session.commit() @@ -423,14 +432,15 @@ class PagureFlaskForktests(tests.Modeltests): output = self.app.post( '/test/pull-request/1/merge', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Overview - test - Pagure', output.data) + 'Overview - test - Pagure', output_text) self.assertIn( - 'A commit on branch feature', output.data) + 'A commit on branch feature', output_text) self.assertNotIn( - 'Merge #1 `PR from the feature branch`', output.data) + 'Merge #1 `PR from the feature branch`', output_text) # Ensure we have the new commit - commits = _get_commits(output.data) + commits = _get_commits(output_text) self.assertEqual( commits, [ @@ -443,7 +453,7 @@ class PagureFlaskForktests(tests.Modeltests): output = self.app.get('/test/pull-request/1') self.assertIn( '

    Pull-Request has been merged by pingou

    ', - output.data) + output.get_data(as_text=True)) @patch('pagure.lib.notify.send_email') def test_merge_request_pull_merge(self, send_email): @@ -473,13 +483,13 @@ class PagureFlaskForktests(tests.Modeltests): '/test/pull-request/1/merge', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertIn( - 'Overview - test - Pagure', output.data) + 'Overview - test - Pagure', output.get_data(as_text=True)) # Check if the closing notification was added output = self.app.get('/test/pull-request/1') self.assertIn( '

    Pull-Request has been merged by pingou

    ', - output.data) + output.get_data(as_text=True)) @patch('pagure.lib.notify.send_email') def test_merge_request_pull_merge_with_delete_branch(self, send_email): @@ -507,11 +517,12 @@ class PagureFlaskForktests(tests.Modeltests): output = self.app.post( '/test/pull-request/1/merge', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Overview - test - Pagure', output.data) + 'Overview - test - Pagure', output_text) # Check the branch is not mentioned self.assertNotIn( - 'PR#1\n' ' PR from the feature branch\n ', - output.data) - self.assertIn('Merge conflicts!', output.data) + output_text) + self.assertIn('Merge conflicts!', output_text) @patch('pagure.lib.notify.send_email') def test_merge_request_pull_conflicts_with_delete_branch(self, send_email): @@ -572,15 +584,16 @@ class PagureFlaskForktests(tests.Modeltests): output = self.app.post( '/test/pull-request/1/merge', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '

    PR#1\n' ' PR from the feature-branch branch\n ', - output.data) - self.assertIn('Merge conflicts!', output.data) + output_text) + self.assertIn('Merge conflicts!', output_text) # Check the branch still exists output = self.app.get('/test') - self.assertIn('feature-branch', output.data) + self.assertIn('feature-branch', output.get_data(as_text=True)) @patch('pagure.lib.notify.send_email') def test_merge_request_pull_nochange(self, send_email): @@ -609,18 +622,19 @@ class PagureFlaskForktests(tests.Modeltests): output = self.app.post( '/test/pull-request/1/merge', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '

    PR#1\n' ' Merged', - output.data) + output_text) self.assertIn('Nothing to do, changes were already merged', - output.data) + output_text) # Check if the closing notification was added output = self.app.get('/test/pull-request/1') self.assertIn( '

    Pull-Request has been merged by pingou

    ', - output.data) + output.get_data(as_text=True)) @patch('pagure.lib.notify.send_email') def test_request_pull_close(self, send_email): @@ -631,12 +645,13 @@ class PagureFlaskForktests(tests.Modeltests): output = self.app.get('/test/pull-request/1') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '

    PR#1\n' - ' ', output.data) - self.assertIn('
    Merged by\n', output.data) + ' ', output_text) + self.assertIn('
    Merged by\n', output_text) self.assertIn( - 'title="View file as of 2a552b">sources', output.data) + 'title="View file as of 2a552b">sources', output_text) @patch('pagure.lib.notify.send_email') def test_request_pull_disabled(self, send_email): @@ -738,11 +753,13 @@ class PagureFlaskForktests(tests.Modeltests): output = self.app.get('/test/pull-request/1') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '

    PR#1\n' - ' PR from the feature branch\n

    ', output.data) + ' PR from the feature branch\n

    ', output_text) self.assertTrue( - output.data.count('Overview - test - Pagure', output.data) + 'Overview - test - Pagure', + output_text) self.assertIn( - u'\n Fork is empty, there are no ' - u'commits to create a pull request with', output.data) + '\n Fork is empty, there are no ' + 'commits to create a pull request with', + output_text) shutil.rmtree(newpath) @@ -824,57 +844,61 @@ class PagureFlaskForktests(tests.Modeltests): output = self.app.get('/test/pull-requests') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '

    \n 0 Pull Requests (of 0)\n

    ', - output.data) + output_text) # Open is primary self.assertIn( 'Open', output.data) + 'href="/test/pull-requests">Open', output_text) self.assertIn( 'Closed', output.data) + 'href="/test/pull-requests?status=0">Closed', output_text) self.set_up_git_repo(new_project=None, branch_from='feature') output = self.app.get('/test/pull-requests') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '

    \n 1 Pull Requests (of 1)\n

    ', - output.data) + output_text) # Open is primary self.assertIn( 'Open', output.data) + 'href="/test/pull-requests">Open', output_text) self.assertIn( 'Closed', output.data) + 'href="/test/pull-requests?status=0">Closed', output_text) output = self.app.get('/test/pull-requests?status=Closed') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '

    \n 0 Closed Pull Requests (of 0)\n

    ', - output.data) + output_text) # Close is primary self.assertIn( 'Open', output.data) + 'href="/test/pull-requests">Open', output_text) self.assertIn( 'Closed', output.data) + 'href="/test/pull-requests?status=0">Closed', output_text) output = self.app.get('/test/pull-requests?status=0') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '

    \n 0 Closed/Merged Pull Requests (of 0)\n

    ', - output.data) + output_text) # Close is primary self.assertIn( 'Open', output.data) + 'href="/test/pull-requests">Open', output_text) self.assertIn( 'Closed', output.data) + 'href="/test/pull-requests?status=0">Closed', output_text) # Project w/o pull-request repo = pagure.lib.get_authorized_project(self.session, 'test') @@ -908,7 +932,7 @@ class PagureFlaskForktests(tests.Modeltests): self.assertEqual(output.status_code, 200) npatch = [] - for row in output.data.split('\n'): + for row in output.get_data(as_text=True).split('\n'): if row.startswith('Date:'): continue if row.startswith('From '): @@ -1002,7 +1026,7 @@ index 9f44358..2a552bb 100644 \ No newline at end of file """ - self.assertEqual(output.data, exp) + self.assertEqual(output.get_data(as_text=True), exp) # Project w/o pull-request repo = pagure.lib.get_authorized_project(self.session, 'test') @@ -1026,7 +1050,7 @@ index 9f44358..2a552bb 100644 self.assertEqual(output.status_code, 200) npatch = [] - for row in output.data.split('\n'): + for row in output.get_data(as_text=True).split('\n'): if row.startswith('Date:'): continue if row.startswith('From '): @@ -1143,7 +1167,7 @@ index 9f44358..2a552bb 100644 self.assertEqual(output.status_code, 200) npatch = [] - for row in output.data.split('\n'): + for row in output.get_data(as_text=True).split('\n'): if row.startswith('Date:'): continue if row.startswith('From '): @@ -1229,13 +1253,17 @@ index 0000000..2a552bb self.assertEqual(req.id, 1) self.assertEqual(req.title, 'PR from the feature branch') - output = self.app.get('/test/pull-request/1.patch', follow_redirects=True) + output = self.app.get('/test/pull-request/1.patch', + follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Overview - test - Pagure', output.data) + 'Overview - test - Pagure', + output_text) self.assertIn( - u'\n Fork is empty, there are no ' - u'commits to create a pull request with', output.data) + '\n Fork is empty, there are no ' + 'commits to create a pull request with', + output_text) shutil.rmtree(newpath) @@ -1258,11 +1286,12 @@ index 0000000..2a552bb output = self.app.post( '/test/pull-request/cancel/1', follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Overview - test - Pagure', output.data) + 'Overview - test - Pagure', output_text) self.assertIn( '\n Invalid input submitted', - output.data) + output_text) output = self.app.get('/test/pull-request/1') self.assertEqual(output.status_code, 200) @@ -1318,11 +1347,12 @@ index 0000000..2a552bb '/test/pull-request/cancel/1', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Overview - test - Pagure', output.data) + 'Overview - test - Pagure', output_text) self.assertIn( '\n Pull request canceled!', - output.data) + output_text) @patch('pagure.lib.notify.send_email', MagicMock(return_value=True)) def test_update_pull_requests_assign(self): @@ -1348,15 +1378,16 @@ index 0000000..2a552bb output = self.app.post( '/test/pull-request/1/update', follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'PR#1: PR from the feature branch - test\n - ' - 'Pagure', output.data) + 'Pagure', output_text) self.assertIn( '

    PR#1\n' - ' PR from the feature branch\n', output.data) + ' PR from the feature branch\n', output_text) self.assertNotIn( '\n Request assigned', - output.data) + output_text) output = self.app.get('/test/pull-request/1') self.assertEqual(output.status_code, 200) @@ -1372,15 +1403,16 @@ index 0000000..2a552bb '/test/pull-request/1/update', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'PR#1: PR from the feature branch - test\n - ' - 'Pagure', output.data) + 'Pagure', output_text) self.assertIn( '

    PR#1\n' - ' PR from the feature branch\n', output.data) + ' PR from the feature branch\n', output_text) self.assertNotIn( '\n Request assigned', - output.data) + output_text) # Invalid assignee data = { @@ -1392,15 +1424,16 @@ index 0000000..2a552bb '/test/pull-request/1/update', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'PR#1: PR from the feature branch - test\n - ' - 'Pagure', output.data) + 'Pagure', output_text) self.assertIn( '

    PR#1\n' - ' PR from the feature branch\n', output.data) + ' PR from the feature branch\n', output_text) self.assertIn( '\n No user "bar" found', - output.data) + output_text) # Assign the PR data = { @@ -1421,15 +1454,16 @@ index 0000000..2a552bb '/test/pull-request/1/update', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'PR#1: PR from the feature branch - test\n - ' - 'Pagure', output.data) + 'Pagure', output_text) self.assertIn( '

    PR#1\n' - ' PR from the feature branch\n', output.data) + ' PR from the feature branch\n', output_text) self.assertIn( '\n Request assigned', - output.data) + output_text) # Pull-Request closed repo = pagure.lib.get_authorized_project(self.session, 'test') @@ -1485,15 +1519,16 @@ index 0000000..2a552bb '/test/pull-request/1/update', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'PR#1: PR from the feature branch - test\n - ' - 'Pagure', output.data) + 'Pagure', output_text) self.assertIn( '

    PR#1\n' - ' PR from the feature branch\n', output.data) + ' PR from the feature branch\n', output_text) self.assertNotIn( '\n Request assigned', - output.data) + output_text) # Tag the PR data = { @@ -1505,18 +1540,19 @@ index 0000000..2a552bb '/test/pull-request/1/update', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'PR#1: PR from the feature branch - test\n - ' - 'Pagure', output.data) + 'Pagure', output_text) self.assertIn( '

    PR#1\n' - ' PR from the feature branch\n', output.data) + ' PR from the feature branch\n', output_text) self.assertIn( '\n Pull-request tagged with: black', - output.data) + output_text) self.assertIn( 'title="comma separated list of tags"\n ' - 'value="black" />', output.data) + 'value="black" />', output_text) # Try as another user user.username = 'foo' @@ -1549,7 +1585,7 @@ index 0000000..2a552bb '/test/pull-request/1/update', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) - soup = BeautifulSoup(output.data, "html.parser") + soup = BeautifulSoup(output.get_data(as_text=True), "html.parser") self.assertEqual( soup.find("title").string, 'PR#1: PR from the feature branch - test\n - Pagure' @@ -1623,7 +1659,7 @@ index 0000000..2a552bb output = self.app.get('/new/') self.assertEqual(output.status_code, 200) - self.assertIn('Create new Project', output.data) + self.assertIn('Create new Project', output.get_data(as_text=True)) csrf_token = self.get_csrf(output=output) @@ -1678,31 +1714,34 @@ index 0000000..2a552bb output = self.app.get('/test/diff/feature..master') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Diff from master to feature - test\n - ' - 'Pagure', output.data) + 'Pagure', output_text) self.assertIn( - '

    No commits found

    ', output.data) + '

    No commits found

    ', output_text) output = self.app.get('/test/diff/master..feature') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Diff from feature to master - test\n - ' - 'Pagure', output.data) + 'Pagure', output_text) self.assertNotIn( '', output.data) + 'value="Create">', output_text) user.username = 'pingou' with tests.user_set(self.app.application, user): output = self.app.get('/test/diff/master..feature') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Create new Pull Request for master - test\n - ' - 'Pagure', output.data) + 'Pagure', output_text) self.assertIn( '', - output.data) + output_text) csrf_token = self.get_csrf(output=output) @@ -1716,18 +1755,22 @@ index 0000000..2a552bb output = self.app.post( '/test/diff/master..feature', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'PR#2: foo bar PR - test\n - Pagure', - output.data) - self.assertIn('

    Test Initial Comment

    ', output.data) - self.assertEqual(output.data.count('title="PY C (pingou)"'), 1) + output_text) + self.assertIn('

    Test Initial Comment

    ', + output_text) + self.assertEqual( + output_text.count('title="PY C (pingou)"'), + 1) # Test if the `open changed file icon` is displayed. self.assertIn( 'class="open_changed_file_icon_wrap">' - '', output.data) + '', output_text) # Case 2 - Add an empty initial comment data = { @@ -1739,10 +1782,11 @@ index 0000000..2a552bb output = self.app.post( '/test/diff/master..feature', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'PR#3: foo bar PR - test\n - Pagure', - output.data) - self.assertNotIn('
    Diff from feature to master - test\n - ' - 'Pagure', output.data) + 'Pagure', output_text) self.assertIn( '\n This project enforces the ' - 'Signed-off-by statement on all commits', output.data) + 'Signed-off-by statement on all commits', output_text) self.assertNotIn( '', - output.data) + output_text) self.assertNotIn( '\n This repo enforces that ' - 'all commits are signed off by their author.', output.data) + 'all commits are signed off by their author.', output_text) @patch('pagure.lib.notify.send_email') def test_new_request_pull_req_sign_off_submit(self, send_email): @@ -1815,15 +1860,16 @@ index 0000000..2a552bb output = self.app.get('/test/diff/master..feature') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Create new Pull Request for master - test\n - ' - 'Pagure', output.data) + 'Pagure', output_text) self.assertIn( '\n This project enforces the ' - 'Signed-off-by statement on all commits', output.data) + 'Signed-off-by statement on all commits', output_text) self.assertIn( '', - output.data) + output_text) csrf_token = self.get_csrf(output=output) @@ -1837,20 +1883,21 @@ index 0000000..2a552bb output = self.app.post( '/test/diff/master..feature', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Create new Pull Request for master - test\n - ' - 'Pagure', output.data) + 'Pagure', output_text) # Flashed information message self.assertIn( '\n This project enforces the ' - 'Signed-off-by statement on all commits', output.data) + 'Signed-off-by statement on all commits', output_text) # Flashed error message self.assertIn( '\n This repo enforces that ' - 'all commits are signed off by their author.', output.data) + 'all commits are signed off by their author.', output_text) self.assertIn( '', - output.data) + output_text) @patch('pagure.lib.notify.send_email') def test_request_pull_commit_start_stop(self, send_email): @@ -1873,12 +1920,13 @@ index 0000000..2a552bb with tests.user_set(self.app.application, user): output = self.app.get('/test/diff/master..feature') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Create new Pull Request for master - test\n - ' - 'Pagure', output.data) + 'Pagure', output_text) self.assertIn( '', - output.data) + output_text) csrf_token = self.get_csrf(output=output) @@ -1892,10 +1940,11 @@ index 0000000..2a552bb output = self.app.post( '/test/diff/master..feature', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'PR#2: foo bar PR - test\n - Pagure', - output.data) - self.assertIn('

    Test Initial Comment

    ', output.data) + output_text) + self.assertIn('

    Test Initial Comment

    ', output_text) # Check if commit start and stop have been set for PR#2 request = pagure.lib.search_pull_requests( @@ -1962,8 +2011,8 @@ index 0000000..2a552bb '/fork/ralph/test/diff/master..feature') self.assertEqual(output.status_code, 404) self.assertIn( - u'

    No pull-request allowed on this project

    ', - output.data) + '

    No pull-request allowed on this project

    ', + output.get_data(as_text=True)) @patch('pagure.lib.notify.send_email') def test_new_request_pull_fork_to_fork(self, send_email): @@ -2038,12 +2087,13 @@ index 0000000..2a552bb output = self.app.get( '/fork/ralph/test/diff/master..feature') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Create new Pull Request for master - fork/ralph/test\n - ' - 'Pagure', output.data) + 'Pagure', output_text) self.assertIn( '', - output.data) + output_text) csrf_token = self.get_csrf(output=output) @@ -2058,10 +2108,11 @@ index 0000000..2a552bb '/fork/ralph/test/diff/master..feature', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'PR#1: foo bar PR - fork/foo/test\n - Pagure', - output.data) - self.assertIn('

    Test Initial Comment

    ', output.data) + output_text) + self.assertIn('

    Test Initial Comment

    ', output_text) @patch('pagure.lib.notify.send_email') def test_new_request_pull_fork_to_other_fork(self, send_email): @@ -2131,12 +2182,13 @@ index 0000000..2a552bb output = self.app.get( '/fork/ralph/test/diff/master..feature?project_to=fork/foo/test') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Create new Pull Request for master - fork/ralph/test\n - ' - 'Pagure', output.data) + 'Pagure', output_text) self.assertIn( '', - output.data) + output_text) csrf_token = self.get_csrf(output=output) @@ -2151,20 +2203,22 @@ index 0000000..2a552bb '/fork/ralph/test/diff/master..feature?project_to=fork/foo/test', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'PR#1: foo bar PR - fork/foo/test\n - Pagure', - output.data) - self.assertIn('

    Test Initial Comment

    ', output.data) + output_text) + self.assertIn('

    Test Initial Comment

    ', output_text) # Case 1 - Opening PR to parent repo, shows project_to works output = self.app.post( '/fork/ralph/test/diff/master..feature', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'PR#4: foo bar PR - test\n - Pagure', - output.data) - self.assertIn('

    Test Initial Comment

    ', output.data) + output_text) + self.assertIn('

    Test Initial Comment

    ', output_text) @patch('pagure.lib.notify.send_email') def test_new_request_pull_fork_to_other_unrelated_fork(self, send_email): @@ -2242,8 +2296,8 @@ index 0000000..2a552bb data=data, follow_redirects=True) self.assertEqual(output.status_code, 400) self.assertIn( - u"

    fork/foo/test is not part of fork/ralph/test2's " - u"family

    ", output.data) + "

    fork/foo/test is not part of fork/ralph/test2's " + "family

    ", output.get_data(as_text=True)) @patch('pagure.lib.notify.send_email') def test_new_request_pull_empty_repo(self, send_email): @@ -2275,8 +2329,8 @@ index 0000000..2a552bb follow_redirects=True) self.assertEqual(output.status_code, 400) self.assertIn( - u'

    Fork is empty, there are no commits to create a pull ' - u'request with

    ', output.data) + '

    Fork is empty, there are no commits to create a pull ' + 'request with

    ', output.get_data(as_text=True)) output = self.app.get('/test/new_issue') csrf_token = self.get_csrf(output=output) @@ -2290,8 +2344,8 @@ index 0000000..2a552bb '/test/diff/master..feature', data=data, follow_redirects=True) self.assertEqual(output.status_code, 400) self.assertIn( - u'

    Fork is empty, there are no commits to create a pull ' - u'request with

    ', output.data) + '

    Fork is empty, there are no commits to create a pull ' + 'request with

    ', output.get_data(as_text=True)) shutil.rmtree(newpath) @@ -2325,8 +2379,8 @@ index 0000000..2a552bb '/fork/foo/test/diff/master..master', follow_redirects=True) self.assertEqual(output.status_code, 400) self.assertIn( - u'

    Fork is empty, there are no commits to create a pull ' - u'request with

    ', output.data) + '

    Fork is empty, there are no commits to create a pull ' + 'request with

    ', output.get_data(as_text=True)) shutil.rmtree(newpath) @@ -2349,7 +2403,7 @@ index 0000000..2a552bb output = self.app.post('/test/pull-request/1/comment') self.assertEqual(output.status_code, 200) self.assertTrue( - output.data.startswith('\n
    ')) + output.get_data(as_text=True).startswith('\n
    ')) csrf_token = self.get_csrf(output=output) @@ -2361,13 +2415,14 @@ index 0000000..2a552bb '/test/pull-request/1/comment', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'PR#1: PR from the feature branch - test\n - ' - 'Pagure', output.data) + 'Pagure', output_text) self.assertIn( '\n Comment added', - output.data) - self.assertEqual(output.data.count('title="PY C (pingou)"'), 2) + output_text) + self.assertEqual(output_text.count('title="PY C (pingou)"'), 2) # Project w/o pull-request repo = pagure.lib.get_authorized_project(self.session, 'test') @@ -2408,13 +2463,14 @@ index 0000000..2a552bb output = self.app.post( '/test/pull-request/1/comment/drop', follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '

    PR#1\n' - ' PR from the feature branch\n

    ', output.data) - #self.assertIn('href="#comment-1">¶', output.data) + ' PR from the feature branch\n

    ', output_text) + #self.assertIn('href="#comment-1">¶', output_text) self.assertIn( '

    This look alright but we can do better

    ', - output.data) + output_text) csrf_token = self.get_csrf(output=output) @@ -2441,13 +2497,14 @@ index 0000000..2a552bb '/test/pull-request/1/comment/drop', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '

    PR#1\n' ' PR from the feature branch\n ', - output.data) + output_text) self.assertIn( '\n Comment removed', - output.data) + output_text) # Project w/o pull-request repo = pagure.lib.get_authorized_project(self.session, 'test') @@ -2484,7 +2541,7 @@ index 0000000..2a552bb self.assertEqual(output.status_code, 200) # Creating comment to play with self.assertTrue( - output.data.startswith('\n
    ')) + output.get_data(as_text=True).startswith('\n
    ')) csrf_token = self.get_csrf(output=output) @@ -2497,23 +2554,25 @@ index 0000000..2a552bb follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '

    PR#1\n' ' PR from the feature branch\n ', - output.data) + output_text) self.assertIn( '\n Comment added', - output.data) + output_text) # Check if the comment is there self.assertIn( - '

    This look alright but we can do better

    ', output.data) + '

    This look alright but we can do better

    ', output_text) output = self.app.get('/test/pull-request/1/comment/1/edit') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) - self.assertIn('
    ', output.data) + self.assertIn('
    ', output_text) # Checking if the comment is there in the update page self.assertIn( - 'This look alright but we can do better', output.data) + 'This look alright but we can do better', output_text) csrf_token = self.get_csrf(output=output) @@ -2524,22 +2583,23 @@ index 0000000..2a552bb output = self.app.post( '/test/pull-request/1/comment/1/edit', data=data, follow_redirects=True) + output_text = output.get_data(as_text=True) # Checking if the comment is updated in the main page self.assertIn( - '

    This look alright but we can do better than this.

    ', output.data) + '

    This look alright but we can do better than this.

    ', output_text) self.assertIn( '

    PR#1\n' ' PR from the feature branch\n ', - output.data) + output_text) # Checking if Edited by User is there or not self.assertTrue( 'Edited just now by pingou ' - in output.data + in output_text or 'Edited seconds ago by pingou ' - in output.data) + in output_text) self.assertIn( - '\n Comment updated', output.data) + '\n Comment updated', output_text) # Project w/o pull-request repo = pagure.lib.get_authorized_project(self.session, 'test') @@ -2574,14 +2634,15 @@ index 0000000..2a552bb output = self.app.post( '/test/pull-request/1/merge', data={}, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'PR#1: PR from the feature branch - test\n - ' - 'Pagure', output.data) + 'Pagure', output_text) self.assertIn( '

    PR#1\n' - ' PR from the feature branch\n

    ', output.data) + ' PR from the feature branch\n

    ', output_text) self.assertIn( - 'title="View file as of 2a552b">sources', output.data) + 'title="View file as of 2a552b">sources', output_text) # Wrong project data = { @@ -2622,14 +2683,15 @@ index 0000000..2a552bb output = self.app.post( '/test/pull-request/1/merge', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Overview - test - Pagure', output.data) + 'Overview - test - Pagure', output_text) self.assertIn( - 'Merge #1 `PR from the feature branch`', output.data) + 'Merge #1 `PR from the feature branch`', output_text) self.assertIn( - 'A commit on branch feature', output.data) + 'A commit on branch feature', output_text) # Ensure we have the merge commit - commits = _get_commits(output.data) + commits = _get_commits(output_text) self.assertEqual(commits, [ 'Merge #1 `PR from the feature branch`', 'A commit on branch feature', @@ -2640,7 +2702,7 @@ index 0000000..2a552bb output = self.app.get('/test/pull-request/1') self.assertIn( '

    Pull-Request has been merged by pingou

    ', - output.data) + output.get_data(as_text=True)) @patch('pagure.lib.notify.send_email') def test_internal_endpoint_main_ahead(self, send_email): @@ -2749,16 +2811,14 @@ index 0000000..2a552bb user.username = 'foo' with tests.user_set(self.app.application, user): - output = self.app.get('/new') - csrf_token = output.data.split( - 'name="csrf_token" type="hidden" value="')[1].split('">')[0] + csrf_token = self.get_csrf() output = self.app.post( '/pv/pull-request/ready', data={'repo': 'test', 'csrf_token': csrf_token} ) self.assertEqual(output.status_code, 200) - data = json.loads(output.data) + data = json.loads(output.get_data(as_text=True)) self.assertEqual( data, { @@ -2800,7 +2860,7 @@ index 0000000..2a552bb output = self.app.get('/new/') self.assertEqual(output.status_code, 200) - self.assertIn('Create new Project', output.data) + self.assertIn('Create new Project', output.get_data(as_text=True)) csrf_token = self.get_csrf(output=output) @@ -2842,41 +2902,42 @@ index 0000000..2a552bb self.assertEqual(output.status_code, 200) self.assertIn( 'Fork and Edit\n \n', - output.data) + output.get_data(as_text=True)) # Check fork-edit doesn't show for binary files output = self.app.get('/test/blob/master/f/test.jpg') self.assertEqual(output.status_code, 200) self.assertNotIn( 'Fork and Edit\n \n', - output.data) + output.get_data(as_text=True)) # Check for edit panel output = self.app.post('fork_edit/test/edit/master/f/sources', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '
  • ' '  master' '
  • ' '  sources
  • ', - output.data) + output_text) self.assertIn( '', - output.data) + output_text) # View what's supposed to be an image output = self.app.post('fork_edit/test/edit/master/f/test.jpg', data=data, follow_redirects=True) self.assertEqual(output.status_code, 400) - self.assertIn('

    Cannot edit binary files

    ', output.data) + self.assertIn('

    Cannot edit binary files

    ', output.get_data(as_text=True)) # Check fork-edit shows when user is not logged in output = self.app.get('/test/blob/master/f/sources') self.assertEqual(output.status_code, 200) self.assertIn( 'Fork and Edit\n \n', - output.data) + output.get_data(as_text=True)) # Check if fork-edit shows for different user user.username = 'pingou' @@ -2887,14 +2948,14 @@ index 0000000..2a552bb self.assertEqual(output.status_code, 200) self.assertIn( 'Edit in your fork\n \n', - output.data) + output.get_data(as_text=True)) # Check fork-edit doesn't show for binary output = self.app.get('/test/blob/master/f/test.jpg') self.assertEqual(output.status_code, 200) self.assertNotIn( 'Edit in your fork\n \n', - output.data) + output.get_data(as_text=True)) @patch('pagure.lib.notify.send_email') def test_fork_without_main_repo(self, send_email): @@ -2945,12 +3006,14 @@ index 0000000..2a552bb # UI test for deleted main output = self.app.get('/fork/foo/test') self.assertEqual(output.status_code, 200) - self.assertIn('Fork from a deleted repository\n', output.data) + self.assertIn('Fork from a deleted repository\n', output.get_data(as_text=True)) # Testing commit endpoint output = self.app.get('/fork/foo/test/commits/master') self.assertEqual(output.status_code, 200) - self.assertIn('Commits 2\n

    \n', output.data) + self.assertIn( + 'Commits 2\n

    \n', + output.get_data(as_text=True)) # Test pull-request endpoint output = self.app.get('/fork/foo/test/pull-requests') diff --git a/tests/test_pagure_flask_ui_groups.py b/tests/test_pagure_flask_ui_groups.py index 5c2e095..6411a4e 100644 --- a/tests/test_pagure_flask_ui_groups.py +++ b/tests/test_pagure_flask_ui_groups.py @@ -35,7 +35,7 @@ class PagureFlaskGroupstests(tests.Modeltests): self.assertIn( '

    \n' ' Groups 0', - output.data) + output.get_data(as_text=True)) def test_add_group_index_auth(self): """ Test the presence of the add group button on the front page. """ @@ -45,7 +45,7 @@ class PagureFlaskGroupstests(tests.Modeltests): self.assertEqual(output.status_code, 200) self.assertIn( 'title="Create New Group" aria-hidden="true">', - output.data) + output.get_data(as_text=True)) @patch.dict('pagure.config.config', {'ENABLE_GROUP_MNGT': False}) def test_not_add_group_index_auth(self): @@ -56,7 +56,7 @@ class PagureFlaskGroupstests(tests.Modeltests): self.assertEqual(output.status_code, 200) self.assertNotIn( 'title="Create New Group" aria-hidden="true">', - output.data) + output.get_data(as_text=True)) def test_add_group(self): """ Test the add_group endpoint. """ @@ -72,11 +72,11 @@ class PagureFlaskGroupstests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.get('/group/add') self.assertEqual(output.status_code, 200) - self.assertIn('Create new group', output.data) + self.assertIn('Create new group', output.get_data(as_text=True)) self.assertNotIn( - '', output.data) + '', output.get_data(as_text=True)) - csrf_token = output.data.split( + csrf_token = output.get_data(as_text=True).split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { @@ -85,8 +85,8 @@ class PagureFlaskGroupstests(tests.Modeltests): # Insufficient input output = self.app.post('/group/add', data=data) self.assertEqual(output.status_code, 200) - self.assertIn('Create new group', output.data) - self.assertEqual(output.data.count( + self.assertIn('Create new group', output.get_data(as_text=True)) + self.assertEqual(output.get_data(as_text=True).count( 'This field is required.'), 3) data = { @@ -98,8 +98,8 @@ class PagureFlaskGroupstests(tests.Modeltests): # Missing CSRF output = self.app.post('/group/add', data=data) self.assertEqual(output.status_code, 200) - self.assertIn('Create new group', output.data) - self.assertEqual(output.data.count( + self.assertIn('Create new group', output.get_data(as_text=True)) + self.assertEqual(output.get_data(as_text=True).count( 'This field is required.'), 0) data['csrf_token'] = csrf_token @@ -110,14 +110,14 @@ class PagureFlaskGroupstests(tests.Modeltests): self.assertEqual(output.status_code, 200) self.assertIn( '\n User `pingou` added to ' - 'the group `test_group`.', output.data) + 'the group `test_group`.', output.get_data(as_text=True)) self.assertIn( '\n Group `test_group` created.', - output.data) + output.get_data(as_text=True)) self.assertIn( '

    \n' ' Groups 1', - output.data) + output.get_data(as_text=True)) user = tests.FakeUser( username='pingou', @@ -125,8 +125,8 @@ class PagureFlaskGroupstests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.get('/group/add') self.assertEqual(output.status_code, 200) - self.assertIn('Create new group', output.data) - self.assertIn('', output.data) + self.assertIn('Create new group', output.get_data(as_text=True)) + self.assertIn('', output.get_data(as_text=True)) data = { 'group_name': 'test_admin_group', @@ -142,14 +142,14 @@ class PagureFlaskGroupstests(tests.Modeltests): self.assertEqual(output.status_code, 200) self.assertIn( '\n User `pingou` added to ' - 'the group `test_admin_group`.', output.data) + 'the group `test_admin_group`.', output.get_data(as_text=True)) self.assertIn( '\n Group `test_admin_group` ' - 'created.',output.data) + 'created.',output.get_data(as_text=True)) self.assertIn( '

    \n' ' Groups 2', - output.data) + output.get_data(as_text=True)) def test_edit_group(self): """ Test the edit_group endpoint. """ @@ -161,7 +161,7 @@ class PagureFlaskGroupstests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.get('/group/test_group/edit') self.assertEqual(output.status_code, 404) - self.assertIn('

    Group not found

    ', output.data) + self.assertIn('

    Group not found

    ', output.get_data(as_text=True)) self.test_add_group() @@ -169,21 +169,21 @@ class PagureFlaskGroupstests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.get('/group/foo/edit') self.assertEqual(output.status_code, 404) - self.assertIn('

    Group not found

    ', output.data) + self.assertIn('

    Group not found

    ', output.get_data(as_text=True)) output = self.app.get('/group/test_group/edit') self.assertEqual(output.status_code, 200) self.assertIn( 'Edit group: test_group - Pagure', - output.data) + output.get_data(as_text=True)) self.assertIn( '
    ', - output.data) + output.get_data(as_text=True)) self.assertIn( '', output.data) + '', output.get_data(as_text=True)) - csrf_token = output.data.split( + csrf_token = output.get_data(as_text=True).split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] # Missing CSRF @@ -195,17 +195,16 @@ class PagureFlaskGroupstests(tests.Modeltests): output = self.app.post( '/group/test_group/edit', data=data, follow_redirects=True) - #print output.data self.assertEqual(output.status_code, 200) self.assertIn( 'Edit group: test_group - Pagure', - output.data) + output.get_data(as_text=True)) self.assertIn( '', - output.data) + output.get_data(as_text=True)) self.assertIn( '', output.data) + '', output.get_data(as_text=True)) # User not allowed data['csrf_token'] = csrf_token @@ -215,13 +214,13 @@ class PagureFlaskGroupstests(tests.Modeltests): self.assertEqual(output.status_code, 200) self.assertIn( 'Group test_group - Pagure', - output.data) + output.get_data(as_text=True)) self.assertIn( '\n You are not ' - 'allowed to edit this group', output.data) + 'allowed to edit this group', output.get_data(as_text=True)) self.assertIn( ' ' - ' Test Group', output.data) + ' Test Group', output.get_data(as_text=True)) user.username = 'pingou' with tests.user_set(self.app.application, user): @@ -229,19 +228,19 @@ class PagureFlaskGroupstests(tests.Modeltests): output = self.app.post( '/group/bar/edit', data=data, follow_redirects=True) self.assertEqual(output.status_code, 404) - self.assertIn('

    Group not found

    ', output.data) + self.assertIn('

    Group not found

    ', output.get_data(as_text=True)) output = self.app.post( '/group/test_group/edit', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertIn( - 'Group test_group - Pagure', output.data) + 'Group test_group - Pagure', output.get_data(as_text=True)) self.assertIn( ' ' - ' Test Group', output.data) + ' Test Group', output.get_data(as_text=True)) self.assertIn( 'Group "Test Group edited" (test_group) edited', - output.data) + output.get_data(as_text=True)) def test_group_delete(self): """ Test the group_delete endpoint. """ @@ -254,11 +253,11 @@ class PagureFlaskGroupstests(tests.Modeltests): self.assertEqual(output.status_code, 200) self.assertIn( '

    No groups have been created on this pagure instance ' - 'yet

    ', output.data) + 'yet

    ', output.get_data(as_text=True)) self.assertIn( '

    \n' ' Groups 0', - output.data) + output.get_data(as_text=True)) self.test_add_group() @@ -268,10 +267,10 @@ class PagureFlaskGroupstests(tests.Modeltests): self.assertIn( '

    \n' ' Groups 1', - output.data) + output.get_data(as_text=True)) output = self.app.get('/new/') - csrf_token = output.data.split( + csrf_token = output.get_data(as_text=True).split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] user.username = 'foo' @@ -285,22 +284,22 @@ class PagureFlaskGroupstests(tests.Modeltests): self.assertEqual(output.status_code, 200) self.assertIn( '\n No group `bar` found', - output.data) + output.get_data(as_text=True)) self.assertIn( '

    \n' ' Groups 1', - output.data) + output.get_data(as_text=True)) output = self.app.post( '/group/test_group/delete', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) self.assertIn( '\n You are not allowed to ' - 'delete the group test_group', output.data) + 'delete the group test_group', output.get_data(as_text=True)) self.assertIn( '

    \n' ' Groups 1', - output.data) + output.get_data(as_text=True)) user.username = 'bar' with tests.user_set(self.app.application, user): @@ -317,11 +316,11 @@ class PagureFlaskGroupstests(tests.Modeltests): self.assertEqual(output.status_code, 200) self.assertIn( '\n Group `test_group` has ' - 'been deleted', output.data) + 'been deleted', output.get_data(as_text=True)) self.assertIn( '

    \n' ' Groups 0', - output.data) + output.get_data(as_text=True)) def test_view_group(self): """ Test the view_group endpoint. """ @@ -336,7 +335,7 @@ class PagureFlaskGroupstests(tests.Modeltests): self.assertEqual(output.status_code, 200) self.assertIn( '  ' - 'Test Group', output.data) + 'Test Group', output.get_data(as_text=True)) output = self.app.get('/group/test_admin_group') self.assertEqual(output.status_code, 404) @@ -350,10 +349,10 @@ class PagureFlaskGroupstests(tests.Modeltests): self.assertEqual(output.status_code, 200) self.assertIn( '  ' - 'Test Admin Group', output.data) - self.assertEqual(output.data.count('')[0] # No CSRF @@ -365,8 +364,8 @@ class PagureFlaskGroupstests(tests.Modeltests): self.assertEqual(output.status_code, 200) self.assertIn( '  ' - 'Test Admin Group', output.data) - self.assertEqual(output.data.count('\n No user `bar` found', - output.data) + output.get_data(as_text=True)) self.assertIn( '  ' - 'Test Admin Group', output.data) - self.assertEqual(output.data.count('\n User `foo` added to the ' - 'group `test_admin_group`.', output.data) + 'group `test_admin_group`.', output.get_data(as_text=True)) self.assertIn( '  ' - 'Test Admin Group', output.data) - self.assertEqual(output.data.count('  ' - 'Test Group', output.data) - self.assertEqual(output.data.count('')[0] data = {'csrf_token': csrf_token} @@ -433,22 +432,22 @@ class PagureFlaskGroupstests(tests.Modeltests): self.assertEqual(output.status_code, 200) self.assertIn( '\n No user `bar` found', - output.data) + output.get_data(as_text=True)) self.assertIn( '  ' - 'Test Group', output.data) - self.assertEqual(output.data.count('\n Could not find user ' - 'username', output.data) + 'username', output.get_data(as_text=True)) self.assertIn( '  ' - 'Test Group', output.data) - self.assertEqual(output.data.count('\n User `foo` could not be ' - 'found in the group `test_group`', output.data) + 'found in the group `test_group`', output.get_data(as_text=True)) self.assertIn( '  ' - 'Test Group', output.data) - self.assertEqual(output.data.count('\n User `foo` could not be ' - 'found in the group `test_group`', output.data) + 'found in the group `test_group`', output.get_data(as_text=True)) self.assertIn( '  ' - 'Test Group', output.data) - self.assertEqual(output.data.count('\n User `foo` added to the ' - 'group `test_group`.', output.data) + 'group `test_group`.', output.get_data(as_text=True)) self.assertIn( '  ' - 'Test Group', output.data) - self.assertEqual(output.data.count('\n User `foo` removed from ' - 'the group `test_group`', output.data) + 'the group `test_group`', output.get_data(as_text=True)) self.assertIn( '  ' - 'Test Group', output.data) - self.assertEqual(output.data.count('= 0.8'] import pkg_resources @@ -55,24 +57,24 @@ class PagureFlaskPrIssueLinkTest(tests.Modeltests): msg = pagure.lib.new_issue( session=self.session, repo=repo, - title=u'tést íssüé', + title='tést íssüé', content='We should work on this', user='pingou', ticketfolder=None ) self.session.commit() - self.assertEqual(msg.title, u'tést íssüé') + self.assertEqual(msg.title, 'tést íssüé') msg = pagure.lib.new_issue( session=self.session, repo=repo, - title=u'tést íssüé #2', + title='tést íssüé #2', content='We should still work on this', user='foo', ticketfolder=None ) self.session.commit() - self.assertEqual(msg.title, u'tést íssüé #2') + self.assertEqual(msg.title, 'tést íssüé #2') # Add a commit to the fork @@ -141,19 +143,18 @@ class PagureFlaskPrIssueLinkTest(tests.Modeltests): output = self.app.get('/test/issue/1') self.assertEqual(output.status_code, 200) self.assertNotIn( - u'Related PR(s)', - output.data.decode('utf-8')) + 'Related PR(s)', + output.get_data(as_text=True)) def test_ticket_link(self): """ Test that no Related PR(s) block is showing in the issue page. """ time.sleep(1) output = self.app.get('/test/issue/2') - print output.data.decode('utf-8') self.assertEqual(output.status_code, 200) self.assertIn( - u'Related PR(s)', - output.data.decode('utf-8')) + 'Related PR(s)', + output.get_data(as_text=True)) if __name__ == '__main__': diff --git a/tests/test_pagure_flask_ui_issues.py b/tests/test_pagure_flask_ui_issues.py index be3610e..0c621b0 100644 --- a/tests/test_pagure_flask_ui_issues.py +++ b/tests/test_pagure_flask_ui_issues.py @@ -8,13 +8,14 @@ """ +from __future__ import unicode_literals + __requires__ = ['SQLAlchemy >= 0.8'] import pkg_resources from unittest.case import SkipTest import json import unittest -import urlparse import shutil import sys import os @@ -22,9 +23,11 @@ try: import pyclamd except ImportError: pyclamd = None +import six import tempfile import re from datetime import datetime, timedelta +from six.moves.urllib.parse import urlparse, parse_qs import pygit2 from bs4 import BeautifulSoup @@ -63,9 +66,9 @@ class PagureFlaskIssuestests(tests.Modeltests): output = self.app.get('/test/new_issue') self.assertEqual(output.status_code, 200) - self.assertTrue( - '
    \n New issue' - in output.data) + self.assertIn( + '
    \n New issue', + output.get_data(as_text=True)) csrf_token = self.get_csrf(output=output) @@ -75,29 +78,32 @@ class PagureFlaskIssuestests(tests.Modeltests): # Insufficient input output = self.app.post('/test/new_issue', data=data) self.assertEqual(output.status_code, 200) - self.assertTrue( - '
    \n New issue' - in output.data) - self.assertEqual(output.data.count( + output_text = output.get_data(as_text=True) + self.assertIn( + '
    \n New issue', + output_text) + self.assertEqual(output_text.count( 'This field is required.'), 2) data['title'] = 'Test issue' output = self.app.post('/test/new_issue', data=data) self.assertEqual(output.status_code, 200) - self.assertTrue( - '
    \n New issue' - in output.data) - self.assertEqual(output.data.count( + output_text = output.get_data(as_text=True) + self.assertIn( + '
    \n New issue', + output_text) + self.assertEqual(output_text.count( 'This field is required.'), 1) data['issue_content'] = 'We really should improve on this issue' data['status'] = 'Open' output = self.app.post('/test/new_issue', data=data) self.assertEqual(output.status_code, 200) - self.assertTrue( - '
    \n New issue' - in output.data) - self.assertEqual(output.data.count( + output_text = output.get_data(as_text=True) + self.assertIn( + '
    \n New issue', + output_text) + self.assertEqual(output_text.count( '\n This field is required.'), 0) @@ -107,7 +113,7 @@ class PagureFlaskIssuestests(tests.Modeltests): self.assertEqual(output.status_code, 404) self.assertIn( '

    No such user found in the database: username

    ', - output.data) + output.get_data(as_text=True)) # User not logged in output = self.app.get('/test/new_issue') @@ -118,13 +124,14 @@ class PagureFlaskIssuestests(tests.Modeltests): output = self.app.post( '/test/new_issue', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Issue #1: Test issue - test - Pagure', - output.data) + output_text) self.assertIn( '', - output.data) + output_text) # Project w/o issue tracker repo = pagure.lib.get_authorized_project(self.session, 'test') @@ -156,13 +163,13 @@ class PagureFlaskIssuestests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.get('/test/new_issue') self.assertEqual(output.status_code, 200) - self.assertTrue( - '
    \n New issue' - in output.data) + self.assertIn( + '
    \n New issue', + output.get_data(as_text=True)) csrf_token = self.get_csrf() - with open(os.path.join(tests.HERE, 'placebo.png'), 'r') as stream: + with open(os.path.join(tests.HERE, 'placebo.png'), 'rb') as stream: data = { 'title': 'Test issue', 'issue_content': 'We really should improve on this issue\n' @@ -177,19 +184,20 @@ class PagureFlaskIssuestests(tests.Modeltests): '/test/new_issue', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Issue #1: Test issue - test - Pagure', - output.data) + output_text) self.assertIn( '', - output.data) + output_text) # Check the image was uploaded self.assertIn( 'href="/test/issue/raw/' '8a06845923010b27bfd8e7e75acff7badc40d1021b4' '994e01f5e11ca40bc3abe', - output.data) + output_text) @patch('pagure.lib.git.update_git') @patch('pagure.lib.notify.send_email') @@ -213,7 +221,7 @@ class PagureFlaskIssuestests(tests.Modeltests): user = tests.FakeUser() user.username = 'pingou' with tests.user_set(self.app.application, user): - with open(os.path.join(tests.HERE, 'placebo.png'), 'r') as stream: + with open(os.path.join(tests.HERE, 'placebo.png'), 'rb') as stream: data = { 'title': 'Test issue', 'issue_content': 'We really should improve on this issue', @@ -248,11 +256,11 @@ class PagureFlaskIssuestests(tests.Modeltests): self.assertEqual(output.status_code, 200) self.assertTrue( '
    \n New issue' - in output.data) + in output.get_data(as_text=True)) csrf_token = self.get_csrf() - with open(os.path.join(tests.HERE, 'placebo.png'), 'r') as stream: + with open(os.path.join(tests.HERE, 'placebo.png'), 'rb') as stream: data = { 'title': 'Test issue3', 'issue_content': 'We really should improve on this issue\n' @@ -267,20 +275,21 @@ class PagureFlaskIssuestests(tests.Modeltests): '/somenamespace/test3/new_issue', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Issue #1: Test issue3 - test3 - Pagure', - output.data) + output_text) self.assertIn( '', - output.data) + output_text) # Check the image was uploaded self.assertIn( 'href="/somenamespace/test3/issue/raw/' '8a06845923010b27bfd8e7e75acff7badc40d1021b4' '994e01f5e11ca40bc3abe', - output.data) + output_text) @patch('pagure.lib.git.update_git') @patch('pagure.lib.notify.send_email') @@ -302,15 +311,15 @@ class PagureFlaskIssuestests(tests.Modeltests): self.assertEqual(output.status_code, 200) self.assertTrue( '
    \n New issue' - in output.data) + in output.get_data(as_text=True)) csrf_token = self.get_csrf() with open( - os.path.join(tests.HERE, 'placebo.png'), 'r' + os.path.join(tests.HERE, 'placebo.png'), 'rb' ) as stream: with open( - os.path.join(tests.HERE, 'pagure.png'), 'r' + os.path.join(tests.HERE, 'pagure.png'), 'rb' ) as stream2: data = { 'title': 'Test issue', @@ -326,24 +335,25 @@ class PagureFlaskIssuestests(tests.Modeltests): '/test/new_issue', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Issue #1: Test issue - test - Pagure', - output.data) + output_text) self.assertIn( '', - output.data) + output_text) # Check the image was uploaded self.assertIn( 'href="/test/issue/raw/' '8a06845923010b27bfd8e7e75acff7badc40d1021b4' '994e01f5e11ca40bc3abe', - output.data) + output_text) self.assertIn( 'href="/test/issue/raw/' '6498a2de405546200b6144da56fc25d0a3976ae688d' 'bfccaca609c8b4480523e', - output.data) + output_text) @patch('pagure.lib.git.update_git') @patch('pagure.lib.notify.send_email') @@ -366,15 +376,15 @@ class PagureFlaskIssuestests(tests.Modeltests): self.assertEqual(output.status_code, 200) self.assertTrue( '
    \n New issue' - in output.data) + in output.get_data(as_text=True)) csrf_token = self.get_csrf() with open( - os.path.join(tests.HERE, 'placebo.png'), 'r' + os.path.join(tests.HERE, 'placebo.png'), 'rb' ) as stream: with open( - os.path.join(tests.HERE, 'pagure.png'), 'r' + os.path.join(tests.HERE, 'pagure.png'), 'rb' ) as stream2: data = { @@ -392,25 +402,26 @@ class PagureFlaskIssuestests(tests.Modeltests): data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Issue #1: Test issue3 - test3 - Pagure', - output.data) + output_text) self.assertIn( '', - output.data) + output_text) # Check the image was uploaded self.assertIn( 'href="/somenamespace/test3/issue/raw/' '8a06845923010b27bfd8e7e75acff7badc40d1021b4' '994e01f5e11ca40bc3abe', - output.data) + output_text) self.assertIn( 'href="/somenamespace/test3/issue/raw/' '6498a2de405546200b6144da56fc25d0a3976ae688d' 'bfccaca609c8b4480523e', - output.data) + output_text) def test_new_issue_metadata_user(self): """ Test the new_issue endpoint when the user has access to the @@ -427,15 +438,16 @@ class PagureFlaskIssuestests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.get('/test/new_issue') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '
    \n New issue', - output.data) + output_text) self.assertIn( '', - output.data) + output_text) self.assertIn( '', - output.data) + output_text) def test_new_issue_metadata_not_user(self): """ Test the new_issue endpoint when the user does not have access @@ -452,15 +464,16 @@ class PagureFlaskIssuestests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.get('/test/new_issue') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '
    \n New issue', - output.data) + output_text) self.assertNotIn( '', - output.data) + output_text) self.assertNotIn( '', - output.data) + output_text) @patch('pagure.lib.git.update_git', MagicMock(return_value=True)) @patch('pagure.lib.notify.send_email', MagicMock(return_value=True)) @@ -485,15 +498,16 @@ class PagureFlaskIssuestests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.get('/test/new_issue') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '
    \n New issue', - output.data) + output_text) self.assertIn( '', - output.data) + output_text) self.assertIn( '', - output.data) + output_text) csrf_token = self.get_csrf(output=output) @@ -511,25 +525,26 @@ class PagureFlaskIssuestests(tests.Modeltests): '/test/new_issue', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Issue #1: Test issue3 - test - Pagure', - output.data) + output_text) self.assertIn( '', - output.data) + output_text) # Check the metadata self.assertIn( 'title="comma separated list of tags"\n ' - 'value="tag2" />', output.data) + 'value="tag2" />', output_text) self.assertIn( 'placeholder="username"\n value="foo" />', - output.data) + output_text) self.assertIn( '
    \n ' '\n ' - '\n v2.0\n', output.data) + '\n v2.0\n', output_text) @patch('pagure.lib.git.update_git', MagicMock(return_value=True)) @patch('pagure.lib.notify.send_email', MagicMock(return_value=True)) @@ -555,15 +570,16 @@ class PagureFlaskIssuestests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.get('/test/new_issue') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '', output_text) self.assertIn( - '

    \n 0 Open Issues', output.data) + '

    \n 0 Open Issues', output_text) repo = pagure.lib.get_authorized_project(self.session, 'test') # Create some custom fields to play with @@ -682,13 +700,13 @@ class PagureFlaskIssuestests(tests.Modeltests): msg = pagure.lib.new_issue( session=self.session, repo=repo, - title=u'tést íssüé', + title='tést íssüé', content='We should work on this', user='pingou', ticketfolder=None ) self.session.commit() - self.assertEqual(msg.title, u'tést íssüé') + self.assertEqual(msg.title, 'tést íssüé') msg = pagure.lib.set_custom_key_value( session=self.session, @@ -701,14 +719,14 @@ class PagureFlaskIssuestests(tests.Modeltests): msg = pagure.lib.new_issue( session=self.session, repo=repo, - title=u'Tést íssüé with milestone', + title='Tést íssüé with milestone', content='Testing search', user='pingou', milestone='1.1', ticketfolder=None ) self.session.commit() - self.assertEqual(msg.title, u'Tést íssüé with milestone') + self.assertEqual(msg.title, 'Tést íssüé with milestone') msg = pagure.lib.new_issue( session=self.session, @@ -734,157 +752,184 @@ class PagureFlaskIssuestests(tests.Modeltests): # Whole list output = self.app.get('/test/issues') self.assertEqual(output.status_code, 200) - self.assertIn('Issues - test - Pagure', output.data) - self.assertTrue( - '

    \n 2 Open Issues' in output.data) + output_text = output.get_data(as_text=True) + self.assertIn('Issues - test - Pagure', + output_text) + self.assertIn( + '

    \n 2 Open Issues', output_text) self.assertIn( '
    ', output.data) + 'closed issues of total 3 issues">', output_text) self.assertIn( '', output.data) + '3 issues">', output_text) # Verify that the sorting links are correct and the arrow is pointing # down next to the Opened column th_elements = re.findall(r'(.*?)', - output.data, re.M | re.S) + output_text, re.M | re.S) self.assertDictEqual( {'status': ['Open'], 'order_key': ['title'], 'order': ['desc']}, - urlparse.parse_qs(urlparse.urlparse( + parse_qs(urlparse( th_elements[0].split('"')[1]).query) ) self.assertDictEqual( {'status': ['Open'], 'order_key': ['date_created'], 'order': ['asc']}, - urlparse.parse_qs(urlparse.urlparse( + parse_qs(urlparse( th_elements[1].split('"')[1]).query) ) arrow = '' self.assertIn(arrow, th_elements[1]) self.assertDictEqual( {'status': ['Open'], 'order_key': ['last_updated'], 'order': ['desc']}, - urlparse.parse_qs(urlparse.urlparse( + parse_qs(urlparse( th_elements[2].split('"')[1]).query) ) self.assertDictEqual( {'status': ['Open'], 'order_key': ['priority'], 'order': ['desc']}, - urlparse.parse_qs(urlparse.urlparse( + parse_qs(urlparse( th_elements[3].split('"')[1]).query) ) self.assertDictEqual( {'status': ['Open'], 'order_key': ['user'], 'order': ['desc']}, - urlparse.parse_qs(urlparse.urlparse( + parse_qs(urlparse( th_elements[4].split('"')[1]).query) ) self.assertDictEqual( {'status': ['Open'], 'order_key': ['assignee'], 'order': ['desc']}, - urlparse.parse_qs(urlparse.urlparse( + parse_qs(urlparse( th_elements[5].split('"')[1]).query) ) # Status = closed (all but open) output = self.app.get('/test/issues?status=cloSED') self.assertEqual(output.status_code, 200) - self.assertIn('Issues - test - Pagure', output.data) + output_text = output.get_data(as_text=True) + self.assertIn('Issues - test - Pagure', + output_text) self.assertIn( - '

    \n 1 Closed Issues', output.data) + '

    \n 1 Closed Issues', output_text) self.assertIn( '
    ', output.data) + 'title="67% of open issues of total 3 issues">', output_text) self.assertIn( '', output.data) + 'of total 3 issues">', output_text) # Status = fixed output = self.app.get('/test/issues?status=fixed') self.assertEqual(output.status_code, 200) - self.assertIn('Issues - test - Pagure', output.data) + output_text = output.get_data(as_text=True) + self.assertIn('Issues - test - Pagure', + output_text) self.assertTrue( - '

    \n 0 Closed Issues' in output.data) + '

    \n 0 Closed Issues' in output_text) # Status = Invalid output = self.app.get('/test/issues?status=Invalid') self.assertEqual(output.status_code, 200) - self.assertIn('Issues - test - Pagure', output.data) + output_text = output.get_data(as_text=True) + self.assertIn('Issues - test - Pagure', output_text) self.assertTrue( - '

    \n 1 Closed Issues' in output.data) + '

    \n 1 Closed Issues' in output_text) # All tickets output = self.app.get('/test/issues?status=all') self.assertEqual(output.status_code, 200) - self.assertIn('Issues - test - Pagure', output.data) + output_text = output.get_data(as_text=True) + self.assertIn('Issues - test - Pagure', output_text) self.assertTrue( - '

    \n 3 Issues' in output.data) + '

    \n 3 Issues' in output_text) # Unicode search pattern output = self.app.get( '/test/issues?status=all&search_pattern=گروه') self.assertEqual(output.status_code, 200) - self.assertIn('Issues - test - Pagure', output.data) - self.assertIn('0 Issues', output.data) + output_text = output.get_data(as_text=True) + self.assertIn('Issues - test - Pagure', output_text) + self.assertIn('0 Issues', output_text) # Custom key searching output = self.app.get( '/test/issues?status=all&search_pattern=test1:firstissue') self.assertEqual(output.status_code, 200) - self.assertIn('Issues - test - Pagure', output.data) - self.assertIn('1 Issues', output.data) + output_text = output.get_data(as_text=True) + self.assertIn( + 'Issues - test - Pagure', + output_text) + self.assertIn('1 Issues', output_text) # Custom key searching with space output = self.app.get( '/test/issues?status=all&search_pattern=test1:"second issue"') self.assertEqual(output.status_code, 200) - self.assertIn('Issues - test - Pagure', output.data) - self.assertIn('1 Issues', output.data) + output_text = output.get_data(as_text=True) + self.assertIn( + 'Issues - test - Pagure', + output_text) + self.assertIn('1 Issues', output_text) # All tickets - different pagination before = pagure.config.config['ITEM_PER_PAGE'] pagure.config.config['ITEM_PER_PAGE'] = 1 output = self.app.get('/test/issues?status=all') self.assertEqual(output.status_code, 200) - self.assertIn('Issues - test - Pagure', output.data) - self.assertIn('

    \n 1 Issues (of 3)', output.data) + output_text = output.get_data(as_text=True) + self.assertIn( + 'Issues - test - Pagure', + output_text) self.assertIn( - '
  • page 1 of 3
  • ', output.data) + '

    \n 1 Issues (of 3)', + output_text) + self.assertIn( + '
  • page 1 of 3
  • ', output_text) # All tickets - filtered for 1 - checking the pagination output = self.app.get( '/test/issues?status=all&search_pattern=invalid') self.assertEqual(output.status_code, 200) - self.assertIn('Issues - test - Pagure', output.data) - self.assertIn('

    \n 1 Issues (of 1)', output.data) + output_text = output.get_data(as_text=True) + self.assertIn('Issues - test - Pagure', output_text) + self.assertIn('

    \n 1 Issues (of 1)', output_text) self.assertIn( - '
  • page 1 of 1
  • ', output.data) + '
  • page 1 of 1
  • ', output_text) pagure.config.config['ITEM_PER_PAGE'] = before # Search for issues with no milestone MARK output = self.app.get( '/test/issues?milestone=none') self.assertEqual(output.status_code, 200) - self.assertIn('Issues - test - Pagure', output.data) - self.assertIn('1 Open Issues (of 1)', output.data) + output_text = output.get_data(as_text=True) + self.assertIn( + 'Issues - test - Pagure', + output_text) + self.assertIn('1 Open Issues (of 1)', output_text) # Search for issues with no milestone and milestone 1.1 output = self.app.get( '/test/issues?milestone=none&milestone=1.1') self.assertEqual(output.status_code, 200) - self.assertIn('Issues - test - Pagure', output.data) - self.assertIn('2 Open Issues (of 2)', output.data) + output_text = output.get_data(as_text=True) + self.assertIn( + 'Issues - test - Pagure', + output_text) + self.assertIn('2 Open Issues (of 2)', output_text) # Add another issue to test sorting msg = pagure.lib.new_issue( session=self.session, repo=repo, - title=u'Big problÈm!', + title='Big problÈm!', content='I need help ASAP', user='foo', ticketfolder=None ) self.session.commit() - self.assertEqual(msg.title, u'Big problÈm!') + self.assertEqual(msg.title, 'Big problÈm!') # Sort by last_updated output = self.app.get('/test/issues?order_key=last_updated') - tr_elements = re.findall(r'(.*?)', output.data, re.M | re.S) self.assertEqual(output.status_code, 200) + tr_elements = re.findall(r'(.*?)', output.get_data(as_text=True), re.M | re.S) arrowed_th = ('Modified
    \n ') # First table row is the header @@ -902,8 +947,8 @@ class PagureFlaskIssuestests(tests.Modeltests): self.session.add(issue_one) self.session.commit() output = self.app.get('/test/issues?order_key=last_updated') - tr_elements = re.findall(r'(.*?)', output.data, re.M | re.S) self.assertEqual(output.status_code, 200) + tr_elements = re.findall(r'(.*?)', output.get_data(as_text=True), re.M | re.S) # Make sure that issue one is first since it was modified last self.assertIn('href="/test/issue/1"', tr_elements[1]) # Make sure that issue four is second since it was modified before @@ -914,7 +959,7 @@ class PagureFlaskIssuestests(tests.Modeltests): self.assertIn('href="/test/issue/2"', tr_elements[3]) # Now query so that the results are ascending output = self.app.get('/test/issues?order_key=last_updated&order=asc') - tr_elements = re.findall(r'(.*?)', output.data, re.M | re.S) + tr_elements = re.findall(r'(.*?)', output.get_data(as_text=True), re.M | re.S) arrowed_th = ('Modified\n ') # First table row is the header @@ -925,8 +970,8 @@ class PagureFlaskIssuestests(tests.Modeltests): # Sort by title descending output = self.app.get('/test/issues?order_key=title') - tr_elements = re.findall(r'(.*?)', output.data, re.M | re.S) self.assertEqual(output.status_code, 200) + tr_elements = re.findall(r'(.*?)', output.get_data(as_text=True), re.M | re.S) arrowed_th = ('Issue
    \n ') # First table row is the header @@ -937,8 +982,8 @@ class PagureFlaskIssuestests(tests.Modeltests): # Sort by title ascending output = self.app.get('/test/issues?order_key=title&order=asc') - tr_elements = re.findall(r'(.*?)', output.data, re.M | re.S) self.assertEqual(output.status_code, 200) + tr_elements = re.findall(r'(.*?)', output.get_data(as_text=True), re.M | re.S) arrowed_th = ('Issue\n ') # First table row is the header @@ -949,8 +994,8 @@ class PagureFlaskIssuestests(tests.Modeltests): # Sort by user (reporter/author) descending output = self.app.get('/test/issues?order_key=user&order=desc') - tr_elements = re.findall(r'(.*?)', output.data, re.M | re.S) self.assertEqual(output.status_code, 200) + tr_elements = re.findall(r'(.*?)', output.get_data(as_text=True), re.M | re.S) arrowed_th = ('Reporter\n ') # First table row is the header @@ -967,8 +1012,8 @@ class PagureFlaskIssuestests(tests.Modeltests): # Sort by user (reporter/author) ascending output = self.app.get('/test/issues?order_key=user&order=asc') - tr_elements = re.findall(r'(.*?)', output.data, re.M | re.S) self.assertEqual(output.status_code, 200) + tr_elements = re.findall(r'(.*?)', output.get_data(as_text=True), re.M | re.S) arrowed_th = ('Reporter\n ') # First table row is the header @@ -1002,13 +1047,13 @@ class PagureFlaskIssuestests(tests.Modeltests): # Sort by assignee descending output = self.app.get('/test/issues?order_key=assignee&order=desc') - tr_elements = re.findall(r'(.*?)', output.data, re.M | re.S) self.assertEqual(output.status_code, 200) + tr_elements = re.findall(r'(.*?)', output.get_data(as_text=True), re.M | re.S) arrowed_th = ('Assignee\n ') # First table row is the header self.assertIn(arrowed_th, tr_elements[0]) - _check_assignee_link(output.data, [ + _check_assignee_link(output.get_data(as_text=True), [ '/test/issues?status=Open&assignee=pingou', '/test/issues?status=Open&assignee=pingou', '/test/issues?status=Open&assignee=foo', @@ -1016,13 +1061,13 @@ class PagureFlaskIssuestests(tests.Modeltests): # Sort by assignee ascending output = self.app.get('/test/issues?order_key=assignee&order=asc') - tr_elements = re.findall(r'(.*?)', output.data, re.M | re.S) self.assertEqual(output.status_code, 200) + tr_elements = re.findall(r'(.*?)', output.get_data(as_text=True), re.M | re.S) arrowed_th = ('Assignee\n ') # First table row is the header self.assertIn(arrowed_th, tr_elements[0]) - _check_assignee_link(output.data, [ + _check_assignee_link(output.get_data(as_text=True), [ '/test/issues?status=Open&assignee=foo', '/test/issues?status=Open&assignee=pingou', '/test/issues?status=Open&assignee=pingou', @@ -1035,7 +1080,7 @@ class PagureFlaskIssuestests(tests.Modeltests): self.assertEqual(output.status_code, 200) self.assertIn( 'class="btn btn-success btn-sm">New Issue', - output.data) + output.get_data(as_text=True)) # Project w/o issue tracker repo = pagure.lib.get_authorized_project(self.session, 'test') @@ -1053,7 +1098,7 @@ class PagureFlaskIssuestests(tests.Modeltests): self.assertEqual(output.status_code, 200) self.assertNotIn( 'class="btn btn-success btn-sm">New Issue', - output.data) + output.get_data(as_text=True)) @patch('pagure.lib.git.update_git') @patch('pagure.lib.notify.send_email') @@ -1072,13 +1117,13 @@ class PagureFlaskIssuestests(tests.Modeltests): msg = pagure.lib.new_issue( session=self.session, repo=repo, - title=u'Test issue ☃', - content=u'We should work on this ❤', + title='Test issue ☃', + content='We should work on this ❤', user='pingou', ticketfolder=None ) self.session.commit() - self.assertEqual(msg.title, u'Test issue ☃') + self.assertEqual(msg.title, 'Test issue ☃') msg = pagure.lib.new_issue( session=self.session, @@ -1095,16 +1140,18 @@ class PagureFlaskIssuestests(tests.Modeltests): # Whole list output = self.app.get('/test/issues') self.assertEqual(output.status_code, 200) - self.assertIn('Issues - test - Pagure', output.data) + output_text = output.get_data(as_text=True) + self.assertIn('Issues - test - Pagure', output_text) self.assertTrue( - '

    \n 2 Open Issues' in output.data) + '

    \n 2 Open Issues' in output_text) # Unicode search pattern output = self.app.get( '/test/issues?status=all&search_pattern=☃') self.assertEqual(output.status_code, 200) - self.assertIn('Issues - test - Pagure', output.data) - self.assertIn('1 Issues', output.data) + output_text = output.get_data(as_text=True) + self.assertIn('Issues - test - Pagure', output_text) + self.assertIn('1 Issues', output_text) @patch('pagure.lib.git.update_git') @patch('pagure.lib.notify.send_email') @@ -1138,51 +1185,54 @@ class PagureFlaskIssuestests(tests.Modeltests): output = self.app.get('/test/issue/1') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) # Not authentified = No edit self.assertNotIn( '', - output.data) + output_text) self.assertIn( '' 'Login\n to comment on this ticket.', - output.data) + output_text) user = tests.FakeUser() with tests.user_set(self.app.application, user): output = self.app.get('/test/issue/1') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) # Not author nor admin = No edit self.assertNotIn( '', - output.data) + output_text) self.assertNotIn( '\n ' 'Issue close_status updated to: Fixed\n', - output.data) + output_text) self.assertIn( '\n ' 'Issue status updated to: Closed (was: Open)\n', - output.data) + output_text) self.assertTrue( '' - in output.data) + in output_text) # FIXME: There is likely something going wrong in the html # below self.assertIn( @@ -1683,7 +1745,7 @@ class PagureFlaskIssuestests(tests.Modeltests): '''@pingou:
    - Issue close_status updated to: Fixed
    - Issue status updated to: Closed (was: Open)

    ''', - output.data) + output_text) # Add new comment data = { @@ -1695,27 +1757,32 @@ class PagureFlaskIssuestests(tests.Modeltests): output = self.app.post( '/test/issue/1/update', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Issue #1: Test issue - test - Pagure', - output.data) + output_text) self.assertIn( '', - output.data) + output_text) self.assertIn( '\n Comment added', - output.data) + output_text) self.assertNotIn( '\n No changes to edit', - output.data) - self.assertTrue( - '

    Woohoo a second comment!

    ' in output.data) - self.assertEqual(output.data.count('comment_body">'), 2) + output_text) + self.assertIn( + '

    Woohoo a second comment!

    ', + output_text) + self.assertEqual( + output_text.count('comment_body">'), 2) self.assertTrue( '' - in output.data) + in output_text) # 2: one for the original comment, one for the new comment - self.assertEqual(output.data.count('title="PY C (pingou)"'), 2) + self.assertEqual( + output_text.count('title="PY C (pingou)"'), + 2) # Add new tag data = { @@ -1727,19 +1794,22 @@ class PagureFlaskIssuestests(tests.Modeltests): output = self.app.post( '/test/issue/1/update', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Issue #1: Test issue - test - Pagure', - output.data) + output_text) self.assertIn( '
    ', - output.data) - self.assertTrue( - '

    Woohoo a second comment!

    ' in output.data) - self.assertEqual(output.data.count('comment_body">'), 2) + output_text) + self.assertIn( + '

    Woohoo a second comment!

    ', + output_text) + self.assertEqual( + output_text.count('comment_body">'), 2) self.assertTrue( '' - in output.data) + in output_text) # Assign issue to an non-existent user data = { @@ -1751,22 +1821,25 @@ class PagureFlaskIssuestests(tests.Modeltests): output = self.app.post( '/test/issue/1/update', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Issue #1: Test issue - test - Pagure', - output.data) + output_text) self.assertIn( '
    ', - output.data) + output_text) self.assertIn( '\n No user "ralph" found', - output.data) - self.assertTrue( - '

    Woohoo a second comment!

    ' in output.data) - self.assertEqual(output.data.count('comment_body">'), 2) + output_text) + self.assertIn( + '

    Woohoo a second comment!

    ', + output_text) + self.assertEqual( + output_text.count('comment_body">'), 2) self.assertTrue( '' - in output.data) + in output_text) # Assign issue properly data = { @@ -1778,24 +1851,28 @@ class PagureFlaskIssuestests(tests.Modeltests): output = self.app.post( '/test/issue/1/update', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Issue #1: Test issue - test - Pagure', - output.data) + output_text) self.assertIn( '
    ', - output.data) + output_text) self.assertIn( '\n Issue assigned to pingou\n', - output.data) - self.assertTrue( - 'Woohoo a second comment!

    ' in output.data) - self.assertEqual(output.data.count('comment_body">'), 2) + output_text) + self.assertIn( + '
    Woohoo a second comment!

    ', + output_text) + self.assertEqual( + output_text.count('comment_body">'), 2) self.assertTrue( '' - in output.data) + in output_text) # Create another issue with a dependency repo = pagure.lib.get_authorized_project(self.session, 'test') @@ -1828,20 +1905,21 @@ class PagureFlaskIssuestests(tests.Modeltests): output = self.app.post( '/test/issue/2/update', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Issue #2: Test issue - test - Pagure', - output.data) + output_text) self.assertIn( '
    ', - output.data) + output_text) self.assertIn( '\n You cannot close a ticket ' 'that has ticket depending that are still open.', - output.data) + output_text) self.assertTrue( '' - in output.data) + in output_text) # Create private issue repo = pagure.lib.get_authorized_project(self.session, 'test') @@ -1904,13 +1982,14 @@ class PagureFlaskIssuestests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.get('/test/issue/1') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Issue #1: Test issue - test - Pagure', - output.data) + output_text) self.assertIn( '', - output.data) + output_text) csrf_token = self.get_csrf(output=output) @@ -1922,19 +2001,22 @@ class PagureFlaskIssuestests(tests.Modeltests): output = self.app.post( '/test/issue/1/update', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Issue #1: Test issue - test - Pagure', - output.data) + output_text) self.assertIn( '', - output.data) + output_text) self.assertIn( '\n Comment added', - output.data) - self.assertTrue( - '

    Woohoo a second comment!

    ' in output.data) - self.assertEqual(output.data.count('comment_body">'), 2) + output_text) + self.assertIn( + '

    Woohoo a second comment!

    ', + output_text) + self.assertEqual( + output_text.count('comment_body">'), 2) repo = pagure.lib.get_authorized_project(self.session, 'test') issue = pagure.lib.search_issues(self.session, repo, issueid=1) @@ -1964,16 +2046,17 @@ class PagureFlaskIssuestests(tests.Modeltests): output = self.app.post( '/test/issue/1/update', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Issue #1: Test issue - test - Pagure', - output.data) + output_text) self.assertIn( '
    ', - output.data) + output_text) self.assertIn( '\n Comment removed', - output.data) + output_text) # Drop non-existant comment output = self.app.post( @@ -2026,13 +2109,14 @@ class PagureFlaskIssuestests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.get('/test/issue/1') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Issue #1: Test issue - test - Pagure', - output.data) + output_text) self.assertIn( '', - output.data) + output_text) csrf_token = self.get_csrf(output=output) @@ -2044,13 +2128,14 @@ class PagureFlaskIssuestests(tests.Modeltests): output = self.app.post( '/test/issue/1/update', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Issue #1: Test issue - test - Pagure', - output.data) + output_text) self.assertIn( '', - output.data) + output_text) # Add an invalid dependent ticket data = { @@ -2060,17 +2145,18 @@ class PagureFlaskIssuestests(tests.Modeltests): output = self.app.post( '/test/issue/1/update', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Issue #1: Test issue - test - Pagure', - output.data) + output_text) self.assertIn( '', - output.data) + output_text) self.assertNotIn( '\n ' 'Successfully edited issue #1', - output.data) + output_text) repo = pagure.lib.get_authorized_project(self.session, 'test') issue = pagure.lib.search_issues(self.session, repo, issueid=1) @@ -2079,13 +2165,14 @@ class PagureFlaskIssuestests(tests.Modeltests): # Check the icons showing if the issues are blocking/blocked output = self.app.get('/test/issues/') + output_text = output.get_data(as_text=True) self.assertEqual( - output.data.count( + output_text.count( ''), 1) self.assertEqual( - output.data.count( + output_text.count( ''), 1) @@ -2133,7 +2220,7 @@ class PagureFlaskIssuestests(tests.Modeltests): self.assertEqual(output.status_code, 200) self.assertIn( 'Issue #1: Test issue - test - Pagure', - output.data) + output.get_data(as_text=True)) csrf_token = self.get_csrf(output=output) @@ -2147,7 +2234,7 @@ class PagureFlaskIssuestests(tests.Modeltests): self.assertEqual(output.status_code, 200) self.assertIn( 'Issue #1: Test issue - test - Pagure', - output.data) + output.get_data(as_text=True)) repo = pagure.lib.get_authorized_project(self.session, 'test') issue = pagure.lib.search_issues(self.session, repo, issueid=1) @@ -2159,13 +2246,14 @@ class PagureFlaskIssuestests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.get('/test/issue/1') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Issue #1: Test issue - test - Pagure', - output.data) + output_text) self.assertIn( '', - output.data) + output_text) csrf_token = self.get_csrf(output=output) @@ -2177,13 +2265,14 @@ class PagureFlaskIssuestests(tests.Modeltests): output = self.app.post( '/test/issue/1/update', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Issue #1: Test issue - test - Pagure', - output.data) + output_text) self.assertIn( '', - output.data) + output_text) # Add an invalid dependent ticket data = { @@ -2193,17 +2282,18 @@ class PagureFlaskIssuestests(tests.Modeltests): output = self.app.post( '/test/issue/1/update', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Issue #1: Test issue - test - Pagure', - output.data) + output_text) self.assertIn( '', - output.data) + output_text) self.assertNotIn( '\n ' 'Successfully edited issue #1', - output.data) + output_text) self.session.commit() repo = pagure.lib.get_authorized_project(self.session, 'test') @@ -2242,13 +2332,14 @@ class PagureFlaskIssuestests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.get('/test/issue/1') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Issue #1: Test issue - test - Pagure', - output.data) + output_text) self.assertIn( '', - output.data) + output_text) csrf_token = self.get_csrf(output=output) @@ -2265,7 +2356,7 @@ class PagureFlaskIssuestests(tests.Modeltests): output = self.app.post( '/test/issue/1/upload', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) - json_data = json.loads(output.data) + json_data = json.loads(output.get_data(as_text=True)) exp = {'output': 'notok'} self.assertDictEqual(json_data, exp) @@ -2279,7 +2370,7 @@ class PagureFlaskIssuestests(tests.Modeltests): output = self.app.post( '/test/issue/1/upload', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) - json_data = json.loads(output.data) + json_data = json.loads(output.get_data(as_text=True)) folder = os.path.dirname( os.path.abspath(__file__))[1:].replace('/', '_') @@ -2353,7 +2444,7 @@ class PagureFlaskIssuestests(tests.Modeltests): output = self.app.post( '/test/issue/1/upload', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) - json_data = json.loads(output.data) + json_data = json.loads(output.get_data(as_text=True)) exp = { 'output': 'notok', } @@ -2401,7 +2492,7 @@ class PagureFlaskIssuestests(tests.Modeltests): output = self.app.post( '/test/issue/1/upload', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) - json_data = json.loads(output.data) + json_data = json.loads(output.get_data(as_text=True)) folder = os.path.dirname( os.path.abspath(__file__))[1:].replace('/', '_') @@ -2553,7 +2644,7 @@ class PagureFlaskIssuestests(tests.Modeltests): self.assertEqual(output.status_code, 200) self.assertTrue( '
    \n Edit ' - 'issue #1\n
    ' in output.data) + 'issue #1\n

    ' in output.get_data(as_text=True)) csrf_token = self.get_csrf(output=output) @@ -2563,13 +2654,14 @@ class PagureFlaskIssuestests(tests.Modeltests): output = self.app.post('/test/issue/1/edit', data=data) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertTrue( '
    \n Edit ' - 'issue #1\n
    ' in output.data) - self.assertEqual(output.data.count( + 'issue #1\n

    ' in output_text) + self.assertEqual(output_text.count( '\n This field is required. \n' ' '), 1) - self.assertEqual(output.data.count( + self.assertEqual(output_text.count( '\n Not a valid choice ' '\n '), 1) @@ -2577,13 +2669,14 @@ class PagureFlaskIssuestests(tests.Modeltests): data['title'] = 'Test issue #1' output = self.app.post('/test/issue/1/edit', data=data) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertTrue( '
    \n Edit ' - 'issue #1\n
    ' in output.data) - self.assertEqual(output.data.count( + 'issue #1\n

    ' in output_text) + self.assertEqual(output_text.count( '\n This field is required. \n' ' '), 0) - self.assertEqual(output.data.count( + self.assertEqual(output_text.count( '\n Not a valid choice ' '\n '), 0) @@ -2591,14 +2684,15 @@ class PagureFlaskIssuestests(tests.Modeltests): output = self.app.post( '/test/issue/1/edit', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '#1\n' ' Test issue #1', - output.data) - self.assertEqual(output.data.count( + output_text) + self.assertEqual(output_text.count( ''), 1) - self.assertEqual(output.data.count('comment_body">'), 1) - self.assertEqual(output.data.count( + self.assertEqual(output_text.count('comment_body">'), 1) + self.assertEqual(output_text.count( '

    We should work on this!

    '), 1) # Project w/o issue tracker @@ -2640,7 +2734,7 @@ class PagureFlaskIssuestests(tests.Modeltests): self.assertEqual(output.status_code, 200) self.assertTrue( '
    \n Edit ' - 'issue #1\n
    ' in output.data) + 'issue #1\n
    ' in output.get_data(as_text=True)) csrf_token = self.get_csrf(output=output) @@ -2655,14 +2749,15 @@ class PagureFlaskIssuestests(tests.Modeltests): output = self.app.post( '/test/issue/1/edit', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '#1\n' ' Test issue', - output.data) - self.assertEqual(output.data.count( + output_text) + self.assertEqual(output_text.count( ''), 1) - self.assertEqual(output.data.count('comment_body">'), 1) - self.assertEqual(output.data.count( + self.assertEqual(output_text.count('comment_body">'), 1) + self.assertEqual(output_text.count( '

    We should work on this

    '), 1) @patch('pagure.lib.git.update_git') @@ -2728,7 +2823,7 @@ class PagureFlaskIssuestests(tests.Modeltests): output = self.app.get('/test/tag/tag1/edit') self.assertEqual(output.status_code, 200) - self.assertTrue('Edit tag: tag1' in output.data) + self.assertTrue('Edit tag: tag1' in output.get_data(as_text=True)) csrf_token = self.get_csrf(output=output) @@ -2738,30 +2833,32 @@ class PagureFlaskIssuestests(tests.Modeltests): output = self.app.post('/test/tag/tag1/edit', data=data) self.assertEqual(output.status_code, 200) - self.assertTrue('Edit tag: tag1' in output.data) + self.assertTrue('Edit tag: tag1' in output.get_data(as_text=True)) data['csrf_token'] = csrf_token output = self.app.post( '/test/tag/tag1/edit', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Settings - test - Pagure', output.data) + 'Settings - test - Pagure', output_text) self.assertIn( '\n ' 'Edited tag: tag1()[DeepSkyBlue] to tag2(lorem ipsum)[DeepSkyBlue]', - output.data) + output_text) # update tag with empty description data['tag_description'] = '' output = self.app.post( '/test/tag/tag2/edit', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Settings - test - Pagure', output.data) + 'Settings - test - Pagure', output_text) self.assertIn( '\n ' 'Edited tag: tag2(lorem ipsum)[DeepSkyBlue] to tag2()[DeepSkyBlue]', - output.data) + output_text) # After edit, list tags self.session.commit() @@ -2828,9 +2925,10 @@ class PagureFlaskIssuestests(tests.Modeltests): output = self.app.post( '/test/droptag/', data={}, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertTrue( - 'Settings - test - Pagure' in output.data) - self.assertTrue("

    Settings for test

    " in output.data) + 'Settings - test - Pagure' in output_text) + self.assertTrue("

    Settings for test

    " in output_text) csrf_token = self.get_csrf(output=output) @@ -2839,16 +2937,17 @@ class PagureFlaskIssuestests(tests.Modeltests): output = self.app.post( '/test/droptag/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) - self.assertTrue("

    Settings for test

    " in output.data) + self.assertTrue("

    Settings for test

    " in output.get_data(as_text=True)) data['csrf_token'] = csrf_token output = self.app.post( '/test/droptag/', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) - self.assertTrue("

    Settings for test

    " in output.data) + output_text = output.get_data(as_text=True) + self.assertTrue("

    Settings for test

    " in output_text) self.assertIn( '\n ' - 'Tag: tag1 has been deleted', output.data) + 'Tag: tag1 has been deleted', output_text) @patch('pagure.lib.git.update_git') @patch('pagure.lib.notify.send_email') @@ -2895,7 +2994,7 @@ class PagureFlaskIssuestests(tests.Modeltests): self.assertEqual(output.status_code, 200) self.assertIn( 'Issue #1: Test issue - test - Pagure', - output.data) + output.get_data(as_text=True)) csrf_token = self.get_csrf(output=output) @@ -2908,17 +3007,18 @@ class PagureFlaskIssuestests(tests.Modeltests): self.assertEqual(output.status_code, 200) self.assertIn( 'Issue #1: Test issue - test - Pagure', - output.data) + output.get_data(as_text=True)) data['csrf_token'] = csrf_token output = self.app.post( '/test/issue/1/drop', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Issues - test - Pagure', output.data) + 'Issues - test - Pagure', output_text) self.assertIn( '\n Issue deleted', - output.data) + output_text) # Project w/o issue tracker repo = pagure.lib.get_authorized_project(self.session, 'test') @@ -2960,13 +3060,14 @@ class PagureFlaskIssuestests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.get('/test/issue/1') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Issue #1: Test issue - test - Pagure', - output.data) + output_text) self.assertIn( '
    ', - output.data) + output_text) csrf_token = self.get_csrf(output=output) @@ -2978,19 +3079,22 @@ class PagureFlaskIssuestests(tests.Modeltests): output = self.app.post( '/test/issue/1/update', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Issue #1: Test issue - test - Pagure', - output.data) + output_text) self.assertIn( '', - output.data) + output_text) self.assertIn( '\n Comment added', - output.data) - self.assertTrue( - '

    Woohoo a second comment!

    ' in output.data) - self.assertEqual(output.data.count('comment_body">'), 2) + output_text) + self.assertIn( + '

    Woohoo a second comment!

    ', + output_text) + self.assertEqual( + output_text.count('comment_body">'), 2) repo = pagure.lib.get_authorized_project(self.session, 'test') issue = pagure.lib.search_issues(self.session, repo, issueid=1) @@ -3024,16 +3128,17 @@ class PagureFlaskIssuestests(tests.Modeltests): output = self.app.post( '/test/issue/1/update', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Issue #1: Test issue - test - Pagure', - output.data) + output_text) self.assertIn( '
    ', - output.data) + output_text) self.assertIn( '\n Comment updated', - output.data) + output_text) self.session.commit() repo = pagure.lib.get_authorized_project(self.session, 'test') @@ -3043,13 +3148,14 @@ class PagureFlaskIssuestests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.get('/test/issue/1/comment/1/edit') + output_text = output.get_data(as_text=True) self.assertIn( - 'test - Pagure', output.data) - self.assertTrue('
    ' in output.data) - self.assertTrue('
    ' in output.data) + 'test - Pagure', output_text) + self.assertTrue('
    ' in output_text) + self.assertTrue('
    ' in output_text) self.assertTrue( '', output.data) + self.assertIn('>Ship it!', output.get_data(as_text=True)) def test_update_quick_replies_multiple(self): with tests.user_set(self.app.application, self.admin): data = { - 'quick_reply': [u'Ship it!', u'Nah.'], + 'quick_reply': ['Ship it!', 'Nah.'], 'csrf_token': self.get_csrf(), } output = self.app.post( '/test/update/quick_replies', data=data, follow_redirects=True) self.assertRedirectToSettings( - output, notice=u'quick replies updated') - self.assertQuickReplies([u'Ship it!', u'Nah.']) + output, notice='quick replies updated') + self.assertQuickReplies(['Ship it!', 'Nah.']) # Check page has filled in textarea. - self.assertIn(u'>Ship it!', output.data) - self.assertIn(u'>Nah.', output.data) + self.assertIn('>Ship it!', output.get_data(as_text=True)) + self.assertIn('>Nah.', output.get_data(as_text=True)) def test_update_quick_replies_empty_to_reset(self): # Set some quick replies @@ -148,7 +156,7 @@ class PagureFlaskQuickReplytest(tests.Modeltests): output = self.app.post( '/test/update/quick_replies', data=data, follow_redirects=True) self.assertRedirectToSettings( - output, notice=u'quick replies updated') + output, notice='quick replies updated') self.assertQuickReplies([]) def test_update_quick_replies_unprivileged(self): @@ -167,7 +175,7 @@ class PagureFlaskQuickReplytest(tests.Modeltests): with tests.user_set(self.app.application, self.admin): output = self.app.get('/test/settings') - self.assertNotIn('Quick replies', output.data) + self.assertNotIn('Quick replies', output.get_data(as_text=True)) def test_no_submit_with_disabled_issues_and_pull_requests(self): self.disable_issues_and_pull_requests() diff --git a/tests/test_pagure_flask_ui_remote_pr.py b/tests/test_pagure_flask_ui_remote_pr.py index 952c83a..9c8d5f7 100644 --- a/tests/test_pagure_flask_ui_remote_pr.py +++ b/tests/test_pagure_flask_ui_remote_pr.py @@ -8,6 +8,8 @@ """ +from __future__ import unicode_literals + __requires__ = ['SQLAlchemy >= 0.8'] import pkg_resources @@ -30,6 +32,7 @@ import pagure import pagure.lib import tests from pagure.lib.repo import PagureRepo +from pagure.lib.git import _make_signature class PagureRemotePRtests(tests.Modeltests): @@ -77,9 +80,9 @@ class PagureRemotePRtests(tests.Modeltests): # Commits the files added tree = clone_repo.index.write_tree() - author = pygit2.Signature( + author = _make_signature( 'Alice Author', 'alice@authors.tld') - committer = pygit2.Signature( + committer = _make_signature( 'Cecil Committer', 'cecil@committers.tld') clone_repo.create_commit( 'refs/heads/master', # the name of the reference to update @@ -105,9 +108,9 @@ class PagureRemotePRtests(tests.Modeltests): # Commits the files added tree = clone_repo.index.write_tree() - author = pygit2.Signature( + author = _make_signature( 'Alice Äuthòr', 'alice@äuthòrs.tld') - committer = pygit2.Signature( + committer = _make_signature( 'Cecil Cõmmîttër', 'cecil@cõmmîttërs.tld') clone_repo.create_commit( 'refs/heads/master', @@ -143,9 +146,9 @@ class PagureRemotePRtests(tests.Modeltests): # Commits the files added tree = repo.index.write_tree() - author = pygit2.Signature( + author = _make_signature( 'Alice Author', 'alice@authors.tld') - committer = pygit2.Signature( + committer = _make_signature( 'Cecil Committer', 'cecil@committers.tld') repo.create_commit( 'refs/heads/%s' % branch_from, @@ -176,8 +179,8 @@ class PagureRemotePRtests(tests.Modeltests): output = self.app.get('/test/diff/remote') self.assertEqual(output.status_code, 302) self.assertIn( - u'You should be redirected automatically to target URL: ' - u'New remote pull-request

    ', output.data) + self.assertIn( + '

    New remote pull-request

    ', + output.get_data(as_text=True)) csrf_token = self.get_csrf(output=output) data = { @@ -210,11 +215,12 @@ class PagureRemotePRtests(tests.Modeltests): } output = self.app.post('/test/diff/remote', data=data) self.assertEqual(output.status_code, 200) - self.assertIn(u'

    Create pull request

    ', output.data) + output_text = output.get_data(as_text=True) + self.assertIn('

    Create pull request

    ', output_text) self.assertIn( - u'
    ', output.data) + '
    ', output_text) self.assertNotIn( - u'
    ', output.data) + '
    ', output_text) # Not saved yet self.session = pagure.lib.create_session(self.dbpath) @@ -232,32 +238,33 @@ class PagureRemotePRtests(tests.Modeltests): output = self.app.post( '/test/diff/remote', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - u'

    PR#1', - output.data) + '

    PR#1', + output_text) self.assertIn( - u'
    ', output.data) + '
    ', output_text) self.assertNotIn( - u'
    ', output.data) + '
    ', output_text) # Show the filename in the diff view self.assertIn( - u'''
    + '''
    .gitignore
    this is a remote pull-request, so we cannot provide you''', - output.data) + output_text) self.assertIn( - u'''
    + '''
    sources
    this is a remote pull-request, so we cannot provide you''', - output.data) + output_text) # Show the filename in the Changes summary self.assertIn( - u'.gitignore', output.data) + '.gitignore', output_text) self.assertIn( - u'sources', output.data) + 'sources', output_text) # Remote PR Created self.session = pagure.lib.create_session(self.dbpath) diff --git a/tests/test_pagure_flask_ui_repo.py b/tests/test_pagure_flask_ui_repo.py index b740b5f..694051f 100644 --- a/tests/test_pagure_flask_ui_repo.py +++ b/tests/test_pagure_flask_ui_repo.py @@ -8,6 +8,8 @@ """ +from __future__ import unicode_literals + __requires__ = ['SQLAlchemy >= 0.8'] import pkg_resources @@ -72,7 +74,8 @@ class PagureFlaskRepotests(tests.Modeltests): #just get the csrf token pagure.config.config['ENABLE_USER_MNGT'] = True output = self.app.get('/test/adduser') - csrf_token = output.data.split( + output_text = output.get_data(as_text=True) + csrf_token = output_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] pagure.config.config['ENABLE_USER_MNGT'] = False @@ -129,9 +132,10 @@ class PagureFlaskRepotests(tests.Modeltests): # Check the message flashed during the redirect output = self.app.get('/') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '\n Action canceled, try it ' - 'again',output.data) + 'again', output_text) ast.return_value = False @@ -139,9 +143,10 @@ class PagureFlaskRepotests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.get('/test/adddeploykey') self.assertEqual(output.status_code, 200) - self.assertIn('Add deploy key to the', output.data) + output_text = output.get_data(as_text=True) + self.assertIn('Add deploy key to the', output_text) - csrf_token = output.data.split( + csrf_token = output_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { @@ -152,39 +157,44 @@ class PagureFlaskRepotests(tests.Modeltests): # No CSRF token output = self.app.post('/test/adddeploykey', data=data) self.assertEqual(output.status_code, 200) - self.assertTrue('Add deploy key to the' in output.data) + output_text = output.get_data(as_text=True) + self.assertIn('Add deploy key to the', output_text) data['csrf_token'] = csrf_token # First, invalid SSH key output = self.app.post('/test/adddeploykey', data=data) self.assertEqual(output.status_code, 200) - self.assertIn('Add deploy key to the', output.data) - self.assertIn('Deploy key invalid', output.data) + output_text = output.get_data(as_text=True) + self.assertIn('Add deploy key to the', output_text) + self.assertIn('Deploy key invalid', output_text) # Next up, multiple SSH keys data['ssh_key'] = 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDAzBMSIlvPRaEiLOTVInErkRIw9CzQQcnslDekAn1jFnGf+SNa1acvbTiATbCX71AA03giKrPxPH79dxcC7aDXerc6zRcKjJs6MAL9PrCjnbyxCKXRNNZU5U9X/DLaaL1b3caB+WD6OoorhS3LTEtKPX8xyjOzhf3OQSzNjhJp5Q==\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDAzBMSIlvPRaEiLOTVInErkRIw9CzQQcnslDekAn1jFnGf+SNa1acvbTiATbCX71AA03giKrPxPH79dxcC7aDXerc6zRcKjJs6MAL9PrCjnbyxCKXRNNZU5U9X/DLaaL1b3caB+WD6OoorhS3LTEtKPX8xyjOzhf3OQSzNjhJp5Q==' output = self.app.post( '/test/adddeploykey', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) - self.assertIn('Deploy key can only be single keys.', output.data) + output_text = output.get_data(as_text=True) + self.assertIn('Deploy key can only be single keys.', output_text) # Now, a valid SSH key data['ssh_key'] = 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDAzBMSIlvPRaEiLOTVInErkRIw9CzQQcnslDekAn1jFnGf+SNa1acvbTiATbCX71AA03giKrPxPH79dxcC7aDXerc6zRcKjJs6MAL9PrCjnbyxCKXRNNZU5U9X/DLaaL1b3caB+WD6OoorhS3LTEtKPX8xyjOzhf3OQSzNjhJp5Q==' output = self.app.post( '/test/adddeploykey', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Settings - test - Pagure', output.data) - self.assertIn('

    Settings for test

    ', output.data) - self.assertIn('Deploy key added', output.data) - self.assertNotIn('PUSH ACCESS', output.data) + 'Settings - test - Pagure', output_text) + self.assertIn('

    Settings for test

    ', output_text) + self.assertIn('Deploy key added', output_text) + self.assertNotIn('PUSH ACCESS', output_text) # And now, adding the same key output = self.app.post( '/test/adddeploykey', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) - self.assertIn('Deploy key already exists', output.data) + output_text = output.get_data(as_text=True) + self.assertIn('Deploy key already exists', output_text) # And next, a key with push access data['ssh_key'] = 'ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQC9Xwc2RDzPBhlEDARfHldGjudIVoa04tqT1JVKGQmyllTFz7Rb8CngQL3e7zyNzotnhwYKHdoiLlPkVEiDee4dWMUe48ilqId+FJZQGhyv8fu4BoFdE1AJUVylzmltbLg14VqG5gjTpXgtlrEva9arKwBMHJjRYc8ScaSn3OgyQw==' @@ -192,11 +202,12 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.post( '/test/adddeploykey', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Settings - test - Pagure', output.data) - self.assertIn('

    Settings for test

    ', output.data) - self.assertIn('Deploy key added', output.data) - self.assertIn('PUSH ACCESS', output.data) + 'Settings - test - Pagure', output_text) + self.assertIn('

    Settings for test

    ', output_text) + self.assertIn('Deploy key added', output_text) + self.assertIn('PUSH ACCESS', output_text) @patch('pagure.decorators.admin_session_timedout') @patch.dict('pagure.config.config', {'DEPLOY_KEY': False}) @@ -249,9 +260,10 @@ class PagureFlaskRepotests(tests.Modeltests): # Check the message flashed during the redirect output = self.app.get('/') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '\n Action canceled, try it ' - 'again',output.data) + 'again', output_text) ast.return_value = False @@ -259,9 +271,10 @@ class PagureFlaskRepotests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.get('/test/adduser') self.assertEqual(output.status_code, 200) - self.assertIn('Add user to the', output.data) + output_text = output.get_data(as_text=True) + self.assertIn('Add user to the', output_text) - csrf_token = output.data.split( + csrf_token = output_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { @@ -271,43 +284,48 @@ class PagureFlaskRepotests(tests.Modeltests): # Missing access and no CSRF output = self.app.post('/test/adduser', data=data) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Add user - test - Pagure', output.data) - self.assertTrue('Add user to the' in output.data) + 'Add user - test - Pagure', output_text) + self.assertIn('Add user to the', output_text) # No CSRF output = self.app.post('/test/adduser', data=data) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Add user - test - Pagure', output.data) + 'Add user - test - Pagure', output_text) # Missing access data['csrf_token'] = csrf_token output = self.app.post('/test/adduser', data=data) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Add user - test - Pagure', output.data) - self.assertIn('Add user to the', output.data) + 'Add user - test - Pagure', output_text) + self.assertIn('Add user to the', output_text) # Unknown user data['access'] = 'commit' output = self.app.post('/test/adduser', data=data) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Add user - test - Pagure', output.data) - self.assertIn('Add user to the', output.data) + 'Add user - test - Pagure', output_text) + self.assertIn('Add user to the', output_text) self.assertIn( '\n No user "ralph" found\n', - output.data) + output_text) # All correct data['user'] = 'foo' output = self.app.post( '/test/adduser', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) - self.assertIn('

    Settings for test

    ', output.data) + output_text = output.get_data(as_text=True) + self.assertIn('

    Settings for test

    ', output_text) self.assertIn( - '\n User added', output.data) + '\n User added', output_text) mock_log.assert_called_with(ANY, topic='project.user.added', msg=ANY, redis=ANY) @@ -348,7 +366,8 @@ class PagureFlaskRepotests(tests.Modeltests): pagure.config.config['ENABLE_USER_MNGT'] = True output = self.app.get('/test/addgroup') - csrf_token = output.data.split( + output_text = output.get_data(as_text=True) + csrf_token = output_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] pagure.config.config['ENABLE_USER_MNGT'] = False @@ -391,10 +410,11 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.post( '/test/addgroup', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - u'Add group - test - Pagure', - output.data) - self.assertIn(u'No group ralph found.', output.data) + 'Add group - test - Pagure', + output_text) + self.assertIn('No group ralph found.', output_text) @patch('pagure.decorators.admin_session_timedout') def test_add_group_project(self, ast): @@ -429,9 +449,10 @@ class PagureFlaskRepotests(tests.Modeltests): # Check the message flashed during the redirect output = self.app.get('/') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '\n Action canceled, try it ' - 'again', output.data) + 'again', output_text) ast.return_value = False @@ -452,9 +473,10 @@ class PagureFlaskRepotests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.get('/test/addgroup') self.assertEqual(output.status_code, 200) - self.assertTrue('Add group to the' in output.data) + output_text = output.get_data(as_text=True) + self.assertIn('Add group to the', output_text) - csrf_token = output.data.split( + csrf_token = output_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { @@ -464,28 +486,31 @@ class PagureFlaskRepotests(tests.Modeltests): # Missing CSRF output = self.app.post('/test/addgroup', data=data) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Add group - test - Pagure', output.data) - self.assertIn('Add group to the', output.data) + 'Add group - test - Pagure', output_text) + self.assertIn('Add group to the', output_text) # Missing access data['csrf_token'] = csrf_token output = self.app.post('/test/addgroup', data=data) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Add group - test - Pagure', output.data) - self.assertIn('Add group to the', output.data) + 'Add group - test - Pagure', output_text) + self.assertIn('Add group to the', output_text) # All good data['access'] = 'ticket' output = self.app.post( '/test/addgroup', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Settings - test - Pagure', output.data) - self.assertIn('

    Settings for test

    ', output.data) + 'Settings - test - Pagure', output_text) + self.assertIn('

    Settings for test

    ', output_text) self.assertIn( - '\n Group added', output.data) + '\n Group added', output_text) @patch('pagure.decorators.admin_session_timedout') def test_remove_user_when_user_mngt_off(self, ast): @@ -504,8 +529,9 @@ class PagureFlaskRepotests(tests.Modeltests): tests.create_projects_git(os.path.join(self.path, 'repos')) output = self.app.post('/test/settings') + output_text = output.get_data(as_text=True) - csrf_token = output.data.split( + csrf_token = output_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = {'csrf_token': csrf_token} @@ -572,8 +598,9 @@ class PagureFlaskRepotests(tests.Modeltests): user.username = 'pingou' with tests.user_set(self.app.application, user): output = self.app.post('/test/settings') + output_text = output.get_data(as_text=True) - csrf_token = output.data.split( + csrf_token = output_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = {'csrf_token': csrf_token} @@ -581,10 +608,11 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.post( '/test/dropdeploykey/1', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Settings - test - Pagure', output.data) - self.assertIn('

    Settings for test

    ', output.data) - self.assertIn('Deploy key does not exist in project', output.data) + 'Settings - test - Pagure', output_text) + self.assertIn('

    Settings for test

    ', output_text) + self.assertIn('Deploy key does not exist in project', output_text) # Add a deploy key to a project repo = pagure.lib.get_authorized_project(self.session, 'test') @@ -601,19 +629,21 @@ class PagureFlaskRepotests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.post('/test/dropdeploykey/1', follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Settings - test - Pagure', output.data) - self.assertIn('

    Settings for test

    ', output.data) - self.assertNotIn('Deploy key removed', output.data) + 'Settings - test - Pagure', output_text) + self.assertIn('

    Settings for test

    ', output_text) + self.assertNotIn('Deploy key removed', output_text) data = {'csrf_token': csrf_token} output = self.app.post( '/test/dropdeploykey/1', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Settings - test - Pagure', output.data) - self.assertIn('

    Settings for test

    ', output.data) - self.assertIn('Deploy key removed', output.data) + 'Settings - test - Pagure', output_text) + self.assertIn('

    Settings for test

    ', output_text) + self.assertIn('Deploy key removed', output_text) @patch('pagure.decorators.admin_session_timedout') @patch.dict('pagure.config.config', {'DEPLOY_KEY': False}) @@ -663,8 +693,9 @@ class PagureFlaskRepotests(tests.Modeltests): user.username = 'pingou' with tests.user_set(self.app.application, user): output = self.app.post('/test/settings') + output_text = output.get_data(as_text=True) - csrf_token = output.data.split( + csrf_token = output_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = {'csrf_token': csrf_token} @@ -672,12 +703,13 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.post( '/test/dropuser/2', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Settings - test - Pagure', output.data) - self.assertIn('

    Settings for test

    ', output.data) + 'Settings - test - Pagure', output_text) + self.assertIn('

    Settings for test

    ', output_text) self.assertIn( '\n User does not have any ' - 'access on the repo', output.data) + 'access on the repo', output_text) # Add an user to a project repo = pagure.lib.get_authorized_project(self.session, 'test') @@ -695,12 +727,13 @@ class PagureFlaskRepotests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.post('/test/dropuser/2', follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Settings - test - Pagure', output.data) - self.assertIn('

    Settings for test

    ', output.data) + 'Settings - test - Pagure', output_text) + self.assertIn('

    Settings for test

    ', output_text) self.assertNotIn( - '\n User removed', output.data) - self.assertIn('action="/test/dropuser/2">', output.data) + '\n User removed', output_text) + self.assertIn('action="/test/dropuser/2">', output_text) repo = pagure.lib.get_authorized_project(self.session, 'test') self.assertEqual(len(repo.users), 1) @@ -708,12 +741,13 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.post( '/test/dropuser/2', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Settings - test - Pagure', output.data) - self.assertIn('

    Settings for test

    ', output.data) + 'Settings - test - Pagure', output_text) + self.assertIn('

    Settings for test

    ', output_text) self.assertIn( - '\n User removed', output.data) - self.assertNotIn('action="/test/dropuser/2">', output.data) + '\n User removed', output_text) + self.assertNotIn('action="/test/dropuser/2">', output_text) self.session.commit() repo = pagure.lib.get_authorized_project(self.session, 'test') @@ -752,13 +786,14 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.post( '/test/dropuser/2', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - u'Overview - test - Pagure', output.data) + 'Overview - test - Pagure', output_text) self.assertIn( - u'

    \ntest', - output.data) + '

    \ntest', + output_text) self.assertIn( - u'\n User removed', output.data) + '\n User removed', output_text) self.session.commit() repo = pagure.lib.get_authorized_project(self.session, 'test') @@ -788,8 +823,9 @@ class PagureFlaskRepotests(tests.Modeltests): user.username = 'pingou' with tests.user_set(self.app.application, user): output = self.app.post('/test/settings') + output_text = output.get_data(as_text=True) - csrf_token = output.data.split( + csrf_token = output_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = {'csrf_token': csrf_token} @@ -866,8 +902,9 @@ class PagureFlaskRepotests(tests.Modeltests): user.username = 'pingou' with tests.user_set(self.app.application, user): output = self.app.post('/test/settings') + output_text = output.get_data(as_text=True) - csrf_token = output.data.split( + csrf_token = output_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = {'csrf_token': csrf_token} @@ -875,13 +912,14 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.post( '/test/dropgroup/2', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Settings - test - Pagure', output.data) - self.assertIn('

    Settings for test

    ', output.data) + 'Settings - test - Pagure', output_text) + self.assertIn('

    Settings for test

    ', output_text) self.assertIn( '\n ' 'Group does not seem to be part of this project', - output.data) + output_text) # Create the new group msg = pagure.lib.add_group( @@ -914,13 +952,14 @@ class PagureFlaskRepotests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.post('/test/dropgroup/1', follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Settings - test - Pagure', output.data) - self.assertIn('

    Settings for test

    ', output.data) - self.assertIn('action="/test/dropgroup/1">', output.data) + 'Settings - test - Pagure', output_text) + self.assertIn('

    Settings for test

    ', output_text) + self.assertIn('action="/test/dropgroup/1">', output_text) self.assertNotIn( '\n Group removed', - output.data) + output_text) repo = pagure.lib.get_authorized_project(self.session, 'test') self.assertEqual(len(repo.groups), 1) @@ -928,13 +967,14 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.post( '/test/dropgroup/1', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Settings - test - Pagure', output.data) - self.assertIn('

    Settings for test

    ', output.data) + 'Settings - test - Pagure', output_text) + self.assertIn('

    Settings for test

    ', output_text) self.assertIn( '\n Group removed', - output.data) - self.assertNotIn('action="/test/dropgroup/1">', output.data) + output_text) + self.assertNotIn('action="/test/dropgroup/1">', output_text) self.session.commit() repo = pagure.lib.get_authorized_project(self.session, 'test') @@ -976,11 +1016,12 @@ class PagureFlaskRepotests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.post('/test/update', follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Settings - test - Pagure', output.data) - self.assertIn('

    Settings for test

    ', output.data) + 'Settings - test - Pagure', output_text) + self.assertIn('

    Settings for test

    ', output_text) - csrf_token = output.data.split( + csrf_token = output_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = { @@ -990,14 +1031,15 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.post( '/test/update', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Settings - test - Pagure', output.data) - self.assertIn('

    Settings for test

    ', output.data) + 'Settings - test - Pagure', output_text) + self.assertIn('

    Settings for test

    ', output_text) self.assertIn( - '', output.data) + '', output_text) self.assertIn( '\n Project updated', - output.data) + output_text) # Edit the avatar_email data = { @@ -1008,15 +1050,16 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.post( '/test/update', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Settings - test - Pagure', output.data) - self.assertIn('

    Settings for test

    ', output.data) + 'Settings - test - Pagure', output_text) + self.assertIn('

    Settings for test

    ', output_text) self.assertIn( '', - output.data) + output_text) self.assertIn( '\n Project updated', - output.data) + output_text) # Reset the avatar_email data = { @@ -1027,14 +1070,15 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.post( '/test/update', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Settings - test - Pagure', output.data) - self.assertIn('

    Settings for test

    ', output.data) + 'Settings - test - Pagure', output_text) + self.assertIn('

    Settings for test

    ', output_text) self.assertIn( - '', output.data) + '', output_text) self.assertIn( '\n Project updated', - output.data) + output_text) @patch('pagure.decorators.admin_session_timedout') def test_update_project_update_tag(self, ast): @@ -1056,11 +1100,12 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.get('/test/settings') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Settings - test - Pagure', output.data) - self.assertIn('

    Settings for test

    ', output.data) + 'Settings - test - Pagure', output_text) + self.assertIn('

    Settings for test

    ', output_text) - csrf_token = output.data.split( + csrf_token = output_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] # Add tag to a project so that they are added to the database @@ -1072,12 +1117,13 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.post( '/test/update', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Settings - test - Pagure', output.data) - self.assertIn('

    Settings for test

    ', output.data) + 'Settings - test - Pagure', output_text) + self.assertIn('

    Settings for test

    ', output_text) self.assertIn( '\n Project updated', - output.data) + output_text) # Remove two of the tags of the project, they will still be in # the DB but not associated to this project @@ -1089,12 +1135,13 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.post( '/test/update', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Settings - test - Pagure', output.data) - self.assertIn('

    Settings for test

    ', output.data) + 'Settings - test - Pagure', output_text) + self.assertIn('

    Settings for test

    ', output_text) self.assertIn( '\n Project updated', - output.data) + output_text) # Try re-adding the two tags, this used to fail before we fixed # it @@ -1106,12 +1153,13 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.post( '/test/update', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Settings - test - Pagure', output.data) - self.assertIn('

    Settings for test

    ', output.data) + 'Settings - test - Pagure', output_text) + self.assertIn('

    Settings for test

    ', output_text) self.assertIn( '\n Project updated', - output.data) + output_text) @patch('pagure.decorators.admin_session_timedout') def test_view_settings(self, ast): @@ -1146,67 +1194,72 @@ class PagureFlaskRepotests(tests.Modeltests): ast.return_value = False output = self.app.get('/test/settings') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Settings - test - Pagure', output.data) - self.assertIn('

    Settings for test

    ', output.data) + 'Settings - test - Pagure', output_text) + self.assertIn('

    Settings for test

    ', output_text) # Both checkbox checked before self.assertIn( '', output.data) + 'name="pull_requests" checked=""/>', output_text) self.assertIn( '', output.data) + 'name="issue_tracker" checked=""/>', output_text) - csrf_token = output.data.split( + csrf_token = output_text.split( 'name="csrf_token" type="hidden" value="')[1].split('">')[0] data = {} output = self.app.post( '/test/settings', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Settings - test - Pagure', output.data) - self.assertIn('

    Settings for test

    ', output.data) + 'Settings - test - Pagure', output_text) + self.assertIn('

    Settings for test

    ', output_text) # Both checkbox are still checked output = self.app.get('/test/settings', follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Settings - test - Pagure', output.data) - self.assertIn('

    Settings for test

    ', output.data) + 'Settings - test - Pagure', output_text) + self.assertIn('

    Settings for test

    ', output_text) self.assertIn( '', output.data) + 'name="pull_requests" checked=""/>', output_text) self.assertIn( '', output.data) + 'name="issue_tracker" checked=""/>', output_text) data = {'csrf_token': csrf_token} output = self.app.post( '/test/settings', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Overview - test - Pagure', output.data) + 'Overview - test - Pagure', output_text) self.assertIn( '
    \n' - 'test project #1
    ', output.data) + 'test project #1
    ', output_text) self.assertIn( '\n Edited successfully ' - 'settings of repo: test', output.data) + 'settings of repo: test', output_text) # Both checkbox are now un-checked output = self.app.get('/test/settings', follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Settings - test - Pagure', output.data) - self.assertIn('

    Settings for test

    ', output.data) + 'Settings - test - Pagure', output_text) + self.assertIn('

    Settings for test

    ', output_text) self.assertIn( '', output.data) + 'name="pull_requests" />', output_text) self.assertIn( '', output.data) + 'name="issue_tracker" />', output_text) data = { 'csrf_token': csrf_token, @@ -1216,27 +1269,29 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.post( '/test/settings', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Overview - test - Pagure', output.data) + 'Overview - test - Pagure', output_text) self.assertIn( '
    \n' - 'test project #1
    ', output.data) + 'test project #1
    ', output_text) self.assertIn( '\n Edited successfully ' - 'settings of repo: test', output.data) + 'settings of repo: test', output_text) # Both checkbox are again checked output = self.app.get('/test/settings', follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Settings - test - Pagure', output.data) - self.assertIn('

    Settings for test

    ', output.data) + 'Settings - test - Pagure', output_text) + self.assertIn('

    Settings for test

    ', output_text) self.assertIn( '', output.data) + 'name="pull_requests" checked=""/>', output_text) self.assertIn( '', output.data) + 'name="issue_tracker" checked=""/>', output_text) @patch('pagure.lib.git.generate_gitolite_acls') @patch('pagure.decorators.admin_session_timedout') @@ -1250,9 +1305,10 @@ class PagureFlaskRepotests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.get('/test/settings') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Settings - test - Pagure', output.data) - self.assertIn('

    Settings for test

    ', output.data) + 'Settings - test - Pagure', output_text) + self.assertIn('

    Settings for test

    ', output_text) csrf_token = self.get_csrf(output=output) @@ -1265,37 +1321,39 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.post( '/test/settings', data=data, follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Overview - test - Pagure', output.data) + 'Overview - test - Pagure', output_text) self.assertIn( '
    \n' - 'test project #1
    ', output.data) + 'test project #1
    ', output_text) self.assertIn( '\n Edited successfully ' - 'settings of repo: test', output.data) + 'settings of repo: test', output_text) # Both checkbox are again checked output = self.app.get('/test/settings', follow_redirects=True) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Settings - test - Pagure', output.data) - self.assertIn('

    Settings for test

    ', output.data) + 'Settings - test - Pagure', output_text) + self.assertIn('

    Settings for test

    ', output_text) self.assertIn( '', output.data) + 'name="pull_requests" checked=""/>', output_text) self.assertIn( '', output.data) + 'name="issue_tracker" checked=""/>', output_text) self.assertIn( '', - output.data) + output_text) repo = pagure.lib.get_authorized_project(self.session, 'test') self.assertEqual(gen_acl.call_count, 1) args = gen_acl.call_args self.assertEqual(args[0], tuple()) - self.assertEqual(args[1].keys(), ['project']) + self.assertListEqual(list(args[1]), ['project']) self.assertEqual(args[1]['project'].fullname, 'test') @patch('pagure.decorators.admin_session_timedout') @@ -1338,9 +1396,10 @@ class PagureFlaskRepotests(tests.Modeltests): ast.return_value = False output = self.app.get('/test/settings') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Settings - test - Pagure', output.data) - self.assertIn('

    Settings for test

    ', output.data) + 'Settings - test - Pagure', output_text) + self.assertIn('

    Settings for test

    ', output_text) # Check that the priorities have their empty fields self.assertIn( '''
    @@ -1354,7 +1413,7 @@ class PagureFlaskRepotests(tests.Modeltests): value="" class="form-control"/>
    -
    ''', output.data) +
    ''', output_text) # Check that the milestones have their empty fields self.assertIn( @@ -1379,7 +1438,7 @@ class PagureFlaskRepotests(tests.Modeltests):
    -
    ''', output.data) +
    ''', output_text) # Check that the close_status have its empty field self.assertIn( @@ -1389,7 +1448,7 @@ class PagureFlaskRepotests(tests.Modeltests):
    -
    ''', output.data) +

    ''', output_text) # Check that the custom fields have their empty fields self.assertIn( @@ -1415,7 +1474,7 @@ class PagureFlaskRepotests(tests.Modeltests):
    -
    ''', output.data) +
    ''', output_text) def test_view_forks(self): """ Test the view_forks endpoint. """ @@ -1428,7 +1487,8 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.get('/test/stats', follow_redirects=True) self.assertEqual(output.status_code, 200) - self.assertTrue('This project has not been forked.' in output.data) + output_text = output.get_data(as_text=True) + self.assertIn('This project has not been forked.', output_text) @patch.dict('pagure.config.config', {'CASE_SENSITIVE': True}) def test_view_repo_case_sensitive(self): @@ -1439,7 +1499,8 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.get('/test') self.assertEqual(output.status_code, 200) - self.assertTrue('

    This repo is brand new!

    ' in output.data) + output_text = output.get_data(as_text=True) + self.assertIn('

    This repo is brand new!

    ', output_text) output = self.app.get('/TEST') self.assertEqual(output.status_code, 404) @@ -1463,22 +1524,24 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.get('/test') self.assertEqual(output.status_code, 200) - self.assertTrue('

    This repo is brand new!

    ' in output.data) + output_text = output.get_data(as_text=True) + self.assertIn('

    This repo is brand new!

    ', output_text) self.assertIn( '
    \n' - 'test project #1
    ', output.data) + 'test project #1

    ', output_text) self.assertIn( 'Stats ', - output.data) + output_text) self.perfMaxWalks(0, 0) self.perfReset() output = self.app.get('/test/') self.assertEqual(output.status_code, 200) - self.assertTrue('

    This repo is brand new!

    ' in output.data) + output_text = output.get_data(as_text=True) + self.assertIn('

    This repo is brand new!

    ', output_text) self.assertIn( '
    \n' - 'test project #1
    ', output.data) + 'test project #1
    ', output_text) self.perfMaxWalks(0, 0) self.perfReset() @@ -1495,32 +1558,34 @@ class PagureFlaskRepotests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.get('/test') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Fork', - output.data) - self.assertFalse('

    This repo is brand new!

    ' in output.data) - self.assertFalse('Forked from' in output.data) - self.assertFalse('README.txt' in output.data) - self.assertFalse('README.dummy' in output.data) + output_text) + self.assertNotIn('

    This repo is brand new!

    ', output_text) + self.assertNotIn('Forked from', output_text) + self.assertNotIn('README.txt', output_text) + self.assertNotIn('README.dummy', output_text) self.assertIn( '
    \n' - 'test project #1
    ', output.data) + 'test project #1
    ', output_text) self.perfMaxWalks(3, 8) # Target: (1, 3) self.perfReset() # Non-authenticated, the Fork button does not appear output = self.app.get('/test') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertNotIn( 'Fork', - output.data) - self.assertFalse('

    This repo is brand new!

    ' in output.data) - self.assertFalse('Forked from' in output.data) - self.assertFalse('README.txt' in output.data) - self.assertFalse('README.dummy' in output.data) + output_text) + self.assertNotIn('

    This repo is brand new!

    ', output_text) + self.assertNotIn('Forked from', output_text) + self.assertNotIn('README.txt', output_text) + self.assertNotIn('README.dummy', output_text) self.assertIn( '
    \n' - 'test project #1
    ', output.data) + 'test project #1
    ', output_text) self.perfMaxWalks(3, 8) # Target: (1, 3) self.perfReset() @@ -1546,17 +1611,18 @@ class PagureFlaskRepotests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.get('/fork/pingou/test') self.assertEqual(output.status_code, 200) - self.assertFalse('

    This repo is brand new!

    ' in output.data) + output_text = output.get_data(as_text=True) + self.assertNotIn('

    This repo is brand new!

    ', output_text) self.assertIn( '
    \n' - 'test project #1
    ', output.data) - self.assertTrue('Forked from' in output.data) + 'test project #1
    ', output_text) + self.assertIn('Forked from', output_text) self.assertNotIn( 'Fork', - output.data) + output_text) self.assertIn( ' View Fork', - output.data) + output_text) self.perfMaxWalks(1, 3) self.perfReset() @@ -1565,34 +1631,36 @@ class PagureFlaskRepotests(tests.Modeltests): with tests.user_set(self.app.application, user): output = self.app.get('/fork/pingou/test') self.assertEqual(output.status_code, 200) - self.assertFalse('

    This repo is brand new!

    ' in output.data) + output_text = output.get_data(as_text=True) + self.assertNotIn('

    This repo is brand new!

    ', output_text) self.assertIn( '
    \n' - 'test project #1
    ', output.data) - self.assertTrue('Forked from' in output.data) + 'test project #1
    ', output_text) + self.assertIn('Forked from', output_text) self.assertNotIn( ' View Fork', - output.data) + output_text) self.assertIn( 'Fork', - output.data) + output_text) self.perfMaxWalks(1, 3) self.perfReset() # Non-authenticated, the Fork button does not appear output = self.app.get('/fork/pingou/test') self.assertEqual(output.status_code, 200) - self.assertFalse('

    This repo is brand new!

    ' in output.data) + output_text = output.get_data(as_text=True) + self.assertNotIn('

    This repo is brand new!

    ', output_text) self.assertIn( '
    \n' - 'test project #1
    ', output.data) - self.assertTrue('Forked from' in output.data) + 'test project #1
    ', output_text) + self.assertIn('Forked from', output_text) self.assertNotIn( ' View Fork', - output.data) + output_text) self.assertNotIn( 'Fork', - output.data) + output_text) self.perfMaxWalks(1, 3) self.perfReset() @@ -1618,11 +1686,12 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.get('/fork/pingou/test3') self.assertEqual(output.status_code, 200) - self.assertFalse('

    This repo is brand new!

    ' in output.data) + output_text = output.get_data(as_text=True) + self.assertNotIn('

    This repo is brand new!

    ', output_text) self.assertIn( '
    \n' - 'test project #3
    ', output.data) - self.assertTrue('Forked from' in output.data) + 'test project #3
    ', output_text) + self.assertIn('Forked from', output_text) self.perfMaxWalks(3, 18) # Ideal: (1, 3) self.perfReset() @@ -1664,13 +1733,14 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.get('/test') self.assertEqual(output.status_code, 200) - self.assertFalse('

    This repo is brand new!

    ' in output.data) - self.assertFalse('Forked from' in output.data) + output_text = output.get_data(as_text=True) + self.assertNotIn('

    This repo is brand new!

    ', output_text) + self.assertNotIn('Forked from', output_text) self.assertIn( '
    \n' - 'test project #1
    ', output.data) + 'test project #1
    ', output_text) self.assertEqual( - output.data.count(''), 0) + output_text.count(''), 0) shutil.rmtree(newpath) @@ -1699,11 +1769,12 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.get('/test/branch/master') self.assertEqual(output.status_code, 200) - self.assertFalse('

    This repo is brand new!

    ' in output.data) - self.assertFalse('Forked from' in output.data) + output_text = output.get_data(as_text=True) + self.assertNotIn('

    This repo is brand new!

    ', output_text) + self.assertNotIn('Forked from', output_text) self.assertIn( '
    \n' - 'test project #1
    ', output.data) + 'test project #1
    ', output_text) # Turn that repo into a fork repo = pagure.lib.get_authorized_project(self.session, 'test') @@ -1724,11 +1795,12 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.get('/fork/pingou/test/branch/master') self.assertEqual(output.status_code, 200) - self.assertFalse('

    This repo is brand new!

    ' in output.data) + output_text = output.get_data(as_text=True) + self.assertNotIn('

    This repo is brand new!

    ', output_text) self.assertIn( '
    \n' - 'test project #1
    ', output.data) - self.assertTrue('Forked from' in output.data) + 'test project #1
    ', output_text) + self.assertIn('Forked from', output_text) # Add a fork of a fork item = pagure.lib.model.Project( @@ -1752,11 +1824,12 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.get('/fork/pingou/test3/branch/master') self.assertEqual(output.status_code, 200) - self.assertFalse('

    This repo is brand new!

    ' in output.data) + output_text = output.get_data(as_text=True) + self.assertNotIn('

    This repo is brand new!

    ', output_text) self.assertIn( '
    \n' - 'test project #3
    ', output.data) - self.assertTrue('Forked from' in output.data) + 'test project #3
    ', output_text) + self.assertIn('Forked from', output_text) def test_view_commits(self): """ Test the view_commits endpoint. """ @@ -1774,10 +1847,11 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.get('/test/commits') self.assertEqual(output.status_code, 200) - self.assertIn('

    This repo is brand new!

    ', output.data) + output_text = output.get_data(as_text=True) + self.assertIn('

    This repo is brand new!

    ', output_text) self.assertIn( '
    \n' - 'test project #1
    ', output.data) + 'test project #1
    ', output_text) # Add some content to the git repo tests.add_content_git_repo(os.path.join(self.path, 'repos', @@ -1786,20 +1860,22 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.get('/test/commits') self.assertEqual(output.status_code, 200) - self.assertNotIn('

    This repo is brand new!

    ', output.data) - self.assertNotIn('Forked from', output.data) + output_text = output.get_data(as_text=True) + self.assertNotIn('

    This repo is brand new!

    ', output_text) + self.assertNotIn('Forked from', output_text) self.assertIn( '
    \n' - 'test project #1
    ', output.data) - self.assertIn('Commits - test - Pagure', output.data) + 'test project #1
    ', output_text) + self.assertIn('Commits - test - Pagure', output_text) output = self.app.get('/test/commits/master') self.assertEqual(output.status_code, 200) - self.assertNotIn('

    This repo is brand new!

    ', output.data) - self.assertNotIn('Forked from', output.data) + output_text = output.get_data(as_text=True) + self.assertNotIn('

    This repo is brand new!

    ', output_text) + self.assertNotIn('Forked from', output_text) self.assertIn( '
    \n' - 'test project #1
    ', output.data) + 'test project #1
    ', output_text) # Turn that repo into a fork repo = pagure.lib.get_authorized_project(self.session, 'test') @@ -1820,11 +1896,12 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.get('/fork/pingou/test/commits?page=abc') self.assertEqual(output.status_code, 200) - self.assertNotIn('

    This repo is brand new!

    ', output.data) + output_text = output.get_data(as_text=True) + self.assertNotIn('

    This repo is brand new!

    ', output_text) self.assertIn( '
    \n' - 'test project #1
    ', output.data) - self.assertIn('Forked from', output.data) + 'test project #1
    ', output_text) + self.assertIn('Forked from', output_text) # Add a fork of a fork item = pagure.lib.model.Project( @@ -1851,11 +1928,12 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.get('/fork/pingou/test3/commits') self.assertEqual(output.status_code, 200) - self.assertNotIn('

    This repo is brand new!

    ', output.data) + output_text = output.get_data(as_text=True) + self.assertNotIn('

    This repo is brand new!

    ', output_text) self.assertIn( '
    \n' - 'test project #3
    ', output.data) - self.assertIn('Forked from', output.data) + 'test project #3
    ', output_text) + self.assertIn('Forked from', output_text) def test_compare_commits(self): """ Test the compare_commits endpoint. """ @@ -1865,60 +1943,63 @@ class PagureFlaskRepotests(tests.Modeltests): # View commits comparison output = self.app.get('/test/c/%s..%s' % (c2.oid.hex, c1.oid.hex)) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Diff from %s to %s - test\n - Pagure' % (c2.oid.hex, c1.oid.hex), - output.data) + output_text) self.assertIn( '
    %s .. %s
    ' % (c2.oid.hex, c1.oid.hex), - output.data) + output_text) self.assertIn( 'Commits \n ' + '' + '\n 2\n ', - output.data) + output_text) self.assertIn( '- ' + - 'Row 0', output.data) + 'Row 0', output_text) # View inverse commits comparison output = self.app.get('/test/c/%s..%s' % (c1.oid.hex, c2.oid.hex)) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Diff from %s to %s - test\n - Pagure' % (c1.oid.hex, c2.oid.hex), - output.data) + output_text) self.assertIn( 'Commits \n ' + '' + '\n 2\n ', - output.data) + output_text) self.assertIn( '
    %s .. %s
    ' % (c1.oid.hex, c2.oid.hex), - output.data) + output_text) self.assertIn( '' + - '+ Row 0', output.data) + '+ Row 0', output_text) def compare_all(c1, c3): # View commits comparison output = self.app.get('/test/c/%s..%s' % (c1.oid.hex, c3.oid.hex)) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Diff from %s to %s - test\n - Pagure' % - (c1.oid.hex, c3.oid.hex), output.data) + (c1.oid.hex, c3.oid.hex), output_text) self.assertIn( '
    %s .. %s
    ' % (c1.oid.hex, c3.oid.hex), - output.data) + output_text) self.assertIn( '+ Row 0', output.data) + '#ddffdd">+ Row 0
    ', output_text) self.assertEqual( - output.data.count( + output_text.count( '+ Row 0'), 2) self.assertIn( @@ -1926,39 +2007,46 @@ class PagureFlaskRepotests(tests.Modeltests): '' + '\n 3\n ', - output.data) + output_text) self.assertIn( - 'title="View file as of 4829cf">Šource', output.data) + 'title="View file as of 4829cf">Šource', + output_text + ) self.assertIn( - '
    file added
    ', output.data) + '
    file added
    ', + output_text) # View inverse commits comparison output = self.app.get( '/test/c/%s..%s' % (c3.oid.hex, c1.oid.hex)) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Diff from %s to %s - test\n - Pagure' % - (c3.oid.hex, c1.oid.hex), output.data) + (c3.oid.hex, c1.oid.hex), output_text) self.assertIn( '
    %s .. %s
    ' % (c3.oid.hex, c1.oid.hex), - output.data) + output_text) self.assertIn( '@@ -1,2 +1,1' + - ' @@', output.data) + ' @@', output_text) self.assertIn( '- ' + - 'Row 0', output.data) + 'Row 0', output_text) self.assertIn( 'Commits \n ' + '' + '\n 3\n ', - output.data) + output_text) self.assertIn( - 'title="View file as of 000000">Šource', output.data) + 'title="View file as of 000000">Šource', + output_text + ) self.assertIn( - '
    file removed
    ', output.data) + '
    file removed
    ', + output_text) output = self.app.get('/foo/bar') # No project registered in the DB @@ -2036,12 +2124,13 @@ class PagureFlaskRepotests(tests.Modeltests): # View in a branch output = self.app.get('/test/blob/master/f/sources') self.assertEqual(output.status_code, 200) - self.assertTrue('' in output.data) - self.assertTrue( - '' - in output.data) - self.assertTrue( - '' in output.data) + output_text = output.get_data(as_text=True) + self.assertIn('
     bar
    ', output_text) + self.assertIn( + '', + output_text) + self.assertIn( + '', output_text) # Empty files should also be displayed tests.add_content_to_git( @@ -2050,22 +2139,24 @@ class PagureFlaskRepotests(tests.Modeltests): content="") output = self.app.get('/test/blob/master/f/emptyfile.md') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( 'Raw', output.data) + 'title="View as raw">Raw', output_text) self.assertIn( '
    \n' - ' \n
    ', output.data) + ' \n ', output_text) # View what's supposed to be an image output = self.app.get('/test/blob/master/f/test.jpg') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Binary files cannot be rendered.
    ', output.data) + 'Binary files cannot be rendered.
    ', output_text) self.assertIn( 'view the raw version', - output.data) + output_text) # View by commit id repo = pygit2.Repository(os.path.join(self.path, 'repos', 'test.git')) @@ -2073,43 +2164,47 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.get('/test/blob/%s/f/test.jpg' % commit.oid.hex) self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Binary files cannot be rendered.
    ', output.data) - self.assertIn('/f/test.jpg">view the raw version', output.data) + 'Binary files cannot be rendered.
    ', output_text) + self.assertIn('/f/test.jpg">view the raw version', output_text) # View by image name -- somehow we support this output = self.app.get('/test/blob/sources/f/test.jpg') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( - 'Binary files cannot be rendered.
    ', output.data) - self.assertIn('/f/test.jpg">view the raw version', output.data) + 'Binary files cannot be rendered.
    ', output_text) + self.assertIn('/f/test.jpg">view the raw version', output_text) # View binary file output = self.app.get('/test/blob/sources/f/test_binary') self.assertEqual(output.status_code, 200) - self.assertIn('/f/test_binary">view the raw version', output.data) - self.assertTrue( - 'Binary files cannot be rendered.
    ' - in output.data) + output_text = output.get_data(as_text=True) + self.assertIn('/f/test_binary">view the raw version', output_text) + self.assertIn( + 'Binary files cannot be rendered.
    ', output_text) # View folder output = self.app.get('/test/blob/master/f/folder1') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '', - output.data) - self.assertIn('Tree - test - Pagure', output.data) + output_text) + self.assertIn('Tree - test - Pagure', output_text) self.assertIn( - '
    ', output.data) + '', output_text) # Verify the nav links correctly when viewing a nested folder/file. output = self.app.get('/test/blob/master/f/folder1/folder2/file') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '
  • \n' ' ' '  folder2\n' - '
  • ', output.data) + ' ', output_text) # View by image name -- with a non-existant file output = self.app.get('/test/blob/sources/f/testfoo.jpg') @@ -2123,18 +2218,21 @@ class PagureFlaskRepotests(tests.Modeltests): ncommits=1, filename='Šource') output = self.app.get('/test/blob/master/f/Šource') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertEqual(output.headers['Content-Type'].lower(), 'text/html; charset=utf-8') - self.assertIn('  Šource', output.data) - self.assertIn('
     bar
    ', output.data) + self.assertIn( + '  Šource', + output_text) + self.assertIn('
    ', output_text) self.assertIn( '', output.data) + 'data-line-number="1">', output_text) self.assertTrue( '' - in output.data + in output_text or - '' in output.data + '' in output_text ) # Add a fork of a fork @@ -2161,20 +2259,22 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.get( '/fork/pingou/test3/blob/master/f/folder1/folder2/file') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertIn( '
  • \n' '   ' - 'folder2\n
  • ', output.data) + 'folder2\n ', output_text) output = self.app.get('/fork/pingou/test3/blob/master/f/sources') self.assertEqual(output.status_code, 200) - self.assertIn('
    Row 0
    Row 0
    Row 0
    ', output.data) + output_text = output.get_data(as_text=True) + self.assertIn('
    ', output_text) self.assertIn( '', - output.data) + output_text) self.assertIn( - '', output.data) + '', output_text) @patch( 'pagure.lib.encoding_utils.decode', @@ -2197,7 +2297,8 @@ class PagureFlaskRepotests(tests.Modeltests): # View file output = self.app.get('/test/blob/master/f/sources') self.assertEqual(output.status_code, 200) - self.assertIn('Binary files cannot be rendered.
    ', output.data) + output_text = output.get_data(as_text=True) + self.assertIn('Binary files cannot be rendered.
    ', output_text) def test_view_raw_file(self): """ Test the view_raw_file endpoint. """ @@ -2222,9 +2323,10 @@ class PagureFlaskRepotests(tests.Modeltests): # View first commit output = self.app.get('/test/raw/master') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertEqual(output.headers['Content-Type'].lower(), 'text/plain; charset=ascii') - self.assertTrue(':Author: Pierre-Yves Chibon' in output.data) + self.assertIn(':Author: Pierre-Yves Chibon', output_text) # Add some more content to the repo tests.add_content_git_repo(os.path.join(self.path, 'repos', @@ -2242,12 +2344,14 @@ class PagureFlaskRepotests(tests.Modeltests): self.assertEqual(output.headers['Content-Type'].lower(), 'text/plain; charset=ascii') self.assertEqual(output.status_code, 200) - self.assertTrue('foo\n bar' in output.data) + output_text = output.get_data(as_text=True) + self.assertIn('foo\n bar', output_text) # View what's supposed to be an image output = self.app.get('/test/raw/master/f/test.jpg') self.assertEqual(output.status_code, 200) - self.assertTrue(output.data.startswith('\x00\x00\x01\x00')) + output_text = output.get_data() + self.assertTrue(output_text.startswith(b'\x00\x00\x01\x00')) # View by commit id repo = pygit2.Repository(os.path.join(self.path, 'repos', 'test.git')) @@ -2255,19 +2359,22 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.get('/test/raw/%s/f/test.jpg' % commit.oid.hex) self.assertEqual(output.status_code, 200) - self.assertTrue(output.data.startswith('\x00\x00\x01\x00')) + output_text = output.get_data() + self.assertTrue(output_text.startswith(b'\x00\x00\x01\x00')) # View by image name -- somehow we support this output = self.app.get('/test/raw/sources/f/test.jpg') self.assertEqual(output.status_code, 200) - self.assertTrue(output.data.startswith('\x00\x00\x01\x00')) + output_text = output.get_data() + self.assertTrue(output_text.startswith(b'\x00\x00\x01\x00')) # View binary file output = self.app.get('/test/raw/sources/f/test_binary') self.assertEqual(output.status_code, 200) + output_text = output.get_data() self.assertEqual(output.headers['Content-Type'].lower(), 'application/octet-stream') - self.assertTrue(output.data.startswith('\x00\x00\x01\x00')) + self.assertTrue(output_text.startswith(b'\x00\x00\x01\x00')) # View folder output = self.app.get('/test/raw/master/f/folder1') @@ -2284,14 +2391,16 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.get('/test/raw/master') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertEqual(output.headers['Content-Type'].lower(), 'text/plain; charset=ascii') - self.assertTrue(output.data.startswith( + self.assertTrue(output_text.startswith( 'diff --git a/test_binary b/test_binary\n')) output = self.app.get('/test/raw/%s' % commit.oid.hex) self.assertEqual(output.status_code, 200) - self.assertTrue(output.data.startswith( + output_text = output.get_data(as_text=True) + self.assertTrue(output_text.startswith( 'diff --git a/test_binary b/test_binary\n')) # Add a fork of a fork @@ -2316,9 +2425,10 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.get('/fork/pingou/test3/raw/master/f/sources') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertEqual(output.headers['Content-Type'].lower(), 'text/plain; charset=ascii') - self.assertTrue('foo\n bar' in output.data) + self.assertIn('foo\n bar', output_text) def test_view_blame_file(self): """ Test the view_blame_file endpoint. """ @@ -2356,13 +2466,14 @@ class PagureFlaskRepotests(tests.Modeltests): # View in master branch output = self.app.get('/test/blame/sources') self.assertEqual(output.status_code, 200) - self.assertIn(b'
     barRow 0
     barRow 0
    ', output.data) + output_text = output.get_data(as_text=True) + self.assertIn('
    ', output_text) self.assertIn( - b'', output.data) + '', output_text) self.assertIn( - b'', output.data) - data = regex.findall(output.data) + '', output_text) + data = regex.findall(output_text) self.assertEqual(len(data), 2) # View for a commit @@ -2373,42 +2484,46 @@ class PagureFlaskRepotests(tests.Modeltests): output = self.app.get('/test/blame/sources?identifier=%s' % parent) self.assertEqual(output.status_code, 200) - self.assertIn(b'
     bar
     bar
    ', output.data) + output_text = output.get_data(as_text=True) + self.assertIn('
    ', output_text) self.assertIn( - b'', output.data) + '', output_text) self.assertIn( - b'', output.data) - data = regex.findall(output.data) + '', output_text) + data = regex.findall(output_text) self.assertEqual(len(data), 2) # View in feature branch output = self.app.get('/test/blame/sources?identifier=feature') self.assertEqual(output.status_code, 200) - self.assertIn(b'
     bar
     bar
    ', output.data) + output_text = output.get_data(as_text=True) + self.assertIn('
    ', output_text) self.assertIn( - b'', output.data) + '', output_text) self.assertIn( - b'', output.data) - data2 = regex.findall(output.data) + '', output_text) + data2 = regex.findall(output_text) self.assertEqual(len(data2), 2) self.assertNotEqual(data, data2) # View what's supposed to be an image output = self.app.get('/test/blame/test.jpg') self.assertEqual(output.status_code, 400) + output_text = output.get_data(as_text=True) self.assertIn( - b'400 Bad Request', output.data) + '400 Bad Request', output_text) self.assertIn( - b'

    Binary files cannot be blamed

    ', output.data) + '

    Binary files cannot be blamed

    ', output_text) # View folder output = self.app.get('/test/blame/folder1') self.assertEqual(output.status_code, 404) - self.assertIn("Page not found :'( - Pagure", output.data) + output_text = output.get_data(as_text=True) + self.assertIn("Page not found :'( - Pagure", output_text) self.assertIn( - '

    Page not found (404)

    ', output.data) + '

    Page not found (404)

    ', output_text) # View by image name -- with a non-existant file output = self.app.get('/test/blame/testfoo.jpg') @@ -2422,18 +2537,24 @@ class PagureFlaskRepotests(tests.Modeltests): ncommits=1, filename='Šource') output = self.app.get('/test/blame/Šource') self.assertEqual(output.status_code, 200) + output_text = output.get_data(as_text=True) self.assertEqual(output.headers['Content-Type'].lower(), 'text/html; charset=utf-8') - self.assertIn('  Šource', output.data) - self.assertIn('
     bar
     bar
    ', output.data) + self.assertIn( + '  Šource', + output_text + ) + self.assertIn( + '
    ', output_text) self.assertIn( '', output.data) + 'data-line-number="1">', output_text) self.assertTrue( '' - in output.data + in output_text or - '' in output.data + '' + in output_text ) # Add a fork of a fork @@ -2457,16 +2578,17 @@ class PagureFlaskRepotests(tests.Modeltests): ncommits=10) tests.add_content_to_git( os.path.join(self.path, 'repos', 'forks', 'pingou', 'test3.git'), - content=u'✨☃🍰☃✨'.encode('utf-8')) + content='✨☃🍰☃✨'.encode('utf-8')) output = self.app.get('/fork/pingou/test3/blame/sources') self.assertEqual(output.status_code, 200) - self.assertIn('
    Row 0
    Row 0
    Row 0
    ', output.data) + output_text = output.get_data(as_text=True) + self.assertIn('
    ', output_text) self.assertIn( '', output.data) + 'data-line-number="1">', output_text) self.assertIn( - '', output.data) + '', output_text) def test_view_blame_file_on_tag(self): """ Test the view_blame_file endpoint. """ @@ -2492,13 +2614,14 @@ class PagureFlaskRepotests(tests.Modeltests): # View for tag v1.0 output = self.app.get('/test/blame/sources?identifier=v1.0') self.assertEqual(output.status_code, 200) - self.assertIn(b'
     barRow 0
     barRow 0
    ', output.data) + output_text = output.get_data(as_text=True) + self.assertIn('
    ', output_text) self.assertIn( - b'', output.data) + '', output_text) self.assertIn( - b'', output.data) - data = regex.findall(output.data) + '', output_text) + data = regex.findall(output_text) self.assertEqual(len(data), 2) def test_view_commit(self): @@ -2526,17 +2649,19 @@ class PagureFlaskRepotests(tests.Modeltests): # View first commit output = self.app.get('/test/c/%s' % commit.oid.hex) self.assertEqual(output.status_code, 200) - self.assertTrue( - '
     bar
     bar