Fix #927 - Clean up federation code after Elrond's review
- Add json_error and use inplace of json_response where appropriate. - Add garbage_collection to config spec file. - Fix bugs in both garbage collection task and test - Handle /api/whoami when no user logged in and a test for such a case. - Validate ID is correct and user has comment privilege to comment.
This commit is contained in:
@@ -14,22 +14,16 @@
|
||||
# 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 json
|
||||
import datetime
|
||||
|
||||
import mock
|
||||
import pytz
|
||||
import pytest
|
||||
|
||||
from webtest import AppError
|
||||
from werkzeug.datastructures import FileStorage
|
||||
|
||||
from .resources import GOOD_JPG
|
||||
from mediagoblin import mg_globals
|
||||
from mediagoblin.media_types import sniff_media
|
||||
from mediagoblin.db.models import User, MediaEntry
|
||||
from mediagoblin.submit.lib import new_upload_entry
|
||||
from mediagoblin.tests.tools import fixture_add_user
|
||||
from mediagoblin.federation.task import collect_garbage
|
||||
from mediagoblin.moderation.tools import take_away_privileges
|
||||
|
||||
class TestAPI(object):
|
||||
@@ -40,7 +34,7 @@ class TestAPI(object):
|
||||
self.test_app = test_app
|
||||
self.db = mg_globals.database
|
||||
|
||||
self.user = fixture_add_user(privileges=[u'active', u'uploader'])
|
||||
self.user = fixture_add_user(privileges=[u'active', u'uploader', u'commenter'])
|
||||
|
||||
def _activity_to_feed(self, test_app, activity, headers=None):
|
||||
""" Posts an activity to the user's feed """
|
||||
@@ -265,32 +259,9 @@ class TestAPI(object):
|
||||
|
||||
assert "links" in profile
|
||||
|
||||
def test_garbage_collection_task(self, test_app):
|
||||
""" Test old media entry are removed by GC task """
|
||||
# Create a media entry that's unprocessed and over an hour old.
|
||||
entry_id = 72
|
||||
now = datetime.datetime.now(pytz.UTC)
|
||||
file_data = FileStorage(
|
||||
stream=open(GOOD_JPG, "rb"),
|
||||
filename="mah_test.jpg",
|
||||
content_type="image/jpeg"
|
||||
)
|
||||
def test_whoami_without_login(self, test_app):
|
||||
""" Test that whoami endpoint returns error when not logged in """
|
||||
with pytest.raises(AppError) as excinfo:
|
||||
response = test_app.get("/api/whoami")
|
||||
|
||||
# Find media manager
|
||||
media_type, media_manager = sniff_media(file_data, "mah_test.jpg")
|
||||
entry = new_upload_entry(self.user)
|
||||
entry.id = entry_id
|
||||
entry.title = "Mah Image"
|
||||
entry.slug = "slugy-slug-slug"
|
||||
entry.media_type = 'image'
|
||||
entry.uploaded = now - datetime.timedelta(days=2)
|
||||
entry.save()
|
||||
|
||||
# Validate the model exists
|
||||
assert MediaEntry.query.filter_by(id=entry_id).first() is not None
|
||||
|
||||
# Call the garbage collection task
|
||||
collect_garbage()
|
||||
|
||||
# Now validate the image has been deleted
|
||||
assert MediaEntry.query.filter_by(id=entry_id).first() is None
|
||||
assert "401 UNAUTHORIZED" in excinfo.value.message
|
||||
|
||||
@@ -14,7 +14,16 @@
|
||||
# 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 pytz
|
||||
import datetime
|
||||
|
||||
from werkzeug.datastructures import FileStorage
|
||||
|
||||
from .resources import GOOD_JPG
|
||||
from mediagoblin.db.base import Session
|
||||
from mediagoblin.media_types import sniff_media
|
||||
from mediagoblin.submit.lib import new_upload_entry
|
||||
from mediagoblin.submit.task import collect_garbage
|
||||
from mediagoblin.db.models import User, MediaEntry, MediaComment
|
||||
from mediagoblin.tests.tools import fixture_add_user, fixture_media_entry
|
||||
|
||||
@@ -91,3 +100,35 @@ def test_media_deletes_broken_attachment(test_app):
|
||||
|
||||
MediaEntry.query.get(media.id).delete()
|
||||
User.query.get(user_a.id).delete()
|
||||
|
||||
def test_garbage_collection_task(test_app):
|
||||
""" Test old media entry are removed by GC task """
|
||||
user = fixture_add_user()
|
||||
|
||||
# Create a media entry that's unprocessed and over an hour old.
|
||||
entry_id = 72
|
||||
now = datetime.datetime.now(pytz.UTC)
|
||||
file_data = FileStorage(
|
||||
stream=open(GOOD_JPG, "rb"),
|
||||
filename="mah_test.jpg",
|
||||
content_type="image/jpeg"
|
||||
)
|
||||
|
||||
# Find media manager
|
||||
media_type, media_manager = sniff_media(file_data, "mah_test.jpg")
|
||||
entry = new_upload_entry(user)
|
||||
entry.id = entry_id
|
||||
entry.title = "Mah Image"
|
||||
entry.slug = "slugy-slug-slug"
|
||||
entry.media_type = 'image'
|
||||
entry.created = now - datetime.timedelta(days=2)
|
||||
entry.save()
|
||||
|
||||
# Validate the model exists
|
||||
assert MediaEntry.query.filter_by(id=entry_id).first() is not None
|
||||
|
||||
# Call the garbage collection task
|
||||
collect_garbage()
|
||||
|
||||
# Now validate the image has been deleted
|
||||
assert MediaEntry.query.filter_by(id=entry_id).first() is None
|
||||
|
||||
Reference in New Issue
Block a user