from paste.errordocument import forward from paste.fixture import * from paste.recursive import RecursiveMiddleware def simple_app(environ, start_response): start_response("200 OK", [('Content-type', 'text/plain')]) return [b'requested page returned'] def not_found_app(environ, start_response): start_response("404 Not found", [('Content-type', 'text/plain')]) return [b'requested page returned'] def test_ok(): app = TestApp(simple_app) res = app.get('') assert res.header('content-type') == 'text/plain' assert res.full_status == '200 OK' assert 'requested page returned' in res def error_docs_app(environ, start_response): if environ['PATH_INFO'] == '/not_found': start_response("404 Not found", [('Content-type', 'text/plain')]) return [b'Not found'] elif environ['PATH_INFO'] == '/error': start_response("200 OK", [('Content-type', 'text/plain')]) return [b'Page not found'] else: return simple_app(environ, start_response) def test_error_docs_app(): app = TestApp(error_docs_app) res = app.get('') assert res.header('content-type') == 'text/plain' assert res.full_status == '200 OK' assert 'requested page returned' in res res = app.get('/error') assert res.header('content-type') == 'text/plain' assert res.full_status == '200 OK' assert 'Page not found' in res res = app.get('/not_found', status=404) assert res.header('content-type') == 'text/plain' assert res.full_status == '404 Not found' assert 'Not found' in res def test_forward(): app = forward(error_docs_app, codes={404:'/error'}) app = TestApp(RecursiveMiddleware(app)) res = app.get('') assert res.header('content-type') == 'text/plain' assert res.full_status == '200 OK' assert 'requested page returned' in res res = app.get('/error') assert res.header('content-type') == 'text/plain' assert res.full_status == '200 OK' assert 'Page not found' in res res = app.get('/not_found', status=404) assert res.header('content-type') == 'text/plain' assert res.full_status == '404 Not found' # Note changed response assert 'Page not found' in res def auth_required_app(environ, start_response): start_response('401 Unauthorized', [('content-type', 'text/plain'), ('www-authenticate', 'Basic realm="Foo"')]) return ['Sign in!'] def auth_docs_app(environ, start_response): if environ['PATH_INFO'] == '/auth': return auth_required_app(environ, start_response) elif environ['PATH_INFO'] == '/auth_doc': start_response("200 OK", [('Content-type', 'text/html')]) return [b'<html>Login!</html>'] else: return simple_app(environ, start_response) def test_auth_docs_app(): wsgi_app = forward(auth_docs_app, codes={401: '/auth_doc'}) app = TestApp(wsgi_app) res = app.get('/auth_doc') assert res.header('content-type') == 'text/html' res = app.get('/auth', status=401) assert res.header('content-type') == 'text/html' assert res.header('www-authenticate') == 'Basic realm="Foo"' assert res.body == b'<html>Login!</html>' def test_bad_error(): def app(environ, start_response): start_response('404 Not Found', [('content-type', 'text/plain')]) return ['not found'] app = forward(app, {404: '/404.html'}) app = TestApp(app) resp = app.get('/test', expect_errors=True) print(resp)