Merge branch 'idea/check_mgoblin_static'

* idea/check_mgoblin_static:
  Move TestingMiddleware to tests/tools.py
  Some docs for the TestingMiddleware
  591: Let Testing Middleware check for staticdirect() usage
This commit is contained in:
Elrond 2011-11-12 13:39:50 +01:00
commit 8daf78db4e
3 changed files with 54 additions and 2 deletions

View File

@ -1,5 +1,5 @@
[mediagoblin]
direct_remote_path = /mgoblin_static/
direct_remote_path = /test_static/
email_sender_address = "notice@mediagoblin.example.org"
email_debug_mode = true
db_name = __mediagoblin_tests__

View File

@ -5,7 +5,7 @@ debug = true
use = egg:Paste#urlmap
/ = mediagoblin
/mgoblin_media/ = publicstore_serve
/mgoblin_static/ = mediagoblin_static
/test_static/ = mediagoblin_static
[app:mediagoblin]
use = egg:mediagoblin#app

View File

@ -21,6 +21,7 @@ import os, shutil
from paste.deploy import loadapp
from webtest import TestApp
from mediagoblin import mg_globals
from mediagoblin.tools import testing
from mediagoblin.init.config import read_mediagoblin_config
from mediagoblin.decorators import _make_safe
@ -49,6 +50,51 @@ $ CELERY_CONFIG_MODULE=mediagoblin.init.celery.from_tests ./bin/nosetests"""
class BadCeleryEnviron(Exception): pass
class TestingMiddleware(object):
"""
Middleware for the Unit tests
It might make sense to perform some tests on all
requests/responses. Or prepare them in a special
manner. For example all html responses could be tested
for being valid html *after* being rendered.
This module is getting inserted at the front of the
middleware list, which means: requests are handed here
first, responses last. So this wraps up the "normal"
app.
If you need to add a test, either add it directly to
the appropiate process_request or process_response, or
create a new method and call it from process_*.
"""
def __init__(self, mg_app):
self.app = mg_app
def process_request(self, request):
pass
def process_response(self, request, response):
# All following tests should be for html only!
if response.content_type != "text/html":
# Get out early
return
# If the template contains a reference to
# /mgoblin_static/ instead of using
# /request.staticdirect(), error out here.
# This could probably be implemented as a grep on
# the shipped templates easier...
if response.text.find("/mgoblin_static/") >= 0:
raise AssertionError(
"Response HTML contains reference to /mgoblin_static/ "
"instead of staticdirect. Request was for: "
+ request.full_path)
return
def suicide_if_bad_celery_environ():
if not os.environ.get('CELERY_CONFIG_MODULE') == \
'mediagoblin.init.celery.from_tests':
@ -103,6 +149,12 @@ def get_test_app(dump_old_app=True):
test_app = loadapp(
'config:' + TEST_SERVER_CONFIG)
# Insert the TestingMiddleware, which can do some
# sanity checks on every request/response.
# Doing it this way is probably not the cleanest way.
# We'll fix it, when we have plugins!
mg_globals.app.middleware.insert(0, TestingMiddleware(mg_globals.app))
app = TestApp(test_app)
MGOBLIN_APP = app