X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=mediagoblin%2Ftests%2Ftest_submission.py;h=1c2c280e6aa43f62bc6563614f8ff858c3db7d91;hb=65f20ca43592c2e8beca9b04651d9d1f6aa6b202;hp=7f4e808614ff9dff21c82c950788515911a011af;hpb=74ae6fb0b620c2f899e2c97ba5f6af105103df6f;p=mediagoblin.git diff --git a/mediagoblin/tests/test_submission.py b/mediagoblin/tests/test_submission.py index 7f4e8086..1c2c280e 100644 --- a/mediagoblin/tests/test_submission.py +++ b/mediagoblin/tests/test_submission.py @@ -14,14 +14,18 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -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 urlparse import os import pytest +import six.moves.urllib.parse as urlparse + from mediagoblin.tests.tools import fixture_add_user from mediagoblin import mg_globals from mediagoblin.db.models import MediaEntry, User @@ -34,7 +38,7 @@ from .resources import GOOD_JPG, GOOD_PNG, EVIL_FILE, EVIL_JPG, EVIL_PNG, \ BIG_BLUE, GOOD_PDF, GPS_JPG, MED_PNG, BIG_PNG GOOD_TAG_STRING = u'yin,yang' -BAD_TAG_STRING = unicode('rage,' + 'f' * 26 + 'u' * 26) +BAD_TAG_STRING = six.text_type('rage,' + 'f' * 26 + 'u' * 26) FORM_CONTEXT = ['mediagoblin/submit/start.html', 'submit_form'] REQUEST_CONTEXT = ['mediagoblin/user_pages/user.html', 'request'] @@ -47,12 +51,22 @@ class TestSubmission: # TODO: Possibly abstract into a decorator like: # @as_authenticated_user('chris') - test_user = fixture_add_user() - - self.test_user = test_user + fixture_add_user(privileges=[u'active',u'uploader', u'commenter']) self.login() + def our_user(self): + """ + Fetch the user we're submitting with. Every .get() or .post() + invalidates the session; this is a hacky workaround. + """ + #### FIXME: Pytest collects this as a test and runs this. + #### ... it shouldn't. At least it passes, but that's + #### totally stupid. + #### Also if we found a way to make this run it should be a + #### property. + return User.query.filter(User.username==u'chris').first() + def login(self): self.test_app.post( '/auth/login/', { @@ -98,10 +112,10 @@ class TestSubmission: def check_normal_upload(self, title, filename): response, context = self.do_post({'title': title}, do_follow=True, **self.upload_data(filename)) - self.check_url(response, '/u/{0}/'.format(self.test_user.username)) + self.check_url(response, '/u/{0}/'.format(self.our_user().username)) assert 'mediagoblin/user_pages/user.html' in context # Make sure the media view is at least reachable, logged in... - url = '/u/{0}/m/{1}/'.format(self.test_user.username, + url = '/u/{0}/m/{1}/'.format(self.our_user().username, title.lower().replace(' ', '-')) self.test_app.get(url) # ... and logged out too. @@ -109,24 +123,19 @@ class TestSubmission: self.test_app.get(url) def user_upload_limits(self, uploaded=None, upload_limit=None): + our_user = self.our_user() + if uploaded: - self.test_user.uploaded = uploaded + our_user.uploaded = uploaded if upload_limit: - self.test_user.upload_limit = upload_limit - - self.test_user.save() - - # Reload - self.test_user = User.query.filter_by( - username=self.test_user.username - ).first() + our_user.upload_limit = upload_limit - # ... and detach from session: - Session.expunge(self.test_user) + our_user.save() + Session.expunge(our_user) def test_normal_jpg(self): # User uploaded should be 0 - assert self.test_user.uploaded == 0 + assert self.our_user().uploaded == 0 self.check_normal_upload(u'Normal upload 1', GOOD_JPG) @@ -135,10 +144,7 @@ class TestSubmission: file_size = float('{0:.2f}'.format(file_size)) # Reload user - self.test_user = User.query.filter_by( - username=self.test_user.username - ).first() - assert self.test_user.uploaded == file_size + assert self.our_user().uploaded == file_size def test_normal_png(self): self.check_normal_upload(u'Normal upload 2', GOOD_PNG) @@ -148,54 +154,44 @@ class TestSubmission: response, context = self.do_post({'title': u'Normal upload 3 (pdf)'}, do_follow=True, **self.upload_data(GOOD_PDF)) - self.check_url(response, '/u/{0}/'.format(self.test_user.username)) + self.check_url(response, '/u/{0}/'.format(self.our_user().username)) assert 'mediagoblin/user_pages/user.html' in context def test_default_upload_limits(self): self.user_upload_limits(uploaded=500) # User uploaded should be 500 - assert self.test_user.uploaded == 500 + assert self.our_user().uploaded == 500 response, context = self.do_post({'title': u'Normal upload 4'}, do_follow=True, **self.upload_data(GOOD_JPG)) - self.check_url(response, '/u/{0}/'.format(self.test_user.username)) + self.check_url(response, '/u/{0}/'.format(self.our_user().username)) assert 'mediagoblin/user_pages/user.html' in context - # Reload user - self.test_user = User.query.filter_by( - username=self.test_user.username - ).first() - # Shouldn't have uploaded - assert self.test_user.uploaded == 500 + assert self.our_user().uploaded == 500 def test_user_upload_limit(self): self.user_upload_limits(uploaded=25, upload_limit=25) # User uploaded should be 25 - assert self.test_user.uploaded == 25 + assert self.our_user().uploaded == 25 response, context = self.do_post({'title': u'Normal upload 5'}, do_follow=True, **self.upload_data(GOOD_JPG)) - self.check_url(response, '/u/{0}/'.format(self.test_user.username)) + self.check_url(response, '/u/{0}/'.format(self.our_user().username)) assert 'mediagoblin/user_pages/user.html' in context - # Reload user - self.test_user = User.query.filter_by( - username=self.test_user.username - ).first() - # Shouldn't have uploaded - assert self.test_user.uploaded == 25 + assert self.our_user().uploaded == 25 def test_user_under_limit(self): self.user_upload_limits(uploaded=499) # User uploaded should be 499 - assert self.test_user.uploaded == 499 + assert self.our_user().uploaded == 499 response, context = self.do_post({'title': u'Normal upload 6'}, do_follow=False, @@ -204,13 +200,8 @@ class TestSubmission: assert form.file.errors == [u'Sorry, uploading this file will put you' ' over your upload limit.'] - # Reload user - self.test_user = User.query.filter_by( - username=self.test_user.username - ).first() - # Shouldn't have uploaded - assert self.test_user.uploaded == 499 + assert self.our_user().uploaded == 499 def test_big_file(self): response, context = self.do_post({'title': u'Normal upload 7'}, @@ -264,7 +255,7 @@ class TestSubmission: # render and post to the edit page. edit_url = request.urlgen( 'mediagoblin.edit.edit_media', - user=self.test_user.username, media_id=media_id) + user=self.our_user().username, media_id=media_id) self.test_app.get(edit_url) self.test_app.post(edit_url, {'title': u'Balanced Goblin', @@ -277,7 +268,7 @@ class TestSubmission: self.check_comments(request, media_id, 0) comment_url = request.urlgen( 'mediagoblin.user_pages.media_post_comment', - user=self.test_user.username, media_id=media_id) + user=self.our_user().username, media_id=media_id) response = self.do_post({'comment_content': 'i love this test'}, url=comment_url, do_follow=True)[0] self.check_comments(request, media_id, 1) @@ -286,7 +277,7 @@ class TestSubmission: # --------------------------------------------------- delete_url = request.urlgen( 'mediagoblin.user_pages.media_confirm_delete', - user=self.test_user.username, media_id=media_id) + user=self.our_user().username, media_id=media_id) # Empty data means don't confirm response = self.do_post({}, do_follow=True, url=delete_url)[0] media = self.check_media(request, {'title': u'Balanced Goblin'}, 1) @@ -299,13 +290,8 @@ class TestSubmission: self.check_media(request, {'id': media_id}, 0) self.check_comments(request, media_id, 0) - # Reload user - self.test_user = User.query.filter_by( - username = self.test_user.username - ).first() - # Check that user.uploaded is the same as before the upload - assert self.test_user.uploaded == 50 + assert self.our_user().uploaded == 50 def test_evil_file(self): # Test non-suppoerted file with non-supported extension @@ -359,7 +345,7 @@ class TestSubmission: # they'll be caught as failures during the processing step. response, context = self.do_post({'title': title}, do_follow=True, **self.upload_data(filename)) - self.check_url(response, '/u/{0}/'.format(self.test_user.username)) + self.check_url(response, '/u/{0}/'.format(self.our_user().username)) entry = mg_globals.database.MediaEntry.query.filter_by(title=title).first() assert entry.state == 'failed' assert entry.fail_error == u'mediagoblin.processing:BadMediaFail'