aboutsummaryrefslogtreecommitdiffstats
path: root/mediagoblin/tests
diff options
context:
space:
mode:
Diffstat (limited to 'mediagoblin/tests')
-rw-r--r--mediagoblin/tests/resources.py2
-rw-r--r--mediagoblin/tests/test_celery_setup.py2
-rw-r--r--mediagoblin/tests/test_edit.py8
-rw-r--r--mediagoblin/tests/test_mgoblin_app.ini6
-rw-r--r--mediagoblin/tests/test_notifications.py53
-rw-r--r--mediagoblin/tests/test_persona.py2
-rw-r--r--mediagoblin/tests/test_submission.py112
-rw-r--r--mediagoblin/tests/test_submission/COPYING.txt5
-rw-r--r--mediagoblin/tests/test_submission/big.pngbin0 -> 2212445 bytes
-rw-r--r--mediagoblin/tests/test_submission/medium.pngbin0 -> 1796336 bytes
10 files changed, 182 insertions, 8 deletions
diff --git a/mediagoblin/tests/resources.py b/mediagoblin/tests/resources.py
index f7b3037d..480f6d9a 100644
--- a/mediagoblin/tests/resources.py
+++ b/mediagoblin/tests/resources.py
@@ -29,6 +29,8 @@ EVIL_JPG = resource('evil.jpg')
EVIL_PNG = resource('evil.png')
BIG_BLUE = resource('bigblue.png')
GOOD_PDF = resource('good.pdf')
+MED_PNG = resource('medium.png')
+BIG_PNG = resource('big.png')
def resource_exif(f):
diff --git a/mediagoblin/tests/test_celery_setup.py b/mediagoblin/tests/test_celery_setup.py
index 0184436a..d60293f9 100644
--- a/mediagoblin/tests/test_celery_setup.py
+++ b/mediagoblin/tests/test_celery_setup.py
@@ -55,6 +55,6 @@ def test_setup_celery_from_config():
pkg_resources.resource_filename('mediagoblin.tests', 'celery.db'))
assert fake_celery_module.BROKER_TRANSPORT == 'sqlalchemy'
- assert fake_celery_module.BROKER_HOST == (
+ assert fake_celery_module.BROKER_URL == (
'sqlite:///' +
pkg_resources.resource_filename('mediagoblin.tests', 'kombu.db'))
diff --git a/mediagoblin/tests/test_edit.py b/mediagoblin/tests/test_edit.py
index 581af4ac..4740bd2a 100644
--- a/mediagoblin/tests/test_edit.py
+++ b/mediagoblin/tests/test_edit.py
@@ -112,26 +112,26 @@ class TestUserEdit(object):
# Test email already in db
template.clear_test_template_context()
test_app.post(
- '/edit/account/', {
+ '/edit/email/', {
'new_email': 'chris@example.com',
'password': 'toast'})
# Check form errors
context = template.TEMPLATE_TEST_CONTEXT[
- 'mediagoblin/edit/edit_account.html']
+ 'mediagoblin/edit/change_email.html']
assert context['form'].new_email.errors == [
u'Sorry, a user with that email address already exists.']
# Test successful email change
template.clear_test_template_context()
res = test_app.post(
- '/edit/account/', {
+ '/edit/email/', {
'new_email': 'new@example.com',
'password': 'toast'})
res.follow()
# Correct redirect?
- assert urlparse.urlsplit(res.location)[2] == '/u/chris/'
+ assert urlparse.urlsplit(res.location)[2] == '/edit/account/'
# Make sure we get email verification and try verifying
assert len(mail.EMAIL_TEST_INBOX) == 1
diff --git a/mediagoblin/tests/test_mgoblin_app.ini b/mediagoblin/tests/test_mgoblin_app.ini
index 535cf1c1..4cd3d9b6 100644
--- a/mediagoblin/tests/test_mgoblin_app.ini
+++ b/mediagoblin/tests/test_mgoblin_app.ini
@@ -13,6 +13,10 @@ tags_max_length = 50
# So we can start to test attachments:
allow_attachments = True
+upload_limit = 500
+
+max_file_size = 2
+
[storage:publicstore]
base_dir = %(here)s/user_dev/media/public
base_url = /mgoblin_media/
@@ -23,7 +27,7 @@ base_dir = %(here)s/user_dev/media/queue
[celery]
CELERY_ALWAYS_EAGER = true
CELERY_RESULT_DBURI = "sqlite:///%(here)s/user_dev/celery.db"
-BROKER_HOST = "sqlite:///%(here)s/user_dev/kombu.db"
+BROKER_URL = "sqlite:///%(here)s/test_user_dev/kombu.db"
[plugins]
[[mediagoblin.plugins.api]]
diff --git a/mediagoblin/tests/test_notifications.py b/mediagoblin/tests/test_notifications.py
index d52b8d5a..e075d475 100644
--- a/mediagoblin/tests/test_notifications.py
+++ b/mediagoblin/tests/test_notifications.py
@@ -149,3 +149,56 @@ otherperson@example.com\n\nSGkgb3RoZXJwZXJzb24sCmNocmlzIGNvbW1lbnRlZCBvbiB5b3VyI
# User should not have been notified
assert len(notifications) == 1
+
+ def test_mark_all_comment_notifications_seen(self):
+ """ Test that mark_all_comments_seen works"""
+
+ user = fixture_add_user('otherperson', password='nosreprehto')
+
+ media_entry = fixture_media_entry(uploader=user.id, state=u'processed')
+
+ fixture_comment_subscription(media_entry)
+
+ media_uri_id = '/u/{0}/m/{1}/'.format(user.username,
+ media_entry.id)
+
+ # add 2 comments
+ self.test_app.post(
+ media_uri_id + 'comment/add/',
+ {
+ 'comment_content': u'Test comment #43'
+ }
+ )
+
+ self.test_app.post(
+ media_uri_id + 'comment/add/',
+ {
+ 'comment_content': u'Test comment #44'
+ }
+ )
+
+ notifications = Notification.query.filter_by(
+ user_id=user.id).all()
+
+ assert len(notifications) == 2
+
+ # both comments should not be marked seen
+ assert notifications[0].seen == False
+ assert notifications[1].seen == False
+
+ # login with other user to mark notifications seen
+ self.logout()
+ self.login('otherperson', 'nosreprehto')
+
+ # mark all comment notifications seen
+ res = self.test_app.get('/notifications/comments/mark_all_seen/')
+ res.follow()
+
+ assert urlparse.urlsplit(res.location)[2] == '/'
+
+ notifications = Notification.query.filter_by(
+ user_id=user.id).all()
+
+ # both notifications should be marked seen
+ assert notifications[0].seen == True
+ assert notifications[1].seen == True
diff --git a/mediagoblin/tests/test_persona.py b/mediagoblin/tests/test_persona.py
index ce795258..919877c9 100644
--- a/mediagoblin/tests/test_persona.py
+++ b/mediagoblin/tests/test_persona.py
@@ -18,6 +18,8 @@ import pkg_resources
import pytest
import mock
+pytest.importorskip("requests")
+
from mediagoblin import mg_globals
from mediagoblin.db.base import Session
from mediagoblin.tests.tools import get_app
diff --git a/mediagoblin/tests/test_submission.py b/mediagoblin/tests/test_submission.py
index ac941063..7f4e8086 100644
--- a/mediagoblin/tests/test_submission.py
+++ b/mediagoblin/tests/test_submission.py
@@ -24,13 +24,14 @@ import pytest
from mediagoblin.tests.tools import fixture_add_user
from mediagoblin import mg_globals
-from mediagoblin.db.models import MediaEntry
+from mediagoblin.db.models import MediaEntry, User
+from mediagoblin.db.base import Session
from mediagoblin.tools import template
from mediagoblin.media_types.image import ImageMediaManager
from mediagoblin.media_types.pdf.processing import check_prerequisites as pdf_check_prerequisites
from .resources import GOOD_JPG, GOOD_PNG, EVIL_FILE, EVIL_JPG, EVIL_PNG, \
- BIG_BLUE, GOOD_PDF, GPS_JPG
+ 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)
@@ -107,9 +108,38 @@ class TestSubmission:
self.logout()
self.test_app.get(url)
+ def user_upload_limits(self, uploaded=None, upload_limit=None):
+ if uploaded:
+ self.test_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()
+
+ # ... and detach from session:
+ Session.expunge(self.test_user)
+
def test_normal_jpg(self):
+ # User uploaded should be 0
+ assert self.test_user.uploaded == 0
+
self.check_normal_upload(u'Normal upload 1', GOOD_JPG)
+ # User uploaded should be the same as GOOD_JPG size in Mb
+ file_size = os.stat(GOOD_JPG).st_size / (1024.0 * 1024)
+ 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
+
def test_normal_png(self):
self.check_normal_upload(u'Normal upload 2', GOOD_PNG)
@@ -121,6 +151,75 @@ class TestSubmission:
self.check_url(response, '/u/{0}/'.format(self.test_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
+
+ 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))
+ 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
+
+ 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
+
+ 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))
+ 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
+
+ def test_user_under_limit(self):
+ self.user_upload_limits(uploaded=499)
+
+ # User uploaded should be 499
+ assert self.test_user.uploaded == 499
+
+ response, context = self.do_post({'title': u'Normal upload 6'},
+ do_follow=False,
+ **self.upload_data(MED_PNG))
+ form = context['mediagoblin/submit/start.html']['submit_form']
+ 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
+
+ def test_big_file(self):
+ response, context = self.do_post({'title': u'Normal upload 7'},
+ do_follow=False,
+ **self.upload_data(BIG_PNG))
+
+ form = context['mediagoblin/submit/start.html']['submit_form']
+ assert form.file.errors == [u'Sorry, the file size is too big.']
+
def check_media(self, request, find_data, count=None):
media = MediaEntry.query.filter_by(**find_data)
if count is not None:
@@ -155,6 +254,7 @@ class TestSubmission:
'ffffffffffffffffffffffffffuuuuuuuuuuuuuuuuuuuuuuuuuu']
def test_delete(self):
+ self.user_upload_limits(uploaded=50)
response, request = self.do_post({'title': u'Balanced Goblin'},
*REQUEST_CONTEXT, do_follow=True,
**self.upload_data(GOOD_JPG))
@@ -199,6 +299,14 @@ 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
+
def test_evil_file(self):
# Test non-suppoerted file with non-supported extension
# -----------------------------------------------------
diff --git a/mediagoblin/tests/test_submission/COPYING.txt b/mediagoblin/tests/test_submission/COPYING.txt
new file mode 100644
index 00000000..3818aae4
--- /dev/null
+++ b/mediagoblin/tests/test_submission/COPYING.txt
@@ -0,0 +1,5 @@
+Images located in this directory tree are released under a GPLv3 license
+and CC BY-SA 3.0 license. To the extent possible under law, the author(s)
+have dedicated all copyright and related and neighboring rights to these
+files to the public domain worldwide. These files are distributed without
+any warranty.
diff --git a/mediagoblin/tests/test_submission/big.png b/mediagoblin/tests/test_submission/big.png
new file mode 100644
index 00000000..a284cfda
--- /dev/null
+++ b/mediagoblin/tests/test_submission/big.png
Binary files differ
diff --git a/mediagoblin/tests/test_submission/medium.png b/mediagoblin/tests/test_submission/medium.png
new file mode 100644
index 00000000..e8b9ca00
--- /dev/null
+++ b/mediagoblin/tests/test_submission/medium.png
Binary files differ