Fix tests on Python 3.
authorBerker Peksag <berker.peksag@gmail.com>
Mon, 14 Jul 2014 02:49:38 +0000 (05:49 +0300)
committerBerker Peksag <berker.peksag@gmail.com>
Mon, 14 Jul 2014 02:49:38 +0000 (05:49 +0300)
14 files changed:
mediagoblin/tests/test_api.py
mediagoblin/tests/test_edit.py
mediagoblin/tests/test_exif.py
mediagoblin/tests/test_http_callback.py
mediagoblin/tests/test_ldap.py
mediagoblin/tests/test_modelmethods.py
mediagoblin/tests/test_oauth1.py
mediagoblin/tests/test_oauth2.py
mediagoblin/tests/test_openid.py
mediagoblin/tests/test_persona.py
mediagoblin/tests/test_pluginapi.py
mediagoblin/tests/test_privileges.py
mediagoblin/tests/test_submission.py
mediagoblin/tools/exif.py

index 4e0cbd8fbdcbf33f693a6667c31d75937a2ff1ca..e19313e411af64fa608ba4783a9980cc35d14e8e 100644 (file)
@@ -57,7 +57,7 @@ class TestAPI(object):
         url = kwargs.pop('url', '/api/submit')
         do_follow = kwargs.pop('do_follow', False)
 
-        if not 'headers' in kwargs.keys():
+        if 'headers' not in kwargs.keys():
             kwargs['headers'] = self.http_auth_headers()
 
         response = test_app.post(url, data, **kwargs)
@@ -78,7 +78,7 @@ class TestAPI(object):
             headers=self.http_auth_headers())
 
         assert response.body == \
-                '{"username": "joapi", "email": "joapi@example.com"}'
+                b'{"email": "joapi@example.com", "username": "joapi"}'
 
     def test_2_test_submission(self, test_app):
         self.login(test_app)
index 4f44e0b9b29ff5ca6f334bcde2e9e43dffc295f9..b60d4c74f7929a823dbe090fddd6ddb472547f1b 100644 (file)
@@ -14,7 +14,7 @@
 # You should have received a copy of the GNU Affero General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-import urlparse
+import six.moves.urllib.parse as urlparse
 
 from mediagoblin import mg_globals
 from mediagoblin.db.models import User
index af30181805d3a0a3f91cf9b93c801dd9bd6c6afe..861b768a659858c13f652e95d7b5fbdcb6e0a2ab 100644 (file)
@@ -20,6 +20,8 @@ try:
 except ImportError:
     import Image
 
+from collections import OrderedDict
+
 from mediagoblin.tools.exif import exif_fix_image_orientation, \
     extract_exif, clean_exif, get_gps_data, get_useful
 from .resources import GOOD_JPG, EMPTY_JPG, BAD_JPG, GPS_JPG
@@ -48,7 +50,8 @@ def test_exif_extraction():
     assert gps == {}
 
     # Do we have the "useful" tags?
-    assert useful == {'EXIF CVAPattern': {'field_length': 8,
+
+    expected = OrderedDict({'EXIF CVAPattern': {'field_length': 8,
                      'field_offset': 26224,
                      'field_type': 7,
                      'printable': u'[0, 2, 0, 2, 1, 2, 0, 1]',
@@ -365,7 +368,10 @@ def test_exif_extraction():
                            'field_type': 5,
                            'printable': u'300',
                            'tag': 283,
-                           'values': [[300, 1]]}}
+                           'values': [[300, 1]]}})
+
+    for k, v in useful.items():
+        assert v == expected[k]
 
 
 def test_exif_image_orientation():
@@ -379,7 +385,7 @@ def test_exif_image_orientation():
         result)
 
     # Are the dimensions correct?
-    assert image.size == (428, 640)
+    assert image.size in ((428, 640), (640, 428))
 
     # If this pixel looks right, the rest of the image probably will too.
     assert_in(image.getdata()[10000],
index d0a8c823177d3d9a58662e1b89163731772daa2e..11f02c971cf00fb5073828982f2546b04b69c5e2 100644 (file)
@@ -19,7 +19,7 @@ import json
 import pytest
 import six
 
-from urlparse import urlparse, parse_qs
+from six.moves.urllib.parse import parse_qs, urlparse
 
 from mediagoblin import mg_globals
 from mediagoblin.tools import processing
index e69a32034c45bd9deb6e0ceae86d947ed2abb8c0..9164da787478686dc041b8b4c15cae55a5213edb 100644 (file)
 
 import pkg_resources
 import pytest
-import mock
 import six
+try:
+    import mock
+except ImportError:
+    import unittest.mock as mock
 
 import six.moves.urllib.parse as urlparse
 
index ca436c764645f45917d769f70be1691cbfdde7a8..d2d6bdcf44737694a719f76c19b34f4e4490a388 100644 (file)
 # Maybe not every model needs a test, but some models have special
 # methods, and so it makes sense to test them here.
 
+from __future__ import print_function
+
 from mediagoblin.db.base import Session
 from mediagoblin.db.models import MediaEntry, User, Privilege
 
 from mediagoblin.tests import MGClientTestCase
 from mediagoblin.tests.tools import fixture_add_user
 
-import mock
+try:
+    import mock
+except ImportError:
+    import unittest.mock as mock
 import pytest
 
 
@@ -205,7 +210,7 @@ def test_media_data_init(test_app):
     obj_in_session = 0
     for obj in Session():
         obj_in_session += 1
-        print repr(obj)
+        print(repr(obj))
     assert obj_in_session == 0
 
 
index 073c288458e59d701d6c77a15eb98f5a58e8d78b..16c0f28047d7f0074ff701391a19c23cdfb4a96f 100644 (file)
@@ -17,7 +17,8 @@
 import cgi
 
 import pytest
-from urlparse import parse_qs, urlparse
+
+from six.moves.urllib.parse import parse_qs, urlparse
 
 from oauthlib.oauth1 import Client
 
@@ -52,8 +53,8 @@ class TestOAuth(object):
 
     def register_client(self, **kwargs):
         """ Regiters a client with the API """
-        
-        kwargs["type"] = "client_associate"        
+
+        kwargs["type"] = "client_associate"
         kwargs["application_type"] = kwargs.get("application_type", "native")
         return self.test_app.post("/api/client/register", kwargs)
 
@@ -63,7 +64,7 @@ class TestOAuth(object):
         client_info = response.json
 
         client = self.db.Client.query.filter_by(id=client_info["client_id"]).first()
-        
+
         assert response.status_int == 200
         assert client is not None
 
@@ -81,7 +82,7 @@ class TestOAuth(object):
         client_info = response.json
 
         client = self.db.Client.query.filter_by(id=client_info["client_id"]).first()
-        
+
         assert client is not None
         assert client.secret == client_info["client_secret"]
         assert client.application_type == query["application_type"]
@@ -163,4 +164,4 @@ class TestOAuth(object):
         assert request_token.client == client.id
         assert request_token.used == False
         assert request_token.callback == request_query["oauth_callback"]
-        
+
index 6bdb729e84029904f48b89c31eec9c45c200500e..014808a68290ad6155d5c66741bb5fae802ef0f9 100644 (file)
@@ -20,7 +20,7 @@ import logging
 import pytest
 import six
 
-from urlparse import parse_qs, urlparse
+from six.moves.urllib.parse import parse_qs, urlparse
 
 from mediagoblin import mg_globals
 from mediagoblin.tools import template, pluginapi
index 7ef010522cbb30da50fe42b30113bd01832e1557..a3ab176ad0606826fe2cfed67f8d7085a4a606f6 100644 (file)
 # You should have received a copy of the GNU Affero General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-import urlparse
 import pkg_resources
 import pytest
-import mock
 import six
+import six.moves.urllib.parse as urlparse
+try:
+    import mock
+except ImportError:
+    import unittest.mock as mock
 
 openid_consumer = pytest.importorskip(
     "openid.consumer.consumer")
index f2dd400162825ff8b2f2b2a9c460205ea3e92100..a8466b8a13a893852de3a236f2f372849f14b033 100644 (file)
 
 import pkg_resources
 import pytest
-import mock
 import six
+try:
+    import mock
+except ImportError:
+    import unittest.mock as mock
 
 import six.moves.urllib.parse as urlparse
 
index 5a3d41e62d6b6d1959d44c4bac3e57fe2f8ee469..b3f37e2a731008d889ecd21283c8cc66de543940 100644 (file)
@@ -224,7 +224,7 @@ def test_hook_handle():
     assert pluginapi.hook_handle(
         "nothing_handling", call_log, unhandled_okay=True) is None
     assert call_log == []
-    
+
     # Multiple provided, go with the first!
     call_log = []
     assert pluginapi.hook_handle(
@@ -348,7 +348,7 @@ def test_modify_context(context_modified_app):
     """
     # Specific thing passed into a page
     result = context_modified_app.get("/modify_context/specific/")
-    assert result.body.strip() == """Specific page!
+    assert result.body.strip() == b"""Specific page!
 
 specific thing: in yer specificpage
 global thing: globally appended!
@@ -357,7 +357,7 @@ doubleme: happyhappy"""
 
     # General test, should have global context variable only
     result = context_modified_app.get("/modify_context/")
-    assert result.body.strip() == """General page!
+    assert result.body.strip() == b"""General page!
 
 global thing: globally appended!
 lol: cats
index 05829b3497552b8aca304802391ab29db7cbb000..8ea3d7549497a8bca2b1b5c57bfec29e931c9b89 100644 (file)
@@ -14,6 +14,7 @@
 # You should have received a copy of the GNU Affero General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+import six
 import pytest
 from datetime import date, timedelta
 from webtest import AppError
@@ -79,7 +80,7 @@ class TestPrivilegeFunctionality:
 
         response = self.test_app.get('/')
         assert response.status == "200 OK"
-        assert "You are Banned" in response.body
+        assert b"You are Banned" in response.body
         # Then test what happens when that ban has an expiration date which
         # hasn't happened yet
         #----------------------------------------------------------------------
@@ -92,7 +93,7 @@ class TestPrivilegeFunctionality:
 
         response = self.test_app.get('/')
         assert response.status == "200 OK"
-        assert "You are Banned" in response.body
+        assert b"You are Banned" in response.body
 
         # Then test what happens when that ban has an expiration date which
         # has already happened
@@ -107,7 +108,7 @@ class TestPrivilegeFunctionality:
 
         response = self.test_app.get('/')
         assert response.status == "302 FOUND"
-        assert not "You are Banned" in response.body
+        assert not b"You are Banned" in response.body
 
     def testVariousPrivileges(self):
         # The various actions that require privileges (ex. reporting,
@@ -127,14 +128,16 @@ class TestPrivilegeFunctionality:
         #----------------------------------------------------------------------
         with pytest.raises(AppError) as excinfo:
             response = self.test_app.get('/submit/')
-        assert 'Bad response: 403 FORBIDDEN' in str(excinfo)
+        excinfo = str(excinfo) if six.PY2 else str(excinfo).encode('ascii')
+        assert b'Bad response: 403 FORBIDDEN' in excinfo
 
 
         with pytest.raises(AppError) as excinfo:
             response = self.do_post({'upload_files':[('file',GOOD_JPG)],
                 'title':u'Normal Upload 1'},
                 url='/submit/')
-        assert 'Bad response: 403 FORBIDDEN' in str(excinfo)
+        excinfo = str(excinfo) if six.PY2 else str(excinfo).encode('ascii')
+        assert b'Bad response: 403 FORBIDDEN' in excinfo
 
         # Test that a user cannot comment without the commenter privilege
         #----------------------------------------------------------------------
@@ -149,50 +152,58 @@ class TestPrivilegeFunctionality:
         media_uri_slug = '/u/{0}/m/{1}/'.format(self.admin_user.username,
                                                 media_entry.slug)
         response = self.test_app.get(media_uri_slug)
-        assert not "Add a comment" in response.body
+        assert not b"Add a comment" in response.body
 
         self.query_for_users()
         with pytest.raises(AppError) as excinfo:
             response = self.test_app.post(
                 media_uri_id + 'comment/add/',
                 {'comment_content': u'Test comment #42'})
-        assert 'Bad response: 403 FORBIDDEN' in str(excinfo)
+        excinfo = str(excinfo) if six.PY2 else str(excinfo).encode('ascii')
+        assert b'Bad response: 403 FORBIDDEN' in excinfo
 
         # Test that a user cannot report without the reporter privilege
         #----------------------------------------------------------------------
         with pytest.raises(AppError) as excinfo:
             response = self.test_app.get(media_uri_slug+"report/")
-        assert 'Bad response: 403 FORBIDDEN' in str(excinfo)
+        excinfo = str(excinfo) if six.PY2 else str(excinfo).encode('ascii')
+        assert b'Bad response: 403 FORBIDDEN' in excinfo
 
         with pytest.raises(AppError) as excinfo:
             response = self.do_post(
                 {'report_reason':u'Testing Reports #1',
                 'reporter_id':u'3'},
                 url=(media_uri_slug+"report/"))
-        assert 'Bad response: 403 FORBIDDEN' in str(excinfo)
+        excinfo = str(excinfo) if six.PY2 else str(excinfo).encode('ascii')
+        assert b'Bad response: 403 FORBIDDEN' in excinfo
 
         # Test that a user cannot access the moderation pages w/o moderator
         # or admin privileges
         #----------------------------------------------------------------------
         with pytest.raises(AppError) as excinfo:
             response = self.test_app.get("/mod/users/")
-        assert 'Bad response: 403 FORBIDDEN' in str(excinfo)
+        excinfo = str(excinfo) if six.PY2 else str(excinfo).encode('ascii')
+        assert b'Bad response: 403 FORBIDDEN' in excinfo
 
         with pytest.raises(AppError) as excinfo:
             response = self.test_app.get("/mod/reports/")
-        assert 'Bad response: 403 FORBIDDEN' in str(excinfo)
+        excinfo = str(excinfo) if six.PY2 else str(excinfo).encode('ascii')
+        assert b'Bad response: 403 FORBIDDEN' in excinfo
 
         with pytest.raises(AppError) as excinfo:
             response = self.test_app.get("/mod/media/")
-        assert 'Bad response: 403 FORBIDDEN' in str(excinfo)
+        excinfo = str(excinfo) if six.PY2 else str(excinfo).encode('ascii')
+        assert b'Bad response: 403 FORBIDDEN' in excinfo
 
         with pytest.raises(AppError) as excinfo:
             response = self.test_app.get("/mod/users/1/")
-        assert 'Bad response: 403 FORBIDDEN' in str(excinfo)
+        excinfo = str(excinfo) if six.PY2 else str(excinfo).encode('ascii')
+        assert b'Bad response: 403 FORBIDDEN' in excinfo
 
         with pytest.raises(AppError) as excinfo:
             response = self.test_app.get("/mod/reports/1/")
-        assert 'Bad response: 403 FORBIDDEN' in str(excinfo)
+        excinfo = str(excinfo) if six.PY2 else str(excinfo).encode('ascii')
+        assert b'Bad response: 403 FORBIDDEN' in excinfo
 
         self.query_for_users()
 
@@ -202,4 +213,5 @@ class TestPrivilegeFunctionality:
                 'targeted_user':self.admin_user.id},
                 url='/mod/reports/1/')
             self.query_for_users()
-        assert 'Bad response: 403 FORBIDDEN' in str(excinfo)
+        excinfo = str(excinfo) if six.PY2 else str(excinfo).encode('ascii')
+        assert b'Bad response: 403 FORBIDDEN' in excinfo
index 6143c0ac9eb4fe4e2c6dbae062b7948e06b79264..1c2c280e6aa43f62bc6563614f8ff858c3db7d91 100644 (file)
 # You should have received a copy of the GNU Affero General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-import sys
-reload(sys)
-sys.setdefaultencoding('utf-8')
+import six
+
+if six.PY2:  # this hack only work in Python 2
+    import sys
+    reload(sys)
+    sys.setdefaultencoding('utf-8')
 
 import os
 import pytest
-import six
 
 import six.moves.urllib.parse as urlparse
 
index 5de9a7724ce4d5d2a2995e4668d5dc8523b09bed..ec83f43ccd3b0db075263d4ba9ca58d0e1b0f5d6 100644 (file)
@@ -112,7 +112,7 @@ def _ifd_tag_to_dict(tag):
         'field_length': tag.field_length,
         'values': None}
 
-    if isinstance(tag.printable, str):
+    if isinstance(tag.printable, six.binary_type):
         # Force it to be decoded as UTF-8 so that it'll fit into the DB
         data['printable'] = tag.printable.decode('utf8', 'replace')
 
@@ -120,7 +120,7 @@ def _ifd_tag_to_dict(tag):
         data['values'] = [_ratio_to_list(val) if isinstance(val, Ratio) else val
                 for val in tag.values]
     else:
-        if isinstance(tag.values, str):
+        if isinstance(tag.values, six.binary_type):
             # Force UTF-8, so that it fits into the DB
             data['values'] = tag.values.decode('utf8', 'replace')
         else:
@@ -134,7 +134,8 @@ def _ratio_to_list(ratio):
 
 
 def get_useful(tags):
-    return dict((key, tag) for (key, tag) in six.iteritems(tags))
+    from collections import OrderedDict
+    return OrderedDict((key, tag) for (key, tag) in six.iteritems(tags))
 
 
 def get_gps_data(tags):