diff options
| author | Chris McDonough <chrism@plope.com> | 2010-10-25 10:29:31 -0400 |
|---|---|---|
| committer | Chris McDonough <chrism@plope.com> | 2010-10-25 10:29:31 -0400 |
| commit | 64372401084889a440c9d990a0febc221e3e4b5c (patch) | |
| tree | c8939a341505d19f19fa6918d264b4e1d95326f8 /repoze/bfg/tests | |
| parent | c8e78c2037806f3e5dab57de635bf80865b7061d (diff) | |
| download | pyramid-64372401084889a440c9d990a0febc221e3e4b5c.tar.gz pyramid-64372401084889a440c9d990a0febc221e3e4b5c.tar.bz2 pyramid-64372401084889a440c9d990a0febc221e3e4b5c.zip | |
first pass at converting bfg to pyramid namespace
Diffstat (limited to 'repoze/bfg/tests')
87 files changed, 0 insertions, 15349 deletions
diff --git a/repoze/bfg/tests/__init__.py b/repoze/bfg/tests/__init__.py deleted file mode 100644 index 5bb534f79..000000000 --- a/repoze/bfg/tests/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# package diff --git a/repoze/bfg/tests/ccbugapp/__init__.py b/repoze/bfg/tests/ccbugapp/__init__.py deleted file mode 100644 index 546616b2c..000000000 --- a/repoze/bfg/tests/ccbugapp/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# fixture application diff --git a/repoze/bfg/tests/ccbugapp/configure.zcml b/repoze/bfg/tests/ccbugapp/configure.zcml deleted file mode 100644 index cb9ca6f1d..000000000 --- a/repoze/bfg/tests/ccbugapp/configure.zcml +++ /dev/null @@ -1,15 +0,0 @@ -<configure xmlns="http://namespaces.repoze.org/bfg"> - - <include package="repoze.bfg.includes" /> - - <route - view=".views.rdf_view" - path="licenses/:license_code/:license_version/rdf" - name="rdf" /> - - <route - view=".views.juri_view" - path="licenses/:license_code/:license_version/:jurisdiction" - name="juri" /> - -</configure> diff --git a/repoze/bfg/tests/ccbugapp/views.py b/repoze/bfg/tests/ccbugapp/views.py deleted file mode 100644 index 4a6939ac2..000000000 --- a/repoze/bfg/tests/ccbugapp/views.py +++ /dev/null @@ -1,10 +0,0 @@ -from webob import Response - -def rdf_view(request): - """ """ - return Response('rdf') - -def juri_view(request): - """ """ - return Response('juri') - diff --git a/repoze/bfg/tests/exceptionviewapp/__init__.py b/repoze/bfg/tests/exceptionviewapp/__init__.py deleted file mode 100644 index ef5fe8b12..000000000 --- a/repoze/bfg/tests/exceptionviewapp/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# a package diff --git a/repoze/bfg/tests/exceptionviewapp/configure.zcml b/repoze/bfg/tests/exceptionviewapp/configure.zcml deleted file mode 100644 index 680e065a6..000000000 --- a/repoze/bfg/tests/exceptionviewapp/configure.zcml +++ /dev/null @@ -1,44 +0,0 @@ -<configure xmlns="http://namespaces.repoze.org/bfg"> - - <include package="repoze.bfg.includes" /> - - <view view=".views.maybe"/> - - <view context=".models.NotAnException" - view=".views.no"/> - - <view context=".models.AnException" - view=".views.yes"/> - - <view name="raise_exception" - view=".views.raise_exception"/> - - <route name="route_raise_exception" - path="route_raise_exception" - view=".views.raise_exception"/> - - <route name="route_raise_exception2" - path="route_raise_exception2" - view=".views.raise_exception" - factory=".models.route_factory"/> - - <route name="route_raise_exception3" - path="route_raise_exception3" - view=".views.raise_exception" - factory=".models.route_factory2"/> - - <view context=".models.AnException" - route_name="route_raise_exception3" - view=".views.whoa"/> - - <route name="route_raise_exception4" - path="route_raise_exception4" - view=".views.raise_exception"/> - - <view context=".models.AnException" - route_name="route_raise_exception4" - view=".views.whoa"/> - -</configure> - - diff --git a/repoze/bfg/tests/exceptionviewapp/models.py b/repoze/bfg/tests/exceptionviewapp/models.py deleted file mode 100644 index fe407badc..000000000 --- a/repoze/bfg/tests/exceptionviewapp/models.py +++ /dev/null @@ -1,18 +0,0 @@ - -class NotAnException(object): - pass - -class AnException(Exception): - pass - -class RouteContext(object): - pass - -class RouteContext2(object): - pass - -def route_factory(*arg): - return RouteContext() - -def route_factory2(*arg): - return RouteContext2() diff --git a/repoze/bfg/tests/exceptionviewapp/views.py b/repoze/bfg/tests/exceptionviewapp/views.py deleted file mode 100644 index 1432618cf..000000000 --- a/repoze/bfg/tests/exceptionviewapp/views.py +++ /dev/null @@ -1,17 +0,0 @@ -from webob import Response -from models import AnException - -def no(request): - return Response('no') - -def yes(request): - return Response('yes') - -def maybe(request): - return Response('maybe') - -def whoa(request): - return Response('whoa') - -def raise_exception(request): - raise AnException() diff --git a/repoze/bfg/tests/fixtureapp/__init__.py b/repoze/bfg/tests/fixtureapp/__init__.py deleted file mode 100644 index 546616b2c..000000000 --- a/repoze/bfg/tests/fixtureapp/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# fixture application diff --git a/repoze/bfg/tests/fixtureapp/another.zcml b/repoze/bfg/tests/fixtureapp/another.zcml deleted file mode 100644 index f8678bad7..000000000 --- a/repoze/bfg/tests/fixtureapp/another.zcml +++ /dev/null @@ -1,10 +0,0 @@ -<configure xmlns="http://namespaces.repoze.org/bfg"> - - <include package="repoze.bfg.includes" /> - - <view - view=".views.fixture_view" - name="another.html" - /> - -</configure> diff --git a/repoze/bfg/tests/fixtureapp/configure.zcml b/repoze/bfg/tests/fixtureapp/configure.zcml deleted file mode 100644 index e3470d47a..000000000 --- a/repoze/bfg/tests/fixtureapp/configure.zcml +++ /dev/null @@ -1,37 +0,0 @@ -<configure xmlns="http://namespaces.repoze.org/bfg"> - - <include package="repoze.bfg.includes" /> - - <view - view=".views.fixture_view" - /> - - <view - view=".views.exception_view" - for="RuntimeError" - /> - - <view - view=".views.protected_view" - name="protected.html" - /> - - <view - view=".views.erroneous_view" - name="error.html" - /> - - <view - view=".views.fixture_view" - name="dummyskin.html" - request_type=".views.IDummy" - /> - - <utility - component=".models.fixture" - provides=".models.IFixture" - /> - - <include file="another.zcml"/> - -</configure> diff --git a/repoze/bfg/tests/fixtureapp/models.py b/repoze/bfg/tests/fixtureapp/models.py deleted file mode 100644 index d80d14bb3..000000000 --- a/repoze/bfg/tests/fixtureapp/models.py +++ /dev/null @@ -1,8 +0,0 @@ -from zope.interface import Interface - -class IFixture(Interface): - pass - -def fixture(): - """ """ - diff --git a/repoze/bfg/tests/fixtureapp/subpackage/__init__.py b/repoze/bfg/tests/fixtureapp/subpackage/__init__.py deleted file mode 100644 index d3173e636..000000000 --- a/repoze/bfg/tests/fixtureapp/subpackage/__init__.py +++ /dev/null @@ -1 +0,0 @@ -#package diff --git a/repoze/bfg/tests/fixtureapp/subpackage/templates/bar.pt b/repoze/bfg/tests/fixtureapp/subpackage/templates/bar.pt deleted file mode 100644 index 90531a4b3..000000000 --- a/repoze/bfg/tests/fixtureapp/subpackage/templates/bar.pt +++ /dev/null @@ -1,2 +0,0 @@ -<html> -</html> diff --git a/repoze/bfg/tests/fixtureapp/subpackage/yetanother.zcml b/repoze/bfg/tests/fixtureapp/subpackage/yetanother.zcml deleted file mode 100644 index 464163477..000000000 --- a/repoze/bfg/tests/fixtureapp/subpackage/yetanother.zcml +++ /dev/null @@ -1,8 +0,0 @@ -<configure xmlns="http://namespaces.repoze.org/bfg"> - - <include package="repoze.bfg.includes" /> - - <include package="repoze.bfg.tests.fixtureapp" file="another.zcml"/> - -</configure> - diff --git a/repoze/bfg/tests/fixtureapp/templates/fixture.pt b/repoze/bfg/tests/fixtureapp/templates/fixture.pt deleted file mode 100644 index 06dd4e2b1..000000000 --- a/repoze/bfg/tests/fixtureapp/templates/fixture.pt +++ /dev/null @@ -1,6 +0,0 @@ -<html xmlns="http://www.w3.org/1999/xhtml" - xmlns:tal="http://xml.zope.org/namespaces/tal"> -<head></head> -<body> -</body> -</html> diff --git a/repoze/bfg/tests/fixtureapp/views.py b/repoze/bfg/tests/fixtureapp/views.py deleted file mode 100644 index 862046d43..000000000 --- a/repoze/bfg/tests/fixtureapp/views.py +++ /dev/null @@ -1,22 +0,0 @@ -from zope.interface import Interface -from webob import Response -from repoze.bfg.exceptions import Forbidden - -def fixture_view(context, request): - """ """ - return Response('fixture') - -def erroneous_view(context, request): - """ """ - raise RuntimeError() - -def exception_view(context, request): - """ """ - return Response('supressed') - -def protected_view(context, request): - """ """ - raise Forbidden() - -class IDummy(Interface): - pass diff --git a/repoze/bfg/tests/fixtures/minimal.pt b/repoze/bfg/tests/fixtures/minimal.pt deleted file mode 100644 index 693d155ef..000000000 --- a/repoze/bfg/tests/fixtures/minimal.pt +++ /dev/null @@ -1,3 +0,0 @@ -<div xmlns="http://www.w3.org/1999/xhtml" - xmlns:tal="http://xml.zope.org/namespaces/tal"> -</div> diff --git a/repoze/bfg/tests/fixtures/minimal.txt b/repoze/bfg/tests/fixtures/minimal.txt deleted file mode 100644 index 18832d351..000000000 --- a/repoze/bfg/tests/fixtures/minimal.txt +++ /dev/null @@ -1 +0,0 @@ -Hello. diff --git a/repoze/bfg/tests/fixtures/nonminimal.txt b/repoze/bfg/tests/fixtures/nonminimal.txt deleted file mode 100644 index 9de95ec92..000000000 --- a/repoze/bfg/tests/fixtures/nonminimal.txt +++ /dev/null @@ -1 +0,0 @@ -Hello, ${name}! diff --git a/repoze/bfg/tests/fixtures/pp.pt b/repoze/bfg/tests/fixtures/pp.pt deleted file mode 100644 index 9df7d22da..000000000 --- a/repoze/bfg/tests/fixtures/pp.pt +++ /dev/null @@ -1,3 +0,0 @@ -<p xmlns="http://www.w3.org/1999/xhtml" - xmlns:tal="http://xml.zope.org/namespaces/tal" - tal:content="wrapped">WRAPPED</p> diff --git a/repoze/bfg/tests/fixtures/static/index.html b/repoze/bfg/tests/fixtures/static/index.html deleted file mode 100644 index 6498787a5..000000000 --- a/repoze/bfg/tests/fixtures/static/index.html +++ /dev/null @@ -1 +0,0 @@ -<html>static</html> diff --git a/repoze/bfg/tests/fixtures/static/subdir/index.html b/repoze/bfg/tests/fixtures/static/subdir/index.html deleted file mode 100644 index bb84fad04..000000000 --- a/repoze/bfg/tests/fixtures/static/subdir/index.html +++ /dev/null @@ -1 +0,0 @@ -<html>subdir</html> diff --git a/repoze/bfg/tests/grokkedapp/__init__.py b/repoze/bfg/tests/grokkedapp/__init__.py deleted file mode 100644 index 5d2843885..000000000 --- a/repoze/bfg/tests/grokkedapp/__init__.py +++ /dev/null @@ -1,90 +0,0 @@ -from repoze.bfg.view import bfg_view - -@bfg_view() -def grokked(context, request): - return 'grokked' - -@bfg_view(request_method='POST') -def grokked_post(context, request): - return 'grokked_post' - -@bfg_view(name='stacked2') -@bfg_view(name='stacked1') -def stacked(context, request): - return 'stacked' - -class stacked_class(object): - def __init__(self, context, request): - self.context = context - self.request = request - - def __call__(self): - return 'stacked_class' - -stacked_class = bfg_view(name='stacked_class1')(stacked_class) -stacked_class = bfg_view(name='stacked_class2')(stacked_class) - -class oldstyle_grokked_class: - def __init__(self, context, request): - self.context = context - self.request = request - - def __call__(self): - return 'oldstyle_grokked_class' - -oldstyle_grokked_class = bfg_view(name='oldstyle_grokked_class')( - oldstyle_grokked_class) - -class grokked_class(object): - def __init__(self, context, request): - self.context = context - self.request = request - - def __call__(self): - return 'grokked_class' - -grokked_class = bfg_view(name='grokked_class')(grokked_class) - -class Foo(object): - def __call__(self, context, request): - return 'grokked_instance' - -grokked_instance = Foo() -grokked_instance = bfg_view(name='grokked_instance')(grokked_instance) - -class Base(object): - @bfg_view(name='basemethod') - def basemethod(self): - """ """ - -class MethodViews(Base): - def __init__(self, context, request): - self.context = context - self.request = request - - @bfg_view(name='method1') - def method1(self): - return 'method1' - - @bfg_view(name='method2') - def method2(self): - return 'method2' - - @bfg_view(name='stacked_method2') - @bfg_view(name='stacked_method1') - def stacked(self): - return 'stacked_method' - -# ungrokkable - -A = 1 -B = {} - -def stuff(): - """ """ - -class Whatever(object): - pass - -class Whatever2: - pass diff --git a/repoze/bfg/tests/grokkedapp/another.py b/repoze/bfg/tests/grokkedapp/another.py deleted file mode 100644 index 7dda1d579..000000000 --- a/repoze/bfg/tests/grokkedapp/another.py +++ /dev/null @@ -1,62 +0,0 @@ -from repoze.bfg.view import bfg_view - -@bfg_view(name='another') -def grokked(context, request): - return 'another_grokked' - -@bfg_view(request_method='POST', name='another') -def grokked_post(context, request): - return 'another_grokked_post' - -@bfg_view(name='another_stacked2') -@bfg_view(name='another_stacked1') -def stacked(context, request): - return 'another_stacked' - -class stacked_class(object): - def __init__(self, context, request): - self.context = context - self.request = request - - def __call__(self): - return 'another_stacked_class' - -stacked_class = bfg_view(name='another_stacked_class1')(stacked_class) -stacked_class = bfg_view(name='another_stacked_class2')(stacked_class) - -class oldstyle_grokked_class: - def __init__(self, context, request): - self.context = context - self.request = request - - def __call__(self): - return 'another_oldstyle_grokked_class' - -oldstyle_grokked_class = bfg_view(name='another_oldstyle_grokked_class')( - oldstyle_grokked_class) - -class grokked_class(object): - def __init__(self, context, request): - self.context = context - self.request = request - - def __call__(self): - return 'another_grokked_class' - -grokked_class = bfg_view(name='another_grokked_class')(grokked_class) - -class Foo(object): - def __call__(self, context, request): - return 'another_grokked_instance' - -grokked_instance = Foo() -grokked_instance = bfg_view(name='another_grokked_instance')(grokked_instance) - -# ungrokkable - -A = 1 -B = {} - -def stuff(): - """ """ - diff --git a/repoze/bfg/tests/grokkedapp/configure.zcml b/repoze/bfg/tests/grokkedapp/configure.zcml deleted file mode 100644 index 6867046df..000000000 --- a/repoze/bfg/tests/grokkedapp/configure.zcml +++ /dev/null @@ -1,6 +0,0 @@ -<configure xmlns="http://namespaces.repoze.org/bfg"> - - <include package="repoze.bfg.includes" /> - <scan package="."/> - -</configure> diff --git a/repoze/bfg/tests/grokkedapp/pod/notinit.py b/repoze/bfg/tests/grokkedapp/pod/notinit.py deleted file mode 100644 index ca0538123..000000000 --- a/repoze/bfg/tests/grokkedapp/pod/notinit.py +++ /dev/null @@ -1,5 +0,0 @@ -from repoze.bfg.view import bfg_view - -@bfg_view(name='pod_notinit') -def subpackage_notinit(context, request): - return 'pod_notinit' diff --git a/repoze/bfg/tests/grokkedapp/subpackage/__init__.py b/repoze/bfg/tests/grokkedapp/subpackage/__init__.py deleted file mode 100644 index bdbe54e13..000000000 --- a/repoze/bfg/tests/grokkedapp/subpackage/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -from repoze.bfg.view import bfg_view - -@bfg_view(name='subpackage_init') -def subpackage_init(context, request): - return 'subpackage_init' diff --git a/repoze/bfg/tests/grokkedapp/subpackage/notinit.py b/repoze/bfg/tests/grokkedapp/subpackage/notinit.py deleted file mode 100644 index 84de6503d..000000000 --- a/repoze/bfg/tests/grokkedapp/subpackage/notinit.py +++ /dev/null @@ -1,5 +0,0 @@ -from repoze.bfg.view import bfg_view - -@bfg_view(name='subpackage_notinit') -def subpackage_notinit(context, request): - return 'subpackage_notinit' diff --git a/repoze/bfg/tests/grokkedapp/subpackage/subsubpackage/__init__.py b/repoze/bfg/tests/grokkedapp/subpackage/subsubpackage/__init__.py deleted file mode 100644 index a83be850b..000000000 --- a/repoze/bfg/tests/grokkedapp/subpackage/subsubpackage/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -from repoze.bfg.view import bfg_view - -@bfg_view(name='subsubpackage_init') -def subpackage_init(context, request): - return 'subsubpackage_init' diff --git a/repoze/bfg/tests/hybridapp/__init__.py b/repoze/bfg/tests/hybridapp/__init__.py deleted file mode 100644 index 5bb534f79..000000000 --- a/repoze/bfg/tests/hybridapp/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# package diff --git a/repoze/bfg/tests/hybridapp/configure.zcml b/repoze/bfg/tests/hybridapp/configure.zcml deleted file mode 100644 index a94409e26..000000000 --- a/repoze/bfg/tests/hybridapp/configure.zcml +++ /dev/null @@ -1,117 +0,0 @@ -<configure xmlns="http://namespaces.repoze.org/bfg"> - - <include package="repoze.bfg.includes" /> - - <!-- we want this view to "win" --> - <route - view=".views.route_view" - path="abc" - name="route" /> - - <!-- .. even though this one has a more specific context --> - <view - view=".views.global_view" - context="repoze.bfg.traversal.DefaultRootFactory" - /> - - <view - name="global2" - view=".views.global2_view" - context="repoze.bfg.traversal.DefaultRootFactory" - /> - - <route - path="def" - name="route2" - /> - - <!-- we want this view to win for route2 even though global view with - context is more specific --> - <view - route_name="route2" - view=".views.route2_view" - /> - - <!-- the global view should be found for this route --> - <route - path="ghi" - name="route3" - use_global_views="True" - /> - - <!-- the global view should not be found for this route --> - <route - path="jkl" - name="route4" - /> - - <!-- the global view should not be found for this route (/global2) --> - <route - path="mno/*traverse" - name="route5" - /> - - <!-- the global view should be found for this route (/global2) --> - <route - path="pqr/*traverse" - name="route6" - use_global_views="True" - /> - - <route - path="error" - name="route7" - /> - - <view - route_name="route7" - view=".views.erroneous_view" - /> - - <route - path="error2" - name="route8" - /> - - <view - route_name="route8" - view=".views.erroneous_view" - /> - - <!-- we want this view to "win" for route7 as exception view --> - <view - view=".views.exception_view" - for="RuntimeError" - /> - - <!-- we want this view to "win" for route8 as exception view--> - <view - route_name="route8" - view=".views.exception2_view" - for="RuntimeError" - /> - - <route - path="error_sub" - name="route9" - /> - - <view - route_name="route9" - view=".views.erroneous_sub_view" - /> - - <!-- we want this view to "win" for route9 as exception view... --> - <view - route_name="route9" - view=".views.exception2_view" - for=".views.SuperException" - /> - - <!-- ...even if we have more context-specialized view for raised exception --> - <view - view=".views.exception_view" - for=".views.SubException" - /> - -</configure> diff --git a/repoze/bfg/tests/hybridapp/views.py b/repoze/bfg/tests/hybridapp/views.py deleted file mode 100644 index 135ef8290..000000000 --- a/repoze/bfg/tests/hybridapp/views.py +++ /dev/null @@ -1,39 +0,0 @@ -from webob import Response - -def route_view(request): - """ """ - return Response('route') - -def global_view(request): - """ """ - return Response('global') - -def global2_view(request): - """ """ - return Response('global2') - -def route2_view(request): - """ """ - return Response('route2') - -def exception_view(request): - """ """ - return Response('supressed') - -def exception2_view(request): - """ """ - return Response('supressed2') - -def erroneous_view(request): - """ """ - raise RuntimeError() - -def erroneous_sub_view(request): - """ """ - raise SubException() - -class SuperException(Exception): - """ """ - -class SubException(SuperException): - """ """ diff --git a/repoze/bfg/tests/localeapp/__init__.py b/repoze/bfg/tests/localeapp/__init__.py deleted file mode 100644 index 1a35cdb4a..000000000 --- a/repoze/bfg/tests/localeapp/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# a file diff --git a/repoze/bfg/tests/localeapp/locale/GARBAGE b/repoze/bfg/tests/localeapp/locale/GARBAGE deleted file mode 100644 index 032c55584..000000000 --- a/repoze/bfg/tests/localeapp/locale/GARBAGE +++ /dev/null @@ -1 +0,0 @@ -Garbage file. diff --git a/repoze/bfg/tests/localeapp/locale/be/LC_MESSAGES b/repoze/bfg/tests/localeapp/locale/be/LC_MESSAGES deleted file mode 100644 index 909cf6a3b..000000000 --- a/repoze/bfg/tests/localeapp/locale/be/LC_MESSAGES +++ /dev/null @@ -1 +0,0 @@ -busted. diff --git a/repoze/bfg/tests/localeapp/locale/de/LC_MESSAGES/deformsite.mo b/repoze/bfg/tests/localeapp/locale/de/LC_MESSAGES/deformsite.mo Binary files differdeleted file mode 100644 index 2924a5eb5..000000000 --- a/repoze/bfg/tests/localeapp/locale/de/LC_MESSAGES/deformsite.mo +++ /dev/null diff --git a/repoze/bfg/tests/localeapp/locale/de/LC_MESSAGES/deformsite.po b/repoze/bfg/tests/localeapp/locale/de/LC_MESSAGES/deformsite.po deleted file mode 100644 index 17f87bc19..000000000 --- a/repoze/bfg/tests/localeapp/locale/de/LC_MESSAGES/deformsite.po +++ /dev/null @@ -1,31 +0,0 @@ -# German translations for deformsite. -# Copyright (C) 2010 ORGANIZATION -# This file is distributed under the same license as the deformsite project. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: deformsite 0.0\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2010-04-22 14:17+0400\n" -"PO-Revision-Date: 2010-04-22 14:17-0400\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: de <LL@li.org>\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.5\n" - -#: deformsite/__init__.py:458 -msgid "Approve" -msgstr "Genehmigen" - -#: deformsite/__init__.py:459 -msgid "Show approval" -msgstr "Zeigen Genehmigung" - -#: deformsite/__init__.py:466 -msgid "Submit" -msgstr "Beugen" - diff --git a/repoze/bfg/tests/localeapp/locale/en/LC_MESSAGES/deformsite.mo b/repoze/bfg/tests/localeapp/locale/en/LC_MESSAGES/deformsite.mo Binary files differdeleted file mode 100644 index 2924a5eb5..000000000 --- a/repoze/bfg/tests/localeapp/locale/en/LC_MESSAGES/deformsite.mo +++ /dev/null diff --git a/repoze/bfg/tests/localeapp/locale/en/LC_MESSAGES/deformsite.po b/repoze/bfg/tests/localeapp/locale/en/LC_MESSAGES/deformsite.po deleted file mode 100644 index 17f87bc19..000000000 --- a/repoze/bfg/tests/localeapp/locale/en/LC_MESSAGES/deformsite.po +++ /dev/null @@ -1,31 +0,0 @@ -# German translations for deformsite. -# Copyright (C) 2010 ORGANIZATION -# This file is distributed under the same license as the deformsite project. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: deformsite 0.0\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2010-04-22 14:17+0400\n" -"PO-Revision-Date: 2010-04-22 14:17-0400\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" -"Language-Team: de <LL@li.org>\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 0.9.5\n" - -#: deformsite/__init__.py:458 -msgid "Approve" -msgstr "Genehmigen" - -#: deformsite/__init__.py:459 -msgid "Show approval" -msgstr "Zeigen Genehmigung" - -#: deformsite/__init__.py:466 -msgid "Submit" -msgstr "Beugen" - diff --git a/repoze/bfg/tests/restbugapp/__init__.py b/repoze/bfg/tests/restbugapp/__init__.py deleted file mode 100644 index 5bb534f79..000000000 --- a/repoze/bfg/tests/restbugapp/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# package diff --git a/repoze/bfg/tests/restbugapp/configure.zcml b/repoze/bfg/tests/restbugapp/configure.zcml deleted file mode 100644 index 67954b892..000000000 --- a/repoze/bfg/tests/restbugapp/configure.zcml +++ /dev/null @@ -1,25 +0,0 @@ -<configure xmlns="http://namespaces.repoze.org/bfg"> - - <include package="repoze.bfg.includes"/> - - <route - path="/pet" - name="gameactions_pet_get_pets" - view=".views.PetRESTView" - view_attr="GET" - request_method="GET" - permission="view" - renderer="json" - /> - - <route - path="/pet" - name="gameactions_pet_care_for_pet" - view=".views.PetRESTView" - view_attr="POST" - request_method="POST" - permission="view" - renderer="json" - /> - -</configure> diff --git a/repoze/bfg/tests/restbugapp/views.py b/repoze/bfg/tests/restbugapp/views.py deleted file mode 100644 index b94851099..000000000 --- a/repoze/bfg/tests/restbugapp/views.py +++ /dev/null @@ -1,15 +0,0 @@ -from webob import Response - -class BaseRESTView(object): - def __init__(self, context, request): - self.context = context - self.request = request - -class PetRESTView(BaseRESTView): - """ REST Controller to control action of an avatar """ - def __init__(self, context, request): - super(PetRESTView, self).__init__(context, request) - - def GET(self): - return Response('gotten') - diff --git a/repoze/bfg/tests/routesapp/__init__.py b/repoze/bfg/tests/routesapp/__init__.py deleted file mode 100644 index 546616b2c..000000000 --- a/repoze/bfg/tests/routesapp/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# fixture application diff --git a/repoze/bfg/tests/routesapp/configure.zcml b/repoze/bfg/tests/routesapp/configure.zcml deleted file mode 100644 index 01062b6d4..000000000 --- a/repoze/bfg/tests/routesapp/configure.zcml +++ /dev/null @@ -1,12 +0,0 @@ -<configure xmlns="http://namespaces.repoze.org/bfg"> - - <include package="repoze.bfg.includes" /> - - <route - path=":id" - name="default" - view=".views.fixture_view" - permission="repoze.view" - /> - -</configure> diff --git a/repoze/bfg/tests/routesapp/models.py b/repoze/bfg/tests/routesapp/models.py deleted file mode 100644 index a57b06308..000000000 --- a/repoze/bfg/tests/routesapp/models.py +++ /dev/null @@ -1,5 +0,0 @@ -from zope.interface import Interface - -class IFixture(Interface): - pass - diff --git a/repoze/bfg/tests/routesapp/templates/fixture.pt b/repoze/bfg/tests/routesapp/templates/fixture.pt deleted file mode 100644 index 06dd4e2b1..000000000 --- a/repoze/bfg/tests/routesapp/templates/fixture.pt +++ /dev/null @@ -1,6 +0,0 @@ -<html xmlns="http://www.w3.org/1999/xhtml" - xmlns:tal="http://xml.zope.org/namespaces/tal"> -<head></head> -<body> -</body> -</html> diff --git a/repoze/bfg/tests/routesapp/views.py b/repoze/bfg/tests/routesapp/views.py deleted file mode 100644 index f805b88c9..000000000 --- a/repoze/bfg/tests/routesapp/views.py +++ /dev/null @@ -1,8 +0,0 @@ -from zope.interface import Interface - -def fixture_view(context, request): - """ """ - -class IDummy(Interface): - pass - diff --git a/repoze/bfg/tests/test_authentication.py b/repoze/bfg/tests/test_authentication.py deleted file mode 100644 index d020a11a6..000000000 --- a/repoze/bfg/tests/test_authentication.py +++ /dev/null @@ -1,664 +0,0 @@ -import unittest - -class TestRepozeWho1AuthenticationPolicy(unittest.TestCase): - def _getTargetClass(self): - from repoze.bfg.authentication import RepozeWho1AuthenticationPolicy - return RepozeWho1AuthenticationPolicy - - def _makeOne(self, identifier_name='auth_tkt', callback=None): - return self._getTargetClass()(identifier_name, callback) - - def test_class_implements_IAuthenticationPolicy(self): - from zope.interface.verify import verifyClass - from repoze.bfg.interfaces import IAuthenticationPolicy - verifyClass(IAuthenticationPolicy, self._getTargetClass()) - - def test_instance_implements_IAuthenticationPolicy(self): - from zope.interface.verify import verifyObject - from repoze.bfg.interfaces import IAuthenticationPolicy - verifyObject(IAuthenticationPolicy, self._makeOne()) - - def test_authenticated_userid_None(self): - request = DummyRequest({}) - policy = self._makeOne() - self.assertEqual(policy.authenticated_userid(request), None) - - def test_authenticated_userid(self): - request = DummyRequest( - {'repoze.who.identity':{'repoze.who.userid':'fred'}}) - policy = self._makeOne() - self.assertEqual(policy.authenticated_userid(request), 'fred') - - def test_authenticated_userid_with_callback_returns_None(self): - request = DummyRequest( - {'repoze.who.identity':{'repoze.who.userid':'fred'}}) - def callback(identity, request): - return None - policy = self._makeOne(callback=callback) - self.assertEqual(policy.authenticated_userid(request), None) - - def test_authenticated_userid_with_callback_returns_something(self): - request = DummyRequest( - {'repoze.who.identity':{'repoze.who.userid':'fred'}}) - def callback(identity, request): - return ['agroup'] - policy = self._makeOne(callback=callback) - self.assertEqual(policy.authenticated_userid(request), 'fred') - - def test_effective_principals_None(self): - from repoze.bfg.security import Everyone - request = DummyRequest({}) - policy = self._makeOne() - self.assertEqual(policy.effective_principals(request), [Everyone]) - - def test_effective_principals_userid_only(self): - from repoze.bfg.security import Everyone - from repoze.bfg.security import Authenticated - request = DummyRequest( - {'repoze.who.identity':{'repoze.who.userid':'fred'}}) - policy = self._makeOne() - self.assertEqual(policy.effective_principals(request), - [Everyone, Authenticated, 'fred']) - - def test_effective_principals_userid_and_groups(self): - from repoze.bfg.security import Everyone - from repoze.bfg.security import Authenticated - request = DummyRequest( - {'repoze.who.identity':{'repoze.who.userid':'fred', - 'groups':['quux', 'biz']}}) - def callback(identity, request): - return identity['groups'] - policy = self._makeOne(callback=callback) - self.assertEqual(policy.effective_principals(request), - [Everyone, Authenticated, 'fred', 'quux', 'biz']) - - def test_effective_principals_userid_callback_returns_None(self): - from repoze.bfg.security import Everyone - request = DummyRequest( - {'repoze.who.identity':{'repoze.who.userid':'fred', - 'groups':['quux', 'biz']}}) - def callback(identity, request): - return None - policy = self._makeOne(callback=callback) - self.assertEqual(policy.effective_principals(request), [Everyone]) - - def test_remember_no_plugins(self): - request = DummyRequest({}) - policy = self._makeOne() - result = policy.remember(request, 'fred') - self.assertEqual(result, []) - - def test_remember(self): - authtkt = DummyWhoPlugin() - request = DummyRequest( - {'repoze.who.plugins':{'auth_tkt':authtkt}}) - policy = self._makeOne() - result = policy.remember(request, 'fred') - self.assertEqual(result[0], request.environ) - self.assertEqual(result[1], {'repoze.who.userid':'fred'}) - - def test_forget_no_plugins(self): - request = DummyRequest({}) - policy = self._makeOne() - result = policy.forget(request) - self.assertEqual(result, []) - - def test_forget(self): - authtkt = DummyWhoPlugin() - request = DummyRequest( - {'repoze.who.plugins':{'auth_tkt':authtkt}, - 'repoze.who.identity':{'repoze.who.userid':'fred'}, - }) - policy = self._makeOne() - result = policy.forget(request) - self.assertEqual(result[0], request.environ) - self.assertEqual(result[1], request.environ['repoze.who.identity']) - -class TestRemoteUserAuthenticationPolicy(unittest.TestCase): - def _getTargetClass(self): - from repoze.bfg.authentication import RemoteUserAuthenticationPolicy - return RemoteUserAuthenticationPolicy - - def _makeOne(self, environ_key='REMOTE_USER', callback=None): - return self._getTargetClass()(environ_key, callback) - - def test_class_implements_IAuthenticationPolicy(self): - from zope.interface.verify import verifyClass - from repoze.bfg.interfaces import IAuthenticationPolicy - verifyClass(IAuthenticationPolicy, self._getTargetClass()) - - def test_instance_implements_IAuthenticationPolicy(self): - from zope.interface.verify import verifyObject - from repoze.bfg.interfaces import IAuthenticationPolicy - verifyObject(IAuthenticationPolicy, self._makeOne()) - - def test_authenticated_userid_None(self): - request = DummyRequest({}) - policy = self._makeOne() - self.assertEqual(policy.authenticated_userid(request), None) - - def test_authenticated_userid(self): - request = DummyRequest({'REMOTE_USER':'fred'}) - policy = self._makeOne() - self.assertEqual(policy.authenticated_userid(request), 'fred') - - def test_effective_principals_None(self): - from repoze.bfg.security import Everyone - request = DummyRequest({}) - policy = self._makeOne() - self.assertEqual(policy.effective_principals(request), [Everyone]) - - def test_effective_principals(self): - from repoze.bfg.security import Everyone - from repoze.bfg.security import Authenticated - request = DummyRequest({'REMOTE_USER':'fred'}) - policy = self._makeOne() - self.assertEqual(policy.effective_principals(request), - [Everyone, Authenticated, 'fred']) - - def test_remember(self): - request = DummyRequest({'REMOTE_USER':'fred'}) - policy = self._makeOne() - result = policy.remember(request, 'fred') - self.assertEqual(result, []) - - def test_forget(self): - request = DummyRequest({'REMOTE_USER':'fred'}) - policy = self._makeOne() - result = policy.forget(request) - self.assertEqual(result, []) - -class TestAutkTktAuthenticationPolicy(unittest.TestCase): - def _getTargetClass(self): - from repoze.bfg.authentication import AuthTktAuthenticationPolicy - return AuthTktAuthenticationPolicy - - def _makeOne(self, callback, cookieidentity, **kw): - inst = self._getTargetClass()('secret', callback, **kw) - inst.cookie = DummyCookieHelper(cookieidentity) - return inst - - def test_allargs(self): - # pass all known args - inst = self._getTargetClass()( - 'secret', callback=None, cookie_name=None, secure=False, - include_ip=False, timeout=None, reissue_time=None, - ) - self.assertEqual(inst.callback, None) - - def test_class_implements_IAuthenticationPolicy(self): - from zope.interface.verify import verifyClass - from repoze.bfg.interfaces import IAuthenticationPolicy - verifyClass(IAuthenticationPolicy, self._getTargetClass()) - - def test_instance_implements_IAuthenticationPolicy(self): - from zope.interface.verify import verifyObject - from repoze.bfg.interfaces import IAuthenticationPolicy - verifyObject(IAuthenticationPolicy, self._makeOne(None, None)) - - def test_authenticated_userid_no_cookie_identity(self): - request = DummyRequest({}) - policy = self._makeOne(None, None) - self.assertEqual(policy.authenticated_userid(request), None) - - def test_authenticated_userid_callback_returns_None(self): - request = DummyRequest({}) - def callback(userid, request): - return None - policy = self._makeOne(callback, {'userid':'fred'}) - self.assertEqual(policy.authenticated_userid(request), None) - - def test_authenticated_userid(self): - request = DummyRequest({}) - def callback(userid, request): - return True - policy = self._makeOne(callback, {'userid':'fred'}) - self.assertEqual(policy.authenticated_userid(request), 'fred') - - def test_effective_principals_no_cookie_identity(self): - from repoze.bfg.security import Everyone - request = DummyRequest({}) - policy = self._makeOne(None, None) - self.assertEqual(policy.effective_principals(request), [Everyone]) - - def test_effective_principals_callback_returns_None(self): - from repoze.bfg.security import Everyone - request = DummyRequest({}) - def callback(userid, request): - return None - policy = self._makeOne(callback, {'userid':'fred'}) - self.assertEqual(policy.effective_principals(request), [Everyone]) - - def test_effective_principals(self): - from repoze.bfg.security import Everyone - from repoze.bfg.security import Authenticated - request = DummyRequest({}) - def callback(userid, request): - return ['group.foo'] - policy = self._makeOne(callback, {'userid':'fred'}) - self.assertEqual(policy.effective_principals(request), - [Everyone, Authenticated, 'fred', 'group.foo']) - - def test_remember(self): - request = DummyRequest({}) - policy = self._makeOne(None, None) - result = policy.remember(request, 'fred') - self.assertEqual(result, []) - - def test_remember_with_extra_kargs(self): - request = DummyRequest({}) - policy = self._makeOne(None, None) - result = policy.remember(request, 'fred', a=1, b=2) - self.assertEqual(policy.cookie.kw, {'a':1, 'b':2}) - self.assertEqual(result, []) - - def test_forget(self): - request = DummyRequest({}) - policy = self._makeOne(None, None) - result = policy.forget(request) - self.assertEqual(result, []) - -class TestAuthTktCookieHelper(unittest.TestCase): - def _getTargetClass(self): - from repoze.bfg.authentication import AuthTktCookieHelper - return AuthTktCookieHelper - - def _makeOne(self, *arg, **kw): - plugin = self._getTargetClass()(*arg, **kw) - plugin.auth_tkt = DummyAuthTktModule() - return plugin - - def _makeRequest(self, kw=None): - environ = {'wsgi.version': (1,0)} - if kw is not None: - environ.update(kw) - environ['REMOTE_ADDR'] = '1.1.1.1' - environ['SERVER_NAME'] = 'localhost' - return DummyRequest(environ) - - def _cookieValue(self, cookie): - return eval(cookie.value) - - def _parseHeaders(self, headers): - return [ self._parseHeader(header) for header in headers ] - - def _parseHeader(self, header): - cookie = self._parseCookie(header[1]) - return cookie - - def _parseCookie(self, cookie): - from Cookie import SimpleCookie - cookies = SimpleCookie() - cookies.load(cookie) - return cookies.get('auth_tkt') - - def test_identify_nocookie(self): - plugin = self._makeOne('secret') - request = self._makeRequest() - result = plugin.identify(request) - self.assertEqual(result, None) - - def test_identify_good_cookie_include_ip(self): - plugin = self._makeOne('secret', include_ip=True) - request = self._makeRequest({'HTTP_COOKIE':'auth_tkt=ticket'}) - result = plugin.identify(request) - self.assertEqual(len(result), 4) - self.assertEqual(result['tokens'], ()) - self.assertEqual(result['userid'], 'userid') - self.assertEqual(result['userdata'], '') - self.assertEqual(result['timestamp'], 0) - self.assertEqual(plugin.auth_tkt.value, 'ticket') - self.assertEqual(plugin.auth_tkt.remote_addr, '1.1.1.1') - self.assertEqual(plugin.auth_tkt.secret, 'secret') - environ = request.environ - self.assertEqual(environ['REMOTE_USER_TOKENS'], ()) - self.assertEqual(environ['REMOTE_USER_DATA'],'') - self.assertEqual(environ['AUTH_TYPE'],'cookie') - - def test_identify_good_cookie_dont_include_ip(self): - plugin = self._makeOne('secret', include_ip=False) - request = self._makeRequest({'HTTP_COOKIE':'auth_tkt=ticket'}) - result = plugin.identify(request) - self.assertEqual(len(result), 4) - self.assertEqual(result['tokens'], ()) - self.assertEqual(result['userid'], 'userid') - self.assertEqual(result['userdata'], '') - self.assertEqual(result['timestamp'], 0) - self.assertEqual(plugin.auth_tkt.value, 'ticket') - self.assertEqual(plugin.auth_tkt.remote_addr, '0.0.0.0') - self.assertEqual(plugin.auth_tkt.secret, 'secret') - environ = request.environ - self.assertEqual(environ['REMOTE_USER_TOKENS'], ()) - self.assertEqual(environ['REMOTE_USER_DATA'],'') - self.assertEqual(environ['AUTH_TYPE'],'cookie') - - def test_identify_good_cookie_int_useridtype(self): - plugin = self._makeOne('secret', include_ip=False) - plugin.auth_tkt.userid = '1' - plugin.auth_tkt.user_data = 'userid_type:int' - request = self._makeRequest({'HTTP_COOKIE':'auth_tkt=ticket'}) - result = plugin.identify(request) - self.assertEqual(len(result), 4) - self.assertEqual(result['tokens'], ()) - self.assertEqual(result['userid'], 1) - self.assertEqual(result['userdata'], 'userid_type:int') - self.assertEqual(result['timestamp'], 0) - environ = request.environ - self.assertEqual(environ['REMOTE_USER_TOKENS'], ()) - self.assertEqual(environ['REMOTE_USER_DATA'],'userid_type:int') - self.assertEqual(environ['AUTH_TYPE'],'cookie') - - def test_identify_good_cookie_unknown_useridtype(self): - plugin = self._makeOne('secret', include_ip=False) - plugin.auth_tkt.userid = 'abc' - plugin.auth_tkt.user_data = 'userid_type:unknown' - request = self._makeRequest({'HTTP_COOKIE':'auth_tkt=ticket'}) - result = plugin.identify(request) - self.assertEqual(len(result), 4) - self.assertEqual(result['tokens'], ()) - self.assertEqual(result['userid'], 'abc') - self.assertEqual(result['userdata'], 'userid_type:unknown') - self.assertEqual(result['timestamp'], 0) - environ = request.environ - self.assertEqual(environ['REMOTE_USER_TOKENS'], ()) - self.assertEqual(environ['REMOTE_USER_DATA'],'userid_type:unknown') - self.assertEqual(environ['AUTH_TYPE'],'cookie') - - def test_identify_good_cookie_b64str_useridtype(self): - plugin = self._makeOne('secret', include_ip=False) - plugin.auth_tkt.userid = 'encoded'.encode('base64').strip() - plugin.auth_tkt.user_data = 'userid_type:b64str' - request = self._makeRequest({'HTTP_COOKIE':'auth_tkt=ticket'}) - result = plugin.identify(request) - self.assertEqual(len(result), 4) - self.assertEqual(result['tokens'], ()) - self.assertEqual(result['userid'], 'encoded') - self.assertEqual(result['userdata'], 'userid_type:b64str') - self.assertEqual(result['timestamp'], 0) - environ = request.environ - self.assertEqual(environ['REMOTE_USER_TOKENS'], ()) - self.assertEqual(environ['REMOTE_USER_DATA'],'userid_type:b64str') - self.assertEqual(environ['AUTH_TYPE'],'cookie') - - def test_identify_good_cookie_b64unicode_useridtype(self): - plugin = self._makeOne('secret', include_ip=False) - plugin.auth_tkt.userid = '\xc3\xa9ncoded'.encode('base64').strip() - plugin.auth_tkt.user_data = 'userid_type:b64unicode' - request = self._makeRequest({'HTTP_COOKIE':'auth_tkt=ticket'}) - result = plugin.identify(request) - self.assertEqual(len(result), 4) - self.assertEqual(result['tokens'], ()) - self.assertEqual(result['userid'], unicode('\xc3\xa9ncoded', 'utf-8')) - self.assertEqual(result['userdata'], 'userid_type:b64unicode') - self.assertEqual(result['timestamp'], 0) - environ = request.environ - self.assertEqual(environ['REMOTE_USER_TOKENS'], ()) - self.assertEqual(environ['REMOTE_USER_DATA'],'userid_type:b64unicode') - self.assertEqual(environ['AUTH_TYPE'],'cookie') - - def test_identify_bad_cookie(self): - plugin = self._makeOne('secret', include_ip=True) - plugin.auth_tkt.parse_raise = True - request = self._makeRequest({'HTTP_COOKIE':'auth_tkt=bogus'}) - result = plugin.identify(request) - self.assertEqual(result, None) - - def test_identify_cookie_timed_out(self): - plugin = self._makeOne('secret', timeout=1) - request = self._makeRequest({'HTTP_COOKIE':'auth_tkt=bogus'}) - result = plugin.identify(request) - self.assertEqual(result, None) - - def test_identify_cookie_reissue(self): - import time - plugin = self._makeOne('secret', timeout=5, reissue_time=0) - plugin.auth_tkt.timestamp = time.time() - request = self._makeRequest({'HTTP_COOKIE':'auth_tkt=bogus'}) - result = plugin.identify(request) - self.failUnless(result) - self.assertEqual(len(request.callbacks), 1) - response = DummyResponse() - request.callbacks[0](None, response) - self.assertEqual(len(response.headerlist), 3) - self.assertEqual(response.headerlist[0][0], 'Set-Cookie') - - def test_remember(self): - plugin = self._makeOne('secret') - request = self._makeRequest() - result = plugin.remember(request, 'userid') - self.assertEqual(len(result), 3) - - self.assertEqual(result[0][0], 'Set-Cookie') - self.failUnless(result[0][1].endswith('; Path=/')) - self.failUnless(result[0][1].startswith('auth_tkt=')) - - self.assertEqual(result[1][0], 'Set-Cookie') - self.failUnless(result[1][1].endswith('; Path=/; Domain=localhost')) - self.failUnless(result[1][1].startswith('auth_tkt=')) - - self.assertEqual(result[2][0], 'Set-Cookie') - self.failUnless(result[2][1].endswith('; Path=/; Domain=.localhost')) - self.failUnless(result[2][1].startswith('auth_tkt=')) - - def test_remember_include_ip(self): - plugin = self._makeOne('secret', include_ip=True) - request = self._makeRequest() - result = plugin.remember(request, 'other') - self.assertEqual(len(result), 3) - - self.assertEqual(result[0][0], 'Set-Cookie') - self.failUnless(result[0][1].endswith('; Path=/')) - self.failUnless(result[0][1].startswith('auth_tkt=')) - - self.assertEqual(result[1][0], 'Set-Cookie') - self.failUnless(result[1][1].endswith('; Path=/; Domain=localhost')) - self.failUnless(result[1][1].startswith('auth_tkt=')) - - self.assertEqual(result[2][0], 'Set-Cookie') - self.failUnless(result[2][1].endswith('; Path=/; Domain=.localhost')) - self.failUnless(result[2][1].startswith('auth_tkt=')) - - def test_remember_path(self): - plugin = self._makeOne('secret', include_ip=True, - path="/cgi-bin/bfg.cgi/") - request = self._makeRequest() - result = plugin.remember(request, 'other') - self.assertEqual(len(result), 3) - - self.assertEqual(result[0][0], 'Set-Cookie') - self.failUnless(result[0][1].endswith('; Path=/cgi-bin/bfg.cgi/')) - self.failUnless(result[0][1].startswith('auth_tkt=')) - - self.assertEqual(result[1][0], 'Set-Cookie') - self.failUnless(result[1][1].endswith( - '; Path=/cgi-bin/bfg.cgi/; Domain=localhost')) - self.failUnless(result[1][1].startswith('auth_tkt=')) - - self.assertEqual(result[2][0], 'Set-Cookie') - self.failUnless(result[2][1].endswith( - '; Path=/cgi-bin/bfg.cgi/; Domain=.localhost')) - self.failUnless(result[2][1].startswith('auth_tkt=')) - - def test_remember_http_only(self): - plugin = self._makeOne('secret', include_ip=True, http_only=True) - request = self._makeRequest() - result = plugin.remember(request, 'other') - self.assertEqual(len(result), 3) - - self.assertEqual(result[0][0], 'Set-Cookie') - self.failUnless(result[0][1].endswith('; HttpOnly')) - self.failUnless(result[0][1].startswith('auth_tkt=')) - - self.assertEqual(result[1][0], 'Set-Cookie') - self.failUnless(result[1][1].endswith('; HttpOnly')) - self.failUnless(result[1][1].startswith('auth_tkt=')) - - self.assertEqual(result[2][0], 'Set-Cookie') - self.failUnless(result[2][1].endswith('; HttpOnly')) - self.failUnless(result[2][1].startswith('auth_tkt=')) - - def test_remember_secure(self): - plugin = self._makeOne('secret', include_ip=True, secure=True) - request = self._makeRequest() - result = plugin.remember(request, 'other') - self.assertEqual(len(result), 3) - - self.assertEqual(result[0][0], 'Set-Cookie') - self.failUnless('; Secure' in result[0][1]) - self.failUnless(result[0][1].startswith('auth_tkt=')) - - self.assertEqual(result[1][0], 'Set-Cookie') - self.failUnless('; Secure' in result[1][1]) - self.failUnless(result[1][1].startswith('auth_tkt=')) - - self.assertEqual(result[2][0], 'Set-Cookie') - self.failUnless('; Secure' in result[2][1]) - self.failUnless(result[2][1].startswith('auth_tkt=')) - - def test_remember_string_userid(self): - plugin = self._makeOne('secret') - request = self._makeRequest() - result = plugin.remember(request, 'userid') - values = self._parseHeaders(result) - self.assertEqual(len(result), 3) - val = self._cookieValue(values[0]) - self.assertEqual(val['userid'], 'userid'.encode('base64').strip()) - self.assertEqual(val['user_data'], 'userid_type:b64str') - - def test_remember_int_userid(self): - plugin = self._makeOne('secret') - request = self._makeRequest() - result = plugin.remember(request, 1) - values = self._parseHeaders(result) - self.assertEqual(len(result), 3) - val = self._cookieValue(values[0]) - self.assertEqual(val['userid'], '1') - self.assertEqual(val['user_data'], 'userid_type:int') - - def test_remember_long_userid(self): - plugin = self._makeOne('secret') - request = self._makeRequest() - result = plugin.remember(request, long(1)) - values = self._parseHeaders(result) - self.assertEqual(len(result), 3) - val = self._cookieValue(values[0]) - self.assertEqual(val['userid'], '1') - self.assertEqual(val['user_data'], 'userid_type:int') - - def test_remember_unicode_userid(self): - plugin = self._makeOne('secret') - request = self._makeRequest() - userid = unicode('\xc2\xa9', 'utf-8') - result = plugin.remember(request, userid) - values = self._parseHeaders(result) - self.assertEqual(len(result), 3) - val = self._cookieValue(values[0]) - self.assertEqual(val['userid'], - userid.encode('utf-8').encode('base64').strip()) - self.assertEqual(val['user_data'], 'userid_type:b64unicode') - - def test_remember_max_age(self): - plugin = self._makeOne('secret') - request = self._makeRequest() - result = plugin.remember(request, 'userid', max_age='500') - values = self._parseHeaders(result) - self.assertEqual(len(result), 3) - - self.assertEqual(values[0]['max-age'], '500') - self.failUnless(values[0]['expires']) - - def test_forget(self): - plugin = self._makeOne('secret') - request = self._makeRequest() - headers = plugin.forget(request) - self.assertEqual(len(headers), 3) - name, value = headers[0] - self.assertEqual(name, 'Set-Cookie') - self.assertEqual(value, - 'auth_tkt=""; Path=/; Max-Age=0; Expires=Wed, 31-Dec-97 23:59:59 GMT') - name, value = headers[1] - self.assertEqual(name, 'Set-Cookie') - self.assertEqual(value, - 'auth_tkt=""; Path=/; Domain=localhost; Max-Age=0; ' - 'Expires=Wed, 31-Dec-97 23:59:59 GMT') - name, value = headers[2] - self.assertEqual(name, 'Set-Cookie') - self.assertEqual(value, - 'auth_tkt=""; Path=/; Domain=.localhost; Max-Age=0; ' - 'Expires=Wed, 31-Dec-97 23:59:59 GMT') - - def test_timeout_lower_than_reissue(self): - self.assertRaises(ValueError, self._makeOne, 'userid', timeout=1, - reissue_time=2) - -class DummyContext: - pass - -class DummyRequest: - def __init__(self, environ): - self.environ = environ - self.callbacks = [] - - def add_response_callback(self, callback): - self.callbacks.append(callback) - -class DummyWhoPlugin: - def remember(self, environ, identity): - return environ, identity - - def forget(self, environ, identity): - return environ, identity - -class DummyCookieHelper: - def __init__(self, result): - self.result = result - - def identify(self, *arg, **kw): - return self.result - - def remember(self, *arg, **kw): - self.kw = kw - return [] - - def forget(self, *arg): - return [] - -class DummyAuthTktModule(object): - def __init__(self, timestamp=0, userid='userid', tokens=(), user_data='', - parse_raise=False): - self.timestamp = timestamp - self.userid = userid - self.tokens = tokens - self.user_data = user_data - self.parse_raise = parse_raise - def parse_ticket(secret, value, remote_addr): - self.secret = secret - self.value = value - self.remote_addr = remote_addr - if self.parse_raise: - raise self.BadTicket() - return self.timestamp, self.userid, self.tokens, self.user_data - self.parse_ticket = parse_ticket - - class AuthTicket(object): - def __init__(self, secret, userid, remote_addr, **kw): - self.secret = secret - self.userid = userid - self.remote_addr = remote_addr - self.kw = kw - - def cookie_value(self): - result = {'secret':self.secret, 'userid':self.userid, - 'remote_addr':self.remote_addr} - result.update(self.kw) - result = repr(result) - return result - self.AuthTicket = AuthTicket - - class BadTicket(Exception): - pass - -class DummyResponse: - def __init__(self): - self.headerlist = [] - diff --git a/repoze/bfg/tests/test_authorization.py b/repoze/bfg/tests/test_authorization.py deleted file mode 100644 index 6b8c8293a..000000000 --- a/repoze/bfg/tests/test_authorization.py +++ /dev/null @@ -1,189 +0,0 @@ -import unittest - -from repoze.bfg.testing import cleanUp - -class TestACLAuthorizationPolicy(unittest.TestCase): - def setUp(self): - cleanUp() - - def tearDown(self): - cleanUp() - - def _getTargetClass(self): - from repoze.bfg.authorization import ACLAuthorizationPolicy - return ACLAuthorizationPolicy - - def _makeOne(self): - return self._getTargetClass()() - - def test_class_implements_IAuthorizationPolicy(self): - from zope.interface.verify import verifyClass - from repoze.bfg.interfaces import IAuthorizationPolicy - verifyClass(IAuthorizationPolicy, self._getTargetClass()) - - def test_instance_implements_IAuthorizationPolicy(self): - from zope.interface.verify import verifyObject - from repoze.bfg.interfaces import IAuthorizationPolicy - verifyObject(IAuthorizationPolicy, self._makeOne()) - - def test_permits_no_acl(self): - context = DummyContext() - policy = self._makeOne() - self.assertEqual(policy.permits(context, [], 'view'), False) - - def test_permits(self): - from repoze.bfg.security import Deny - from repoze.bfg.security import Allow - from repoze.bfg.security import Everyone - from repoze.bfg.security import Authenticated - from repoze.bfg.security import ALL_PERMISSIONS - from repoze.bfg.security import DENY_ALL - root = DummyContext() - community = DummyContext(__name__='community', __parent__=root) - blog = DummyContext(__name__='blog', __parent__=community) - root.__acl__ = [ - (Allow, Authenticated, VIEW), - ] - community.__acl__ = [ - (Allow, 'fred', ALL_PERMISSIONS), - (Allow, 'wilma', VIEW), - DENY_ALL, - ] - blog.__acl__ = [ - (Allow, 'barney', MEMBER_PERMS), - (Allow, 'wilma', VIEW), - ] - - policy = self._makeOne() - - result = policy.permits(blog, [Everyone, Authenticated, 'wilma'], - 'view') - self.assertEqual(result, True) - self.assertEqual(result.context, blog) - self.assertEqual(result.ace, (Allow, 'wilma', VIEW)) - self.assertEqual(result.acl, blog.__acl__) - - result = policy.permits(blog, [Everyone, Authenticated, 'wilma'], - 'delete') - self.assertEqual(result, False) - self.assertEqual(result.context, community) - self.assertEqual(result.ace, (Deny, Everyone, ALL_PERMISSIONS)) - self.assertEqual(result.acl, community.__acl__) - - result = policy.permits(blog, [Everyone, Authenticated, 'fred'], 'view') - self.assertEqual(result, True) - self.assertEqual(result.context, community) - self.assertEqual(result.ace, (Allow, 'fred', ALL_PERMISSIONS)) - result = policy.permits(blog, [Everyone, Authenticated, 'fred'], - 'doesntevenexistyet') - self.assertEqual(result, True) - self.assertEqual(result.context, community) - self.assertEqual(result.ace, (Allow, 'fred', ALL_PERMISSIONS)) - self.assertEqual(result.acl, community.__acl__) - - result = policy.permits(blog, [Everyone, Authenticated, 'barney'], - 'view') - self.assertEqual(result, True) - self.assertEqual(result.context, blog) - self.assertEqual(result.ace, (Allow, 'barney', MEMBER_PERMS)) - result = policy.permits(blog, [Everyone, Authenticated, 'barney'], - 'administer') - self.assertEqual(result, False) - self.assertEqual(result.context, community) - self.assertEqual(result.ace, (Deny, Everyone, ALL_PERMISSIONS)) - self.assertEqual(result.acl, community.__acl__) - - result = policy.permits(root, [Everyone, Authenticated, 'someguy'], - 'view') - self.assertEqual(result, True) - self.assertEqual(result.context, root) - self.assertEqual(result.ace, (Allow, Authenticated, VIEW)) - result = policy.permits(blog, - [Everyone, Authenticated, 'someguy'], 'view') - self.assertEqual(result, False) - self.assertEqual(result.context, community) - self.assertEqual(result.ace, (Deny, Everyone, ALL_PERMISSIONS)) - self.assertEqual(result.acl, community.__acl__) - - result = policy.permits(root, [Everyone], 'view') - self.assertEqual(result, False) - self.assertEqual(result.context, root) - self.assertEqual(result.ace, '<default deny>') - self.assertEqual(result.acl, root.__acl__) - - context = DummyContext() - result = policy.permits(context, [Everyone], 'view') - self.assertEqual(result, False) - self.assertEqual(result.ace, '<default deny>') - self.assertEqual( - result.acl, - '<No ACL found on any object in model lineage>') - - def test_principals_allowed_by_permission_direct(self): - from repoze.bfg.security import Allow - from repoze.bfg.security import DENY_ALL - context = DummyContext() - acl = [ (Allow, 'chrism', ('read', 'write')), - DENY_ALL, - (Allow, 'other', 'read') ] - context.__acl__ = acl - policy = self._makeOne() - result = sorted( - policy.principals_allowed_by_permission(context, 'read')) - self.assertEqual(result, ['chrism']) - - def test_principals_allowed_by_permission(self): - from repoze.bfg.security import Allow - from repoze.bfg.security import Deny - from repoze.bfg.security import DENY_ALL - from repoze.bfg.security import ALL_PERMISSIONS - root = DummyContext(__name__='', __parent__=None) - community = DummyContext(__name__='community', __parent__=root) - blog = DummyContext(__name__='blog', __parent__=community) - root.__acl__ = [ (Allow, 'chrism', ('read', 'write')), - (Allow, 'other', ('read',)), - (Allow, 'jim', ALL_PERMISSIONS)] - community.__acl__ = [ (Deny, 'flooz', 'read'), - (Allow, 'flooz', 'read'), - (Allow, 'mork', 'read'), - (Deny, 'jim', 'read'), - (Allow, 'someguy', 'manage')] - blog.__acl__ = [ (Allow, 'fred', 'read'), - DENY_ALL] - - policy = self._makeOne() - - result = sorted(policy.principals_allowed_by_permission(blog, 'read')) - self.assertEqual(result, ['fred']) - result = sorted(policy.principals_allowed_by_permission(community, - 'read')) - self.assertEqual(result, ['chrism', 'mork', 'other']) - result = sorted(policy.principals_allowed_by_permission(community, - 'read')) - result = sorted(policy.principals_allowed_by_permission(root, 'read')) - self.assertEqual(result, ['chrism', 'jim', 'other']) - - def test_principals_allowed_by_permission_no_acls(self): - context = DummyContext() - policy = self._makeOne() - result = sorted(policy.principals_allowed_by_permission(context,'read')) - self.assertEqual(result, []) - -class DummyContext: - def __init__(self, *arg, **kw): - self.__dict__.update(kw) - - -VIEW = 'view' -EDIT = 'edit' -CREATE = 'create' -DELETE = 'delete' -MODERATE = 'moderate' -ADMINISTER = 'administer' -COMMENT = 'comment' - -GUEST_PERMS = (VIEW, COMMENT) -MEMBER_PERMS = GUEST_PERMS + (EDIT, CREATE, DELETE) -MODERATOR_PERMS = MEMBER_PERMS + (MODERATE,) -ADMINISTRATOR_PERMS = MODERATOR_PERMS + (ADMINISTER,) - diff --git a/repoze/bfg/tests/test_chameleon_text.py b/repoze/bfg/tests/test_chameleon_text.py deleted file mode 100644 index d9cefbd67..000000000 --- a/repoze/bfg/tests/test_chameleon_text.py +++ /dev/null @@ -1,198 +0,0 @@ -import unittest - -from repoze.bfg.testing import cleanUp - -class Base: - def setUp(self): - cleanUp() - import os - try: - # avoid spew from chameleon logger? - os.unlink(self._getTemplatePath('minimal.txt.py')) - except: - pass - - def tearDown(self): - cleanUp() - - def _getTemplatePath(self, name): - import os - here = os.path.abspath(os.path.dirname(__file__)) - return os.path.join(here, 'fixtures', name) - - def _registerUtility(self, utility, iface, name=''): - from repoze.bfg.threadlocal import get_current_registry - reg = get_current_registry() - reg.registerUtility(utility, iface, name=name) - return reg - - -class TextTemplateRendererTests(Base, unittest.TestCase): - def setUp(self): - from repoze.bfg.configuration import Configurator - from repoze.bfg.registry import Registry - registry = Registry() - self.config = Configurator(registry=registry) - self.config.begin() - - def tearDown(self): - self.config.end() - - def _getTargetClass(self): - from repoze.bfg.chameleon_text import TextTemplateRenderer - return TextTemplateRenderer - - def _makeOne(self, *arg, **kw): - klass = self._getTargetClass() - return klass(*arg, **kw) - - def test_instance_implements_ITemplate(self): - from zope.interface.verify import verifyObject - from repoze.bfg.interfaces import ITemplateRenderer - path = self._getTemplatePath('minimal.txt') - verifyObject(ITemplateRenderer, self._makeOne(path)) - - def test_class_implements_ITemplate(self): - from zope.interface.verify import verifyClass - from repoze.bfg.interfaces import ITemplateRenderer - verifyClass(ITemplateRenderer, self._getTargetClass()) - - def test_template_reified(self): - minimal = self._getTemplatePath('minimal.txt') - instance = self._makeOne(minimal) - self.failIf('template' in instance.__dict__) - template = instance.template - self.assertEqual(template, instance.__dict__['template']) - - def test_template_with_ichameleon_translate(self): - from repoze.bfg.interfaces import IChameleonTranslate - def ct(): pass - self.config.registry.registerUtility(ct, IChameleonTranslate) - minimal = self._getTemplatePath('minimal.txt') - instance = self._makeOne(minimal) - self.failIf('template' in instance.__dict__) - template = instance.template - self.assertEqual(template.translate, ct) - - def test_template_with_debug_templates(self): - self.config.add_settings({'debug_templates':True}) - minimal = self._getTemplatePath('minimal.txt') - instance = self._makeOne(minimal) - self.failIf('template' in instance.__dict__) - template = instance.template - self.assertEqual(template.debug, True) - - def test_template_with_reload_templates(self): - self.config.add_settings({'reload_templates':True}) - minimal = self._getTemplatePath('minimal.txt') - instance = self._makeOne(minimal) - self.failIf('template' in instance.__dict__) - template = instance.template - self.assertEqual(template.auto_reload, True) - - def test_template_with_emptydict(self): - from repoze.bfg.interfaces import ISettings - self.config.registry.registerUtility({}, ISettings) - minimal = self._getTemplatePath('minimal.txt') - instance = self._makeOne(minimal) - self.failIf('template' in instance.__dict__) - template = instance.template - self.assertEqual(template.auto_reload, False) - self.assertEqual(template.debug, False) - - def test_call(self): - minimal = self._getTemplatePath('minimal.txt') - instance = self._makeOne(minimal) - result = instance({}, {}) - self.failUnless(isinstance(result, str)) - self.assertEqual(result, 'Hello.\n') - - def test_call_with_nondict_value(self): - minimal = self._getTemplatePath('minimal.txt') - instance = self._makeOne(minimal) - self.assertRaises(ValueError, instance, None, {}) - - def test_call_nonminimal(self): - nonminimal = self._getTemplatePath('nonminimal.txt') - instance = self._makeOne(nonminimal) - result = instance({'name':'Chris'}, {}) - self.failUnless(isinstance(result, str)) - self.assertEqual(result, 'Hello, Chris!\n') - - def test_implementation(self): - minimal = self._getTemplatePath('minimal.txt') - instance = self._makeOne(minimal) - result = instance.implementation()() - self.failUnless(isinstance(result, str)) - self.assertEqual(result, 'Hello.\n') - -class RenderTemplateTests(Base, unittest.TestCase): - def _callFUT(self, name, **kw): - from repoze.bfg.chameleon_text import render_template - return render_template(name, **kw) - - def test_it(self): - minimal = self._getTemplatePath('minimal.txt') - result = self._callFUT(minimal) - self.failUnless(isinstance(result, str)) - self.assertEqual(result, 'Hello.\n') - -class RenderTemplateToResponseTests(Base, unittest.TestCase): - def _callFUT(self, name, **kw): - from repoze.bfg.chameleon_text import render_template_to_response - return render_template_to_response(name, **kw) - - def test_minimal(self): - minimal = self._getTemplatePath('minimal.txt') - result = self._callFUT(minimal) - from webob import Response - self.failUnless(isinstance(result, Response)) - self.assertEqual(result.app_iter, ['Hello.\n']) - self.assertEqual(result.status, '200 OK') - self.assertEqual(len(result.headerlist), 2) - - def test_iresponsefactory_override(self): - from webob import Response - class Response2(Response): - pass - from repoze.bfg.interfaces import IResponseFactory - self._registerUtility(Response2, IResponseFactory) - minimal = self._getTemplatePath('minimal.txt') - result = self._callFUT(minimal) - self.failUnless(isinstance(result, Response2)) - -class GetRendererTests(Base, unittest.TestCase): - def _callFUT(self, name): - from repoze.bfg.chameleon_text import get_renderer - return get_renderer(name) - - def test_it(self): - from repoze.bfg.interfaces import IRendererFactory - class Dummy: - template = object() - def implementation(self): pass - renderer = Dummy() - def rf(spec): - return renderer - self._registerUtility(rf, IRendererFactory, name='foo') - result = self._callFUT('foo') - self.failUnless(result is renderer) - -class GetTemplateTests(Base, unittest.TestCase): - def _callFUT(self, name): - from repoze.bfg.chameleon_text import get_template - return get_template(name) - - def test_it(self): - from repoze.bfg.interfaces import IRendererFactory - class Dummy: - template = object() - def implementation(self): - return self.template - renderer = Dummy() - def rf(spec): - return renderer - self._registerUtility(rf, IRendererFactory, name='foo') - result = self._callFUT('foo') - self.failUnless(result is renderer.template) - diff --git a/repoze/bfg/tests/test_chameleon_zpt.py b/repoze/bfg/tests/test_chameleon_zpt.py deleted file mode 100644 index a0f01701a..000000000 --- a/repoze/bfg/tests/test_chameleon_zpt.py +++ /dev/null @@ -1,194 +0,0 @@ -import unittest - -from repoze.bfg.testing import cleanUp - -class Base(object): - def setUp(self): - cleanUp() - - def tearDown(self): - cleanUp() - - def _getTemplatePath(self, name): - import os - here = os.path.abspath(os.path.dirname(__file__)) - return os.path.join(here, 'fixtures', name) - - def _registerUtility(self, utility, iface, name=''): - from repoze.bfg.threadlocal import get_current_registry - reg = get_current_registry() - reg.registerUtility(utility, iface, name=name) - return reg - -class ZPTTemplateRendererTests(Base, unittest.TestCase): - def setUp(self): - from repoze.bfg.configuration import Configurator - from repoze.bfg.registry import Registry - registry = Registry() - self.config = Configurator(registry=registry) - self.config.begin() - - def tearDown(self): - self.config.end() - - def _getTargetClass(self): - from repoze.bfg.chameleon_zpt import ZPTTemplateRenderer - return ZPTTemplateRenderer - - def _makeOne(self, *arg, **kw): - klass = self._getTargetClass() - return klass(*arg, **kw) - - def test_instance_implements_ITemplate(self): - from zope.interface.verify import verifyObject - from repoze.bfg.interfaces import ITemplateRenderer - path = self._getTemplatePath('minimal.pt') - verifyObject(ITemplateRenderer, self._makeOne(path)) - - def test_class_implements_ITemplate(self): - from zope.interface.verify import verifyClass - from repoze.bfg.interfaces import ITemplateRenderer - verifyClass(ITemplateRenderer, self._getTargetClass()) - - def test_call(self): - minimal = self._getTemplatePath('minimal.pt') - instance = self._makeOne(minimal) - result = instance({}, {}) - self.failUnless(isinstance(result, unicode)) - self.assertEqual(result, - '<div xmlns="http://www.w3.org/1999/xhtml">\n</div>') - - def test_template_reified(self): - minimal = self._getTemplatePath('minimal.pt') - instance = self._makeOne(minimal) - self.failIf('template' in instance.__dict__) - template = instance.template - self.assertEqual(template, instance.__dict__['template']) - - def test_template_with_ichameleon_translate(self): - from repoze.bfg.interfaces import IChameleonTranslate - def ct(): pass - self.config.registry.registerUtility(ct, IChameleonTranslate) - minimal = self._getTemplatePath('minimal.pt') - instance = self._makeOne(minimal) - self.failIf('template' in instance.__dict__) - template = instance.template - self.assertEqual(template.translate, ct) - - def test_template_with_debug_templates(self): - self.config.add_settings({'debug_templates':True}) - minimal = self._getTemplatePath('minimal.pt') - instance = self._makeOne(minimal) - self.failIf('template' in instance.__dict__) - template = instance.template - self.assertEqual(template.debug, True) - - def test_template_with_reload_templates(self): - self.config.add_settings({'reload_templates':True}) - minimal = self._getTemplatePath('minimal.pt') - instance = self._makeOne(minimal) - self.failIf('template' in instance.__dict__) - template = instance.template - self.assertEqual(template.auto_reload, True) - - def test_template_with_emptydict(self): - from repoze.bfg.interfaces import ISettings - self.config.registry.registerUtility({}, ISettings) - minimal = self._getTemplatePath('minimal.pt') - instance = self._makeOne(minimal) - self.failIf('template' in instance.__dict__) - template = instance.template - self.assertEqual(template.auto_reload, False) - self.assertEqual(template.debug, False) - - def test_call_with_nondict_value(self): - minimal = self._getTemplatePath('minimal.pt') - instance = self._makeOne(minimal) - self.assertRaises(ValueError, instance, None, {}) - - def test_implementation(self): - minimal = self._getTemplatePath('minimal.pt') - instance = self._makeOne(minimal) - result = instance.implementation()() - self.failUnless(isinstance(result, unicode)) - self.assertEqual(result, - '<div xmlns="http://www.w3.org/1999/xhtml">\n</div>') - - -class RenderTemplateTests(Base, unittest.TestCase): - def _callFUT(self, name, **kw): - from repoze.bfg.chameleon_zpt import render_template - return render_template(name, **kw) - - def test_it(self): - minimal = self._getTemplatePath('minimal.pt') - result = self._callFUT(minimal) - self.failUnless(isinstance(result, unicode)) - self.assertEqual(result, - '<div xmlns="http://www.w3.org/1999/xhtml">\n</div>') - -class RenderTemplateToResponseTests(Base, unittest.TestCase): - def setUp(self): - cleanUp() - - def tearDown(self): - cleanUp() - - def _callFUT(self, name, **kw): - from repoze.bfg.chameleon_zpt import render_template_to_response - return render_template_to_response(name, **kw) - - def test_it(self): - minimal = self._getTemplatePath('minimal.pt') - result = self._callFUT(minimal) - from webob import Response - self.failUnless(isinstance(result, Response)) - self.assertEqual(result.app_iter, - ['<div xmlns="http://www.w3.org/1999/xhtml">\n</div>']) - self.assertEqual(result.status, '200 OK') - self.assertEqual(len(result.headerlist), 2) - - def test_iresponsefactory_override(self): - from webob import Response - class Response2(Response): - pass - from repoze.bfg.interfaces import IResponseFactory - self._registerUtility(Response2, IResponseFactory) - minimal = self._getTemplatePath('minimal.pt') - result = self._callFUT(minimal) - self.failUnless(isinstance(result, Response2)) - -class GetRendererTests(Base, unittest.TestCase): - def _callFUT(self, name): - from repoze.bfg.chameleon_zpt import get_renderer - return get_renderer(name) - - def test_it(self): - from repoze.bfg.interfaces import IRendererFactory - class Dummy: - template = object() - def implementation(self): pass - renderer = Dummy() - def rf(spec): - return renderer - self._registerUtility(rf, IRendererFactory, name='foo') - result = self._callFUT('foo') - self.failUnless(result is renderer) - -class GetTemplateTests(Base, unittest.TestCase): - def _callFUT(self, name): - from repoze.bfg.chameleon_zpt import get_template - return get_template(name) - - def test_it(self): - from repoze.bfg.interfaces import IRendererFactory - class Dummy: - template = object() - def implementation(self): - return self.template - renderer = Dummy() - def rf(spec): - return renderer - self._registerUtility(rf, IRendererFactory, name='foo') - result = self._callFUT('foo') - self.failUnless(result is renderer.template) diff --git a/repoze/bfg/tests/test_compat.py b/repoze/bfg/tests/test_compat.py deleted file mode 100644 index 66ea61860..000000000 --- a/repoze/bfg/tests/test_compat.py +++ /dev/null @@ -1,9 +0,0 @@ -import unittest - -class TestAliases(unittest.TestCase): - def test_all(self): - from repoze.bfg.compat import all - self.assertEqual(all([True, True]), True) - self.assertEqual(all([False, False]), False) - self.assertEqual(all([False, True]), False) - diff --git a/repoze/bfg/tests/test_configuration.py b/repoze/bfg/tests/test_configuration.py deleted file mode 100644 index 47649d6ba..000000000 --- a/repoze/bfg/tests/test_configuration.py +++ /dev/null @@ -1,4335 +0,0 @@ -import unittest - -from repoze.bfg import testing - -class ConfiguratorTests(unittest.TestCase): - def _makeOne(self, *arg, **kw): - from repoze.bfg.configuration import Configurator - return Configurator(*arg, **kw) - - def _registerRenderer(self, config, name='.txt'): - from repoze.bfg.interfaces import IRendererFactory - from repoze.bfg.interfaces import ITemplateRenderer - from zope.interface import implements - class Renderer: - implements(ITemplateRenderer) - def __init__(self, path): - self.__class__.path = path - def __call__(self, *arg): - return 'Hello!' - config.registry.registerUtility(Renderer, IRendererFactory, name=name) - return Renderer - - def _getViewCallable(self, config, ctx_iface=None, request_iface=None, - name='', exception_view=False): - from zope.interface import Interface - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IExceptionViewClassifier - if exception_view: - classifier = IExceptionViewClassifier - else: - classifier = IViewClassifier - if ctx_iface is None: - ctx_iface = Interface - if request_iface is None: - request_iface = IRequest - return config.registry.adapters.lookup( - (classifier, request_iface, ctx_iface), IView, name=name, - default=None) - - def _getRouteRequestIface(self, config, name): - from repoze.bfg.interfaces import IRouteRequest - iface = config.registry.getUtility(IRouteRequest, name) - return iface - - def _assertNotFound(self, wrapper, *arg): - from repoze.bfg.exceptions import NotFound - self.assertRaises(NotFound, wrapper, *arg) - - def _registerEventListener(self, config, event_iface=None): - if event_iface is None: # pragma: no cover - from zope.interface import Interface - event_iface = Interface - L = [] - def subscriber(*event): - L.extend(event) - config.registry.registerHandler(subscriber, (event_iface,)) - return L - - def _registerLogger(self, config): - from repoze.bfg.interfaces import IDebugLogger - logger = DummyLogger() - config.registry.registerUtility(logger, IDebugLogger) - return logger - - def _makeRequest(self, config): - request = DummyRequest() - request.registry = config.registry - return request - - def _registerSecurityPolicy(self, config, permissive): - from repoze.bfg.interfaces import IAuthenticationPolicy - from repoze.bfg.interfaces import IAuthorizationPolicy - policy = DummySecurityPolicy(permissive) - config.registry.registerUtility(policy, IAuthenticationPolicy) - config.registry.registerUtility(policy, IAuthorizationPolicy) - - def _registerSettings(self, config, **settings): - from repoze.bfg.interfaces import ISettings - config.registry.registerUtility(settings, ISettings) - - def test_ctor_no_registry(self): - import sys - from repoze.bfg.interfaces import ISettings - from repoze.bfg.configuration import Configurator - from repoze.bfg.interfaces import IRendererFactory - config = Configurator() - this_pkg = sys.modules['repoze.bfg.tests'] - self.failUnless(config.registry.getUtility(ISettings)) - self.assertEqual(config.package, this_pkg) - self.failUnless(config.registry.getUtility(IRendererFactory, 'json')) - self.failUnless(config.registry.getUtility(IRendererFactory, 'string')) - self.failUnless(config.registry.getUtility(IRendererFactory, '.pt')) - self.failUnless(config.registry.getUtility(IRendererFactory, '.txt')) - - def test_begin(self): - from repoze.bfg.configuration import Configurator - config = Configurator() - manager = DummyThreadLocalManager() - config.manager = manager - config.begin() - self.assertEqual(manager.pushed, - {'registry':config.registry, 'request':None}) - self.assertEqual(manager.popped, False) - - def test_begin_with_request(self): - from repoze.bfg.configuration import Configurator - config = Configurator() - request = object() - manager = DummyThreadLocalManager() - config.manager = manager - config.begin(request=request) - self.assertEqual(manager.pushed, - {'registry':config.registry, 'request':request}) - self.assertEqual(manager.popped, False) - - def test_end(self): - from repoze.bfg.configuration import Configurator - config = Configurator() - manager = DummyThreadLocalManager() - config.manager = manager - config.end() - self.assertEqual(manager.pushed, None) - self.assertEqual(manager.popped, True) - - def test_ctor_with_package_registry(self): - import sys - from repoze.bfg.configuration import Configurator - bfg_pkg = sys.modules['repoze.bfg'] - config = Configurator(package=bfg_pkg) - self.assertEqual(config.package, bfg_pkg) - - def test_ctor_noreg_custom_settings(self): - from repoze.bfg.interfaces import ISettings - settings = {'reload_templates':True, - 'mysetting':True} - config = self._makeOne(settings=settings) - settings = config.registry.getUtility(ISettings) - self.assertEqual(settings['reload_templates'], True) - self.assertEqual(settings['debug_authorization'], False) - self.assertEqual(settings['mysetting'], True) - - def test_ctor_noreg_debug_logger_None_default(self): - from repoze.bfg.interfaces import IDebugLogger - config = self._makeOne() - logger = config.registry.getUtility(IDebugLogger) - self.assertEqual(logger.name, 'repoze.bfg.debug') - - def test_ctor_noreg_debug_logger_non_None(self): - from repoze.bfg.interfaces import IDebugLogger - logger = object() - config = self._makeOne(debug_logger=logger) - result = config.registry.getUtility(IDebugLogger) - self.assertEqual(logger, result) - - def test_ctor_authentication_policy(self): - from repoze.bfg.interfaces import IAuthenticationPolicy - policy = object() - config = self._makeOne(authentication_policy=policy) - result = config.registry.getUtility(IAuthenticationPolicy) - self.assertEqual(policy, result) - - def test_ctor_authorization_policy_only(self): - from repoze.bfg.exceptions import ConfigurationError - policy = object() - self.assertRaises(ConfigurationError, - self._makeOne, authorization_policy=policy) - - def test_ctor_no_root_factory(self): - from repoze.bfg.interfaces import IRootFactory - config = self._makeOne() - self.failUnless(config.registry.getUtility(IRootFactory)) - - def test_ctor_alternate_renderers(self): - from repoze.bfg.interfaces import IRendererFactory - renderer = object() - config = self._makeOne(renderers=[('yeah', renderer)]) - self.assertEqual(config.registry.getUtility(IRendererFactory, 'yeah'), - renderer) - - def test_ctor_default_permission(self): - from repoze.bfg.interfaces import IDefaultPermission - config = self._makeOne(default_permission='view') - self.assertEqual(config.registry.getUtility(IDefaultPermission), 'view') - - def test_with_package_module(self): - from repoze.bfg.tests import test_configuration - import repoze.bfg.tests - config = self._makeOne() - newconfig = config.with_package(test_configuration) - self.assertEqual(newconfig.package, repoze.bfg.tests) - - def test_with_package_package(self): - import repoze.bfg.tests - config = self._makeOne() - newconfig = config.with_package(repoze.bfg.tests) - self.assertEqual(newconfig.package, repoze.bfg.tests) - - def test_maybe_dotted_string_success(self): - import repoze.bfg.tests - config = self._makeOne() - result = config.maybe_dotted('repoze.bfg.tests') - self.assertEqual(result, repoze.bfg.tests) - - def test_maybe_dotted_string_fail(self): - from repoze.bfg.configuration import ConfigurationError - config = self._makeOne() - self.assertRaises(ConfigurationError, - config.maybe_dotted, 'cant.be.found') - - def test_maybe_dotted_notstring_success(self): - import repoze.bfg.tests - config = self._makeOne() - result = config.maybe_dotted(repoze.bfg.tests) - self.assertEqual(result, repoze.bfg.tests) - - def test_absolute_resource_spec_already_absolute(self): - import repoze.bfg.tests - config = self._makeOne(package=repoze.bfg.tests) - result = config.absolute_resource_spec('already:absolute') - self.assertEqual(result, 'already:absolute') - - def test_absolute_resource_spec_notastring(self): - import repoze.bfg.tests - config = self._makeOne(package=repoze.bfg.tests) - result = config.absolute_resource_spec(None) - self.assertEqual(result, None) - - def test_absolute_resource_spec_relative(self): - import repoze.bfg.tests - config = self._makeOne(package=repoze.bfg.tests) - result = config.absolute_resource_spec('templates') - self.assertEqual(result, 'repoze.bfg.tests:templates') - - def test_setup_registry_fixed(self): - class DummyRegistry(object): - def subscribers(self, events, name): - self.events = events - return events - def registerUtility(self, *arg, **kw): - pass - reg = DummyRegistry() - config = self._makeOne(reg) - config.add_view = lambda *arg, **kw: False - config.setup_registry() - self.assertEqual(reg.has_listeners, True) - self.assertEqual(reg.notify(1), None) - self.assertEqual(reg.events, (1,)) - - def test_setup_registry_registers_default_exceptionresponse_view(self): - from repoze.bfg.interfaces import IExceptionResponse - from repoze.bfg.view import default_exceptionresponse_view - class DummyRegistry(object): - def registerUtility(self, *arg, **kw): - pass - reg = DummyRegistry() - config = self._makeOne(reg) - views = [] - config.add_view = lambda *arg, **kw: views.append((arg, kw)) - config.setup_registry() - self.assertEqual(views[0], ((default_exceptionresponse_view,), - {'context':IExceptionResponse})) - - def test_setup_registry_explicit_notfound_trumps_iexceptionresponse(self): - from zope.interface import implementedBy - from repoze.bfg.interfaces import IRequest - from repoze.bfg.exceptions import NotFound - from repoze.bfg.registry import Registry - reg = Registry() - config = self._makeOne(reg) - config.setup_registry() # registers IExceptionResponse default view - def myview(context, request): - return 'OK' - config.add_view(myview, context=NotFound) - request = self._makeRequest(config) - view = self._getViewCallable(config, ctx_iface=implementedBy(NotFound), - request_iface=IRequest) - result = view(None, request) - self.assertEqual(result, 'OK') - - def test_setup_registry_custom_settings(self): - from repoze.bfg.registry import Registry - from repoze.bfg.interfaces import ISettings - settings = {'reload_templates':True, - 'mysetting':True} - reg = Registry() - config = self._makeOne(reg) - config.setup_registry(settings=settings) - settings = reg.getUtility(ISettings) - self.assertEqual(settings['reload_templates'], True) - self.assertEqual(settings['debug_authorization'], False) - self.assertEqual(settings['mysetting'], True) - - def test_setup_registry_debug_logger_None_default(self): - from repoze.bfg.registry import Registry - from repoze.bfg.interfaces import IDebugLogger - reg = Registry() - config = self._makeOne(reg) - config.setup_registry() - logger = reg.getUtility(IDebugLogger) - self.assertEqual(logger.name, 'repoze.bfg.debug') - - def test_setup_registry_debug_logger_non_None(self): - from repoze.bfg.registry import Registry - from repoze.bfg.interfaces import IDebugLogger - logger = object() - reg = Registry() - config = self._makeOne(reg) - config.setup_registry(debug_logger=logger) - result = reg.getUtility(IDebugLogger) - self.assertEqual(logger, result) - - def test_setup_registry_debug_logger_dottedname(self): - from repoze.bfg.registry import Registry - from repoze.bfg.interfaces import IDebugLogger - reg = Registry() - config = self._makeOne(reg) - config.setup_registry(debug_logger='repoze.bfg.tests') - result = reg.getUtility(IDebugLogger) - import repoze.bfg.tests - self.assertEqual(result, repoze.bfg.tests) - - def test_setup_registry_authentication_policy(self): - from repoze.bfg.registry import Registry - from repoze.bfg.interfaces import IAuthenticationPolicy - policy = object() - reg = Registry() - config = self._makeOne(reg) - config.setup_registry(authentication_policy=policy) - result = reg.getUtility(IAuthenticationPolicy) - self.assertEqual(policy, result) - - def test_setup_registry_authentication_policy_dottedname(self): - from repoze.bfg.registry import Registry - from repoze.bfg.interfaces import IAuthenticationPolicy - reg = Registry() - config = self._makeOne(reg) - config.setup_registry(authentication_policy='repoze.bfg.tests') - result = reg.getUtility(IAuthenticationPolicy) - import repoze.bfg.tests - self.assertEqual(result, repoze.bfg.tests) - - def test_setup_registry_authorization_policy_dottedname(self): - from repoze.bfg.registry import Registry - from repoze.bfg.interfaces import IAuthorizationPolicy - reg = Registry() - config = self._makeOne(reg) - dummy = object() - config.setup_registry(authentication_policy=dummy, - authorization_policy='repoze.bfg.tests') - result = reg.getUtility(IAuthorizationPolicy) - import repoze.bfg.tests - self.assertEqual(result, repoze.bfg.tests) - - def test_setup_registry_authorization_policy_only(self): - from repoze.bfg.registry import Registry - from repoze.bfg.exceptions import ConfigurationError - policy = object() - reg = Registry() - config = self._makeOne(reg) - config = self.assertRaises(ConfigurationError, - config.setup_registry, - authorization_policy=policy) - - def test_setup_registry_default_root_factory(self): - from repoze.bfg.registry import Registry - from repoze.bfg.interfaces import IRootFactory - reg = Registry() - config = self._makeOne(reg) - config.setup_registry() - self.failUnless(reg.getUtility(IRootFactory)) - - def test_setup_registry_dottedname_root_factory(self): - from repoze.bfg.registry import Registry - from repoze.bfg.interfaces import IRootFactory - reg = Registry() - config = self._makeOne(reg) - import repoze.bfg.tests - config.setup_registry(root_factory='repoze.bfg.tests') - self.assertEqual(reg.getUtility(IRootFactory), repoze.bfg.tests) - - def test_setup_registry_locale_negotiator_dottedname(self): - from repoze.bfg.registry import Registry - from repoze.bfg.interfaces import ILocaleNegotiator - reg = Registry() - config = self._makeOne(reg) - import repoze.bfg.tests - config.setup_registry(locale_negotiator='repoze.bfg.tests') - utility = reg.getUtility(ILocaleNegotiator) - self.assertEqual(utility, repoze.bfg.tests) - - def test_setup_registry_locale_negotiator(self): - from repoze.bfg.registry import Registry - from repoze.bfg.interfaces import ILocaleNegotiator - reg = Registry() - config = self._makeOne(reg) - negotiator = object() - config.setup_registry(locale_negotiator=negotiator) - utility = reg.getUtility(ILocaleNegotiator) - self.assertEqual(utility, negotiator) - - def test_setup_registry_request_factory(self): - from repoze.bfg.registry import Registry - from repoze.bfg.interfaces import IRequestFactory - reg = Registry() - config = self._makeOne(reg) - factory = object() - config.setup_registry(request_factory=factory) - utility = reg.getUtility(IRequestFactory) - self.assertEqual(utility, factory) - - def test_setup_registry_request_factory_dottedname(self): - from repoze.bfg.registry import Registry - from repoze.bfg.interfaces import IRequestFactory - reg = Registry() - config = self._makeOne(reg) - import repoze.bfg.tests - config.setup_registry(request_factory='repoze.bfg.tests') - utility = reg.getUtility(IRequestFactory) - self.assertEqual(utility, repoze.bfg.tests) - - def test_setup_registry_renderer_globals_factory(self): - from repoze.bfg.registry import Registry - from repoze.bfg.interfaces import IRendererGlobalsFactory - reg = Registry() - config = self._makeOne(reg) - factory = object() - config.setup_registry(renderer_globals_factory=factory) - utility = reg.getUtility(IRendererGlobalsFactory) - self.assertEqual(utility, factory) - - def test_setup_registry_renderer_globals_factory_dottedname(self): - from repoze.bfg.registry import Registry - from repoze.bfg.interfaces import IRendererGlobalsFactory - reg = Registry() - config = self._makeOne(reg) - import repoze.bfg.tests - config.setup_registry(renderer_globals_factory='repoze.bfg.tests') - utility = reg.getUtility(IRendererGlobalsFactory) - self.assertEqual(utility, repoze.bfg.tests) - - def test_setup_registry_alternate_renderers(self): - from repoze.bfg.registry import Registry - from repoze.bfg.interfaces import IRendererFactory - renderer = object() - reg = Registry() - config = self._makeOne(reg) - config.setup_registry(renderers=[('yeah', renderer)]) - self.assertEqual(reg.getUtility(IRendererFactory, 'yeah'), - renderer) - - def test_setup_registry_default_permission(self): - from repoze.bfg.registry import Registry - from repoze.bfg.interfaces import IDefaultPermission - reg = Registry() - config = self._makeOne(reg) - config.setup_registry(default_permission='view') - self.assertEqual(reg.getUtility(IDefaultPermission), 'view') - - def test_get_settings_nosettings(self): - from repoze.bfg.registry import Registry - reg = Registry() - config = self._makeOne(reg) - self.assertEqual(config.get_settings(), None) - - def test_get_settings_withsettings(self): - from repoze.bfg.interfaces import ISettings - settings = {'a':1} - config = self._makeOne() - config.registry.registerUtility(settings, ISettings) - self.assertEqual(config.get_settings(), settings) - - def test_add_settings_settings_already_registered(self): - from repoze.bfg.registry import Registry - from repoze.bfg.interfaces import ISettings - reg = Registry() - config = self._makeOne(reg) - config._set_settings({'a':1}) - config.add_settings({'b':2}) - settings = reg.getUtility(ISettings) - self.assertEqual(settings['a'], 1) - self.assertEqual(settings['b'], 2) - - def test_add_settings_settings_not_yet_registered(self): - from repoze.bfg.registry import Registry - from repoze.bfg.interfaces import ISettings - reg = Registry() - config = self._makeOne(reg) - config.add_settings({'a':1}) - settings = reg.getUtility(ISettings) - self.assertEqual(settings['a'], 1) - - def test_add_subscriber_defaults(self): - from zope.interface import implements - from zope.interface import Interface - class IEvent(Interface): - pass - class Event: - implements(IEvent) - L = [] - def subscriber(event): - L.append(event) - config = self._makeOne() - config.add_subscriber(subscriber) - event = Event() - config.registry.notify(event) - self.assertEqual(len(L), 1) - self.assertEqual(L[0], event) - config.registry.notify(object()) - self.assertEqual(len(L), 2) - - def test_add_subscriber_iface_specified(self): - from zope.interface import implements - from zope.interface import Interface - class IEvent(Interface): - pass - class Event: - implements(IEvent) - L = [] - def subscriber(event): - L.append(event) - config = self._makeOne() - config.add_subscriber(subscriber, IEvent) - event = Event() - config.registry.notify(event) - self.assertEqual(len(L), 1) - self.assertEqual(L[0], event) - config.registry.notify(object()) - self.assertEqual(len(L), 1) - - def test_add_subscriber_dottednames(self): - import repoze.bfg.tests - from repoze.bfg.interfaces import INewRequest - config = self._makeOne() - config.add_subscriber('repoze.bfg.tests', - 'repoze.bfg.interfaces.INewRequest') - handlers = list(config.registry.registeredHandlers()) - self.assertEqual(len(handlers), 1) - handler = handlers[0] - self.assertEqual(handler.handler, repoze.bfg.tests) - self.assertEqual(handler.required, (INewRequest,)) - - def test_add_object_event_subscriber(self): - from zope.interface import implements - from zope.interface import Interface - class IEvent(Interface): - pass - class Event: - object = 'foo' - implements(IEvent) - event = Event() - L = [] - def subscriber(object, event): - L.append(event) - config = self._makeOne() - config.add_subscriber(subscriber, (Interface, IEvent)) - config.registry.subscribers((event.object, event), None) - self.assertEqual(len(L), 1) - self.assertEqual(L[0], event) - config.registry.subscribers((event.object, IDummy), None) - self.assertEqual(len(L), 1) - - def test_make_wsgi_app(self): - from repoze.bfg.router import Router - from repoze.bfg.interfaces import IApplicationCreated - manager = DummyThreadLocalManager() - config = self._makeOne() - subscriber = self._registerEventListener(config, IApplicationCreated) - config.manager = manager - app = config.make_wsgi_app() - self.assertEqual(app.__class__, Router) - self.assertEqual(manager.pushed['registry'], config.registry) - self.assertEqual(manager.pushed['request'], None) - self.failUnless(manager.popped) - self.assertEqual(len(subscriber), 1) - self.failUnless(IApplicationCreated.providedBy(subscriber[0])) - - def test_load_zcml_default(self): - import repoze.bfg.tests.fixtureapp - config = self._makeOne(package=repoze.bfg.tests.fixtureapp) - registry = config.load_zcml() - from repoze.bfg.tests.fixtureapp.models import IFixture - self.failUnless(registry.queryUtility(IFixture)) # only in c.zcml - - def test_load_zcml_routesapp(self): - from repoze.bfg.interfaces import IRoutesMapper - config = self._makeOne() - config.load_zcml('repoze.bfg.tests.routesapp:configure.zcml') - self.failUnless(config.registry.getUtility(IRoutesMapper)) - - def test_load_zcml_fixtureapp(self): - from repoze.bfg.tests.fixtureapp.models import IFixture - config = self._makeOne() - config.load_zcml('repoze.bfg.tests.fixtureapp:configure.zcml') - self.failUnless(config.registry.queryUtility(IFixture)) # only in c.zcml - - def test_load_zcml_as_relative_filename(self): - import repoze.bfg.tests.fixtureapp - config = self._makeOne(package=repoze.bfg.tests.fixtureapp) - registry = config.load_zcml('configure.zcml') - from repoze.bfg.tests.fixtureapp.models import IFixture - self.failUnless(registry.queryUtility(IFixture)) # only in c.zcml - - def test_load_zcml_as_absolute_filename(self): - import os - import repoze.bfg.tests.fixtureapp - config = self._makeOne(package=repoze.bfg.tests.fixtureapp) - dn = os.path.dirname(repoze.bfg.tests.fixtureapp.__file__) - c_z = os.path.join(dn, 'configure.zcml') - registry = config.load_zcml(c_z) - from repoze.bfg.tests.fixtureapp.models import IFixture - self.failUnless(registry.queryUtility(IFixture)) # only in c.zcml - - def test_load_zcml_lock_and_unlock(self): - config = self._makeOne() - dummylock = DummyLock() - config.load_zcml( - 'repoze.bfg.tests.fixtureapp:configure.zcml', - lock=dummylock) - self.assertEqual(dummylock.acquired, True) - self.assertEqual(dummylock.released, True) - - def test_add_view_view_callable_None_no_renderer(self): - from repoze.bfg.exceptions import ConfigurationError - config = self._makeOne() - self.assertRaises(ConfigurationError, config.add_view) - - def test_add_view_with_request_type_and_route_name(self): - from repoze.bfg.exceptions import ConfigurationError - config = self._makeOne() - view = lambda *arg: 'OK' - self.assertRaises(ConfigurationError, config.add_view, view, '', None, - None, True, True) - - def test_add_view_with_request_type_methodname_string(self): - view = lambda *arg: 'OK' - config = self._makeOne() - config.add_view(view=view, request_type='GET') - wrapper = self._getViewCallable(config) - request = DummyRequest() - request.method = 'POST' - self._assertNotFound(wrapper, None, request) - request = DummyRequest() - request.method = 'GET' - result = wrapper(None, request) - self.assertEqual(result, 'OK') - - def test_add_view_with_request_type(self): - from zope.interface import directlyProvides - from repoze.bfg.interfaces import IRequest - view = lambda *arg: 'OK' - config = self._makeOne() - config.add_view(view=view, - request_type='repoze.bfg.interfaces.IRequest') - wrapper = self._getViewCallable(config) - request = DummyRequest() - self._assertNotFound(wrapper, None, request) - directlyProvides(request, IRequest) - result = wrapper(None, request) - self.assertEqual(result, 'OK') - - def test_add_view_view_callable_None_with_renderer(self): - config = self._makeOne() - self._registerRenderer(config, name='dummy') - config.add_view(renderer='dummy') - view = self._getViewCallable(config) - self.failUnless('Hello!' in view(None, None).body) - - def test_add_view_wrapped_view_is_decorated(self): - def view(request): # request-only wrapper - """ """ - config = self._makeOne() - config.add_view(view=view) - wrapper = self._getViewCallable(config) - self.assertEqual(wrapper.__module__, view.__module__) - self.assertEqual(wrapper.__name__, view.__name__) - self.assertEqual(wrapper.__doc__, view.__doc__) - - def test_add_view_view_callable_dottedname(self): - config = self._makeOne() - config.add_view(view='repoze.bfg.tests.test_configuration.dummy_view') - wrapper = self._getViewCallable(config) - self.assertEqual(wrapper(None, None), 'OK') - - def test_add_view_with_function_callable(self): - view = lambda *arg: 'OK' - config = self._makeOne() - config.add_view(view=view) - wrapper = self._getViewCallable(config) - result = wrapper(None, None) - self.assertEqual(result, 'OK') - - def test_add_view_with_function_callable_requestonly(self): - def view(request): - return 'OK' - config = self._makeOne() - config.add_view(view=view) - wrapper = self._getViewCallable(config) - result = wrapper(None, None) - self.assertEqual(result, 'OK') - - def test_add_view_as_instance(self): - class AView: - def __call__(self, context, request): - """ """ - return 'OK' - view = AView() - config = self._makeOne() - config.add_view(view=view) - wrapper = self._getViewCallable(config) - result = wrapper(None, None) - self.assertEqual(result, 'OK') - - def test_add_view_as_instance_requestonly(self): - class AView: - def __call__(self, request): - """ """ - return 'OK' - view = AView() - config = self._makeOne() - config.add_view(view=view) - wrapper = self._getViewCallable(config) - result = wrapper(None, None) - self.assertEqual(result, 'OK') - - def test_add_view_as_oldstyle_class(self): - class view: - def __init__(self, context, request): - self.context = context - self.request = request - - def __call__(self): - return 'OK' - config = self._makeOne() - config.add_view(view=view) - wrapper = self._getViewCallable(config) - result = wrapper(None, None) - self.assertEqual(result, 'OK') - - def test_add_view_as_oldstyle_class_requestonly(self): - class view: - def __init__(self, request): - self.request = request - - def __call__(self): - return 'OK' - config = self._makeOne() - config.add_view(view=view) - wrapper = self._getViewCallable(config) - result = wrapper(None, None) - self.assertEqual(result, 'OK') - - def test_add_view_context_as_class(self): - from zope.interface import implementedBy - view = lambda *arg: 'OK' - class Foo: - pass - config = self._makeOne() - config.add_view(context=Foo, view=view) - foo = implementedBy(Foo) - wrapper = self._getViewCallable(config, foo) - self.assertEqual(wrapper, view) - - def test_add_view_context_as_iface(self): - view = lambda *arg: 'OK' - config = self._makeOne() - config.add_view(context=IDummy, view=view) - wrapper = self._getViewCallable(config, IDummy) - self.assertEqual(wrapper, view) - - def test_add_view_context_as_dottedname(self): - view = lambda *arg: 'OK' - config = self._makeOne() - config.add_view(context='repoze.bfg.tests.test_configuration.IDummy', - view=view) - wrapper = self._getViewCallable(config, IDummy) - self.assertEqual(wrapper, view) - - def test_add_view_for__as_dottedname(self): - view = lambda *arg: 'OK' - config = self._makeOne() - config.add_view(for_='repoze.bfg.tests.test_configuration.IDummy', - view=view) - wrapper = self._getViewCallable(config, IDummy) - self.assertEqual(wrapper, view) - - def test_add_view_for_as_class(self): - # ``for_`` is older spelling for ``context`` - from zope.interface import implementedBy - view = lambda *arg: 'OK' - class Foo: - pass - config = self._makeOne() - config.add_view(for_=Foo, view=view) - foo = implementedBy(Foo) - wrapper = self._getViewCallable(config, foo) - self.assertEqual(wrapper, view) - - def test_add_view_for_as_iface(self): - # ``for_`` is older spelling for ``context`` - view = lambda *arg: 'OK' - config = self._makeOne() - config.add_view(for_=IDummy, view=view) - wrapper = self._getViewCallable(config, IDummy) - self.assertEqual(wrapper, view) - - def test_add_view_context_trumps_for(self): - # ``for_`` is older spelling for ``context`` - view = lambda *arg: 'OK' - config = self._makeOne() - class Foo: - pass - config.add_view(context=IDummy, for_=Foo, view=view) - wrapper = self._getViewCallable(config, IDummy) - self.assertEqual(wrapper, view) - - def test_add_view_register_secured_view(self): - from zope.interface import Interface - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import ISecuredView - from repoze.bfg.interfaces import IViewClassifier - view = lambda *arg: 'OK' - view.__call_permissive__ = view - config = self._makeOne() - config.add_view(view=view) - wrapper = config.registry.adapters.lookup( - (IViewClassifier, IRequest, Interface), - ISecuredView, name='', default=None) - self.assertEqual(wrapper, view) - - def test_add_view_exception_register_secured_view(self): - from zope.interface import implementedBy - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IExceptionViewClassifier - view = lambda *arg: 'OK' - view.__call_permissive__ = view - config = self._makeOne() - config.add_view(view=view, context=RuntimeError) - wrapper = config.registry.adapters.lookup( - (IExceptionViewClassifier, IRequest, implementedBy(RuntimeError)), - IView, name='', default=None) - self.assertEqual(wrapper, view) - - def test_add_view_same_phash_overrides_existing_single_view(self): - from repoze.bfg.compat import md5 - from zope.interface import Interface - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IMultiView - phash = md5() - phash.update('xhr:True') - view = lambda *arg: 'NOT OK' - view.__phash__ = phash.hexdigest() - config = self._makeOne() - config.registry.registerAdapter( - view, (IViewClassifier, IRequest, Interface), IView, name='') - def newview(context, request): - return 'OK' - config.add_view(view=newview, xhr=True) - wrapper = self._getViewCallable(config) - self.failIf(IMultiView.providedBy(wrapper)) - request = DummyRequest() - request.is_xhr = True - self.assertEqual(wrapper(None, request), 'OK') - - def test_add_view_exc_same_phash_overrides_existing_single_view(self): - from repoze.bfg.compat import md5 - from zope.interface import implementedBy - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IExceptionViewClassifier - from repoze.bfg.interfaces import IMultiView - phash = md5() - phash.update('xhr:True') - view = lambda *arg: 'NOT OK' - view.__phash__ = phash.hexdigest() - config = self._makeOne() - config.registry.registerAdapter( - view, - (IExceptionViewClassifier, IRequest, implementedBy(RuntimeError)), - IView, name='') - def newview(context, request): - return 'OK' - config.add_view(view=newview, xhr=True, - context=RuntimeError) - wrapper = self._getViewCallable( - config, ctx_iface=implementedBy(RuntimeError), exception_view=True) - self.failIf(IMultiView.providedBy(wrapper)) - request = DummyRequest() - request.is_xhr = True - self.assertEqual(wrapper(None, request), 'OK') - - def test_add_view_default_phash_overrides_no_phash(self): - from zope.interface import Interface - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IMultiView - view = lambda *arg: 'NOT OK' - config = self._makeOne() - config.registry.registerAdapter( - view, (IViewClassifier, IRequest, Interface), IView, name='') - def newview(context, request): - return 'OK' - config.add_view(view=newview) - wrapper = self._getViewCallable(config) - self.failIf(IMultiView.providedBy(wrapper)) - request = DummyRequest() - request.is_xhr = True - self.assertEqual(wrapper(None, request), 'OK') - - def test_add_view_exc_default_phash_overrides_no_phash(self): - from zope.interface import implementedBy - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IExceptionViewClassifier - from repoze.bfg.interfaces import IMultiView - view = lambda *arg: 'NOT OK' - config = self._makeOne() - config.registry.registerAdapter( - view, - (IExceptionViewClassifier, IRequest, implementedBy(RuntimeError)), - IView, name='') - def newview(context, request): - return 'OK' - config.add_view(view=newview, context=RuntimeError) - wrapper = self._getViewCallable( - config, ctx_iface=implementedBy(RuntimeError), exception_view=True) - self.failIf(IMultiView.providedBy(wrapper)) - request = DummyRequest() - request.is_xhr = True - self.assertEqual(wrapper(None, request), 'OK') - - def test_add_view_default_phash_overrides_default_phash(self): - from repoze.bfg.configuration import DEFAULT_PHASH - from zope.interface import Interface - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IMultiView - view = lambda *arg: 'NOT OK' - view.__phash__ = DEFAULT_PHASH - config = self._makeOne() - config.registry.registerAdapter( - view, (IViewClassifier, IRequest, Interface), IView, name='') - def newview(context, request): - return 'OK' - config.add_view(view=newview) - wrapper = self._getViewCallable(config) - self.failIf(IMultiView.providedBy(wrapper)) - request = DummyRequest() - request.is_xhr = True - self.assertEqual(wrapper(None, request), 'OK') - - def test_add_view_exc_default_phash_overrides_default_phash(self): - from repoze.bfg.configuration import DEFAULT_PHASH - from zope.interface import implementedBy - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IExceptionViewClassifier - from repoze.bfg.interfaces import IMultiView - view = lambda *arg: 'NOT OK' - view.__phash__ = DEFAULT_PHASH - config = self._makeOne() - config.registry.registerAdapter( - view, - (IExceptionViewClassifier, IRequest, implementedBy(RuntimeError)), - IView, name='') - def newview(context, request): - return 'OK' - config.add_view(view=newview, context=RuntimeError) - wrapper = self._getViewCallable( - config, ctx_iface=implementedBy(RuntimeError), exception_view=True) - self.failIf(IMultiView.providedBy(wrapper)) - request = DummyRequest() - request.is_xhr = True - self.assertEqual(wrapper(None, request), 'OK') - - def test_add_view_multiview_replaces_existing_view(self): - from zope.interface import Interface - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IMultiView - view = lambda *arg: 'OK' - view.__phash__ = 'abc' - config = self._makeOne() - config.registry.registerAdapter( - view, (IViewClassifier, IRequest, Interface), IView, name='') - config.add_view(view=view) - wrapper = self._getViewCallable(config) - self.failUnless(IMultiView.providedBy(wrapper)) - self.assertEqual(wrapper(None, None), 'OK') - - def test_add_view_exc_multiview_replaces_existing_view(self): - from zope.interface import implementedBy - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IExceptionViewClassifier - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IMultiView - view = lambda *arg: 'OK' - view.__phash__ = 'abc' - config = self._makeOne() - config.registry.registerAdapter( - view, - (IViewClassifier, IRequest, implementedBy(RuntimeError)), - IView, name='') - config.registry.registerAdapter( - view, - (IExceptionViewClassifier, IRequest, implementedBy(RuntimeError)), - IView, name='') - config.add_view(view=view, context=RuntimeError) - wrapper = self._getViewCallable( - config, ctx_iface=implementedBy(RuntimeError), exception_view=True) - self.failUnless(IMultiView.providedBy(wrapper)) - self.assertEqual(wrapper(None, None), 'OK') - - def test_add_view_multiview_replaces_existing_securedview(self): - from zope.interface import Interface - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import ISecuredView - from repoze.bfg.interfaces import IMultiView - from repoze.bfg.interfaces import IViewClassifier - view = lambda *arg: 'OK' - view.__phash__ = 'abc' - config = self._makeOne() - config.registry.registerAdapter( - view, (IViewClassifier, IRequest, Interface), - ISecuredView, name='') - config.add_view(view=view) - wrapper = self._getViewCallable(config) - self.failUnless(IMultiView.providedBy(wrapper)) - self.assertEqual(wrapper(None, None), 'OK') - - def test_add_view_exc_multiview_replaces_existing_securedview(self): - from zope.interface import implementedBy - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import ISecuredView - from repoze.bfg.interfaces import IMultiView - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IExceptionViewClassifier - view = lambda *arg: 'OK' - view.__phash__ = 'abc' - config = self._makeOne() - config.registry.registerAdapter( - view, - (IViewClassifier, IRequest, implementedBy(RuntimeError)), - ISecuredView, name='') - config.registry.registerAdapter( - view, - (IExceptionViewClassifier, IRequest, implementedBy(RuntimeError)), - ISecuredView, name='') - config.add_view(view=view, context=RuntimeError) - wrapper = self._getViewCallable( - config, ctx_iface=implementedBy(RuntimeError), exception_view=True) - self.failUnless(IMultiView.providedBy(wrapper)) - self.assertEqual(wrapper(None, None), 'OK') - - def test_add_view_with_accept_multiview_replaces_existing_view(self): - from zope.interface import Interface - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IMultiView - from repoze.bfg.interfaces import IViewClassifier - def view(context, request): - return 'OK' - def view2(context, request): - return 'OK2' - config = self._makeOne() - config.registry.registerAdapter( - view, (IViewClassifier, IRequest, Interface), IView, name='') - config.add_view(view=view2, accept='text/html') - wrapper = self._getViewCallable(config) - self.failUnless(IMultiView.providedBy(wrapper)) - self.assertEqual(len(wrapper.views), 1) - self.assertEqual(len(wrapper.media_views), 1) - self.assertEqual(wrapper(None, None), 'OK') - request = DummyRequest() - request.accept = DummyAccept('text/html', 'text/html') - self.assertEqual(wrapper(None, request), 'OK2') - - def test_add_view_exc_with_accept_multiview_replaces_existing_view(self): - from zope.interface import implementedBy - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IMultiView - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IExceptionViewClassifier - def view(context, request): - return 'OK' - def view2(context, request): - return 'OK2' - config = self._makeOne() - config.registry.registerAdapter( - view, - (IViewClassifier, IRequest, implementedBy(RuntimeError)), - IView, name='') - config.registry.registerAdapter( - view, - (IExceptionViewClassifier, IRequest, implementedBy(RuntimeError)), - IView, name='') - config.add_view(view=view2, accept='text/html', context=RuntimeError) - wrapper = self._getViewCallable( - config, ctx_iface=implementedBy(RuntimeError), exception_view=True) - self.failUnless(IMultiView.providedBy(wrapper)) - self.assertEqual(len(wrapper.views), 1) - self.assertEqual(len(wrapper.media_views), 1) - self.assertEqual(wrapper(None, None), 'OK') - request = DummyRequest() - request.accept = DummyAccept('text/html', 'text/html') - self.assertEqual(wrapper(None, request), 'OK2') - - def test_add_view_multiview_replaces_existing_view_with___accept__(self): - from zope.interface import Interface - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IMultiView - from repoze.bfg.interfaces import IViewClassifier - def view(context, request): - return 'OK' - def view2(context, request): - return 'OK2' - view.__accept__ = 'text/html' - view.__phash__ = 'abc' - config = self._makeOne() - config.registry.registerAdapter( - view, (IViewClassifier, IRequest, Interface), IView, name='') - config.add_view(view=view2) - wrapper = self._getViewCallable(config) - self.failUnless(IMultiView.providedBy(wrapper)) - self.assertEqual(len(wrapper.views), 1) - self.assertEqual(len(wrapper.media_views), 1) - self.assertEqual(wrapper(None, None), 'OK2') - request = DummyRequest() - request.accept = DummyAccept('text/html') - self.assertEqual(wrapper(None, request), 'OK') - - def test_add_view_exc_mulview_replaces_existing_view_with___accept__(self): - from zope.interface import implementedBy - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IMultiView - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IExceptionViewClassifier - def view(context, request): - return 'OK' - def view2(context, request): - return 'OK2' - view.__accept__ = 'text/html' - view.__phash__ = 'abc' - config = self._makeOne() - config.registry.registerAdapter( - view, - (IViewClassifier, IRequest, implementedBy(RuntimeError)), - IView, name='') - config.registry.registerAdapter( - view, - (IExceptionViewClassifier, IRequest, implementedBy(RuntimeError)), - IView, name='') - config.add_view(view=view2, context=RuntimeError) - wrapper = self._getViewCallable( - config, ctx_iface=implementedBy(RuntimeError), exception_view=True) - self.failUnless(IMultiView.providedBy(wrapper)) - self.assertEqual(len(wrapper.views), 1) - self.assertEqual(len(wrapper.media_views), 1) - self.assertEqual(wrapper(None, None), 'OK2') - request = DummyRequest() - request.accept = DummyAccept('text/html') - self.assertEqual(wrapper(None, request), 'OK') - - def test_add_view_multiview_replaces_multiview(self): - from zope.interface import Interface - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IMultiView - from repoze.bfg.interfaces import IViewClassifier - view = DummyMultiView() - config = self._makeOne() - config.registry.registerAdapter( - view, (IViewClassifier, IRequest, Interface), - IMultiView, name='') - view2 = lambda *arg: 'OK2' - config.add_view(view=view2) - wrapper = self._getViewCallable(config) - self.failUnless(IMultiView.providedBy(wrapper)) - self.assertEqual([x[:2] for x in wrapper.views], [(view2, None)]) - self.assertEqual(wrapper(None, None), 'OK1') - - def test_add_view_exc_multiview_replaces_multiview(self): - from zope.interface import implementedBy - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IMultiView - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IExceptionViewClassifier - view = DummyMultiView() - config = self._makeOne() - config.registry.registerAdapter( - view, - (IViewClassifier, IRequest, implementedBy(RuntimeError)), - IMultiView, name='') - config.registry.registerAdapter( - view, - (IExceptionViewClassifier, IRequest, implementedBy(RuntimeError)), - IMultiView, name='') - view2 = lambda *arg: 'OK2' - config.add_view(view=view2, context=RuntimeError) - wrapper = self._getViewCallable( - config, ctx_iface=implementedBy(RuntimeError), exception_view=True) - self.failUnless(IMultiView.providedBy(wrapper)) - self.assertEqual([x[:2] for x in wrapper.views], [(view2, None)]) - self.assertEqual(wrapper(None, None), 'OK1') - - def test_add_view_multiview_context_superclass_then_subclass(self): - from zope.interface import Interface - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IMultiView - from repoze.bfg.interfaces import IViewClassifier - class ISuper(Interface): - pass - class ISub(ISuper): - pass - view = lambda *arg: 'OK' - view2 = lambda *arg: 'OK2' - config = self._makeOne() - config.registry.registerAdapter( - view, (IViewClassifier, IRequest, ISuper), IView, name='') - config.add_view(view=view2, for_=ISub) - wrapper = self._getViewCallable(config, ISuper, IRequest) - self.failIf(IMultiView.providedBy(wrapper)) - self.assertEqual(wrapper(None, None), 'OK') - wrapper = self._getViewCallable(config, ISub, IRequest) - self.failIf(IMultiView.providedBy(wrapper)) - self.assertEqual(wrapper(None, None), 'OK2') - - def test_add_view_multiview_exception_superclass_then_subclass(self): - from zope.interface import implementedBy - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IMultiView - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IExceptionViewClassifier - class Super(Exception): - pass - class Sub(Super): - pass - view = lambda *arg: 'OK' - view2 = lambda *arg: 'OK2' - config = self._makeOne() - config.registry.registerAdapter( - view, (IViewClassifier, IRequest, Super), IView, name='') - config.registry.registerAdapter( - view, (IExceptionViewClassifier, IRequest, Super), IView, name='') - config.add_view(view=view2, for_=Sub) - wrapper = self._getViewCallable( - config, implementedBy(Super), IRequest) - wrapper_exc_view = self._getViewCallable( - config, implementedBy(Super), IRequest, exception_view=True) - self.assertEqual(wrapper_exc_view, wrapper) - self.failIf(IMultiView.providedBy(wrapper_exc_view)) - self.assertEqual(wrapper_exc_view(None, None), 'OK') - wrapper = self._getViewCallable( - config, implementedBy(Sub), IRequest) - wrapper_exc_view = self._getViewCallable( - config, implementedBy(Sub), IRequest, exception_view=True) - self.assertEqual(wrapper_exc_view, wrapper) - self.failIf(IMultiView.providedBy(wrapper_exc_view)) - self.assertEqual(wrapper_exc_view(None, None), 'OK2') - - def test_add_view_multiview_call_ordering(self): - from zope.interface import directlyProvides - def view1(context, request): return 'view1' - def view2(context, request): return 'view2' - def view3(context, request): return 'view3' - def view4(context, request): return 'view4' - def view5(context, request): return 'view5' - def view6(context, request): return 'view6' - def view7(context, request): return 'view7' - def view8(context, request): return 'view8' - config = self._makeOne() - config.add_view(view=view1) - config.add_view(view=view2, request_method='POST') - config.add_view(view=view3,request_param='param') - config.add_view(view=view4, containment=IDummy) - config.add_view(view=view5, request_method='POST',request_param='param') - config.add_view(view=view6, request_method='POST', containment=IDummy) - config.add_view(view=view7, request_param='param', containment=IDummy) - config.add_view(view=view8, request_method='POST',request_param='param', - containment=IDummy) - - wrapper = self._getViewCallable(config) - - ctx = DummyContext() - request = self._makeRequest(config) - request.method = 'GET' - request.params = {} - self.assertEqual(wrapper(ctx, request), 'view1') - - ctx = DummyContext() - request = self._makeRequest(config) - request.params = {} - request.method = 'POST' - self.assertEqual(wrapper(ctx, request), 'view2') - - ctx = DummyContext() - request = self._makeRequest(config) - request.params = {'param':'1'} - request.method = 'GET' - self.assertEqual(wrapper(ctx, request), 'view3') - - ctx = DummyContext() - directlyProvides(ctx, IDummy) - request = self._makeRequest(config) - request.method = 'GET' - request.params = {} - self.assertEqual(wrapper(ctx, request), 'view4') - - ctx = DummyContext() - request = self._makeRequest(config) - request.method = 'POST' - request.params = {'param':'1'} - self.assertEqual(wrapper(ctx, request), 'view5') - - ctx = DummyContext() - directlyProvides(ctx, IDummy) - request = self._makeRequest(config) - request.params = {} - request.method = 'POST' - self.assertEqual(wrapper(ctx, request), 'view6') - - ctx = DummyContext() - directlyProvides(ctx, IDummy) - request = self._makeRequest(config) - request.method = 'GET' - request.params = {'param':'1'} - self.assertEqual(wrapper(ctx, request), 'view7') - - ctx = DummyContext() - directlyProvides(ctx, IDummy) - request = self._makeRequest(config) - request.method = 'POST' - request.params = {'param':'1'} - self.assertEqual(wrapper(ctx, request), 'view8') - - def test_add_view_with_template_renderer(self): - class view(object): - def __init__(self, context, request): - self.request = request - self.context = context - - def __call__(self): - return {'a':'1'} - config = self._makeOne() - renderer = self._registerRenderer(config) - fixture = 'repoze.bfg.tests:fixtures/minimal.txt' - config.add_view(view=view, renderer=fixture) - wrapper = self._getViewCallable(config) - request = self._makeRequest(config) - result = wrapper(None, request) - self.assertEqual(result.body, 'Hello!') - self.assertEqual(renderer.path, 'repoze.bfg.tests:fixtures/minimal.txt') - - def test_add_view_with_template_renderer_no_callable(self): - config = self._makeOne() - renderer = self._registerRenderer(config) - fixture = 'repoze.bfg.tests:fixtures/minimal.txt' - config.add_view(view=None, renderer=fixture) - wrapper = self._getViewCallable(config) - request = self._makeRequest(config) - result = wrapper(None, request) - self.assertEqual(result.body, 'Hello!') - self.assertEqual(renderer.path, 'repoze.bfg.tests:fixtures/minimal.txt') - - def test_add_view_with_request_type_as_iface(self): - from zope.interface import directlyProvides - def view(context, request): - return 'OK' - config = self._makeOne() - config.add_view(request_type=IDummy, view=view) - wrapper = self._getViewCallable(config, None) - request = self._makeRequest(config) - directlyProvides(request, IDummy) - result = wrapper(None, request) - self.assertEqual(result, 'OK') - - def test_add_view_with_request_type_as_noniface(self): - from repoze.bfg.exceptions import ConfigurationError - view = lambda *arg: 'OK' - config = self._makeOne() - self.assertRaises(ConfigurationError, - config.add_view, view, '', None, None, object) - - def test_add_view_with_route_name(self): - from zope.component import ComponentLookupError - view = lambda *arg: 'OK' - config = self._makeOne() - config.add_view(view=view, route_name='foo') - self.assertEqual(len(config.registry.deferred_route_views), 1) - infos = config.registry.deferred_route_views['foo'] - self.assertEqual(len(infos), 1) - info = infos[0] - self.assertEqual(info['route_name'], 'foo') - self.assertEqual(info['view'], view) - self.assertRaises(ComponentLookupError, - self._getRouteRequestIface, config, 'foo') - wrapper = self._getViewCallable(config, None) - self.assertEqual(wrapper, None) - config.add_route('foo', '/a/b') - request_iface = self._getRouteRequestIface(config, 'foo') - self.failIfEqual(request_iface, None) - wrapper = self._getViewCallable(config, request_iface=request_iface) - self.failIfEqual(wrapper, None) - self.assertEqual(wrapper(None, None), 'OK') - - def test_deferred_route_views_retains_custom_predicates(self): - view = lambda *arg: 'OK' - config = self._makeOne() - config.add_view(view=view, route_name='foo', custom_predicates=('123',)) - self.assertEqual(len(config.registry.deferred_route_views), 1) - infos = config.registry.deferred_route_views['foo'] - self.assertEqual(len(infos), 1) - info = infos[0] - self.assertEqual(info['route_name'], 'foo') - self.assertEqual(info['custom_predicates'], ('123',)) - - def test_add_view_with_route_name_exception(self): - from zope.interface import implementedBy - from zope.component import ComponentLookupError - view = lambda *arg: 'OK' - config = self._makeOne() - config.add_view(view=view, route_name='foo', context=RuntimeError) - self.assertEqual(len(config.registry.deferred_route_views), 1) - infos = config.registry.deferred_route_views['foo'] - self.assertEqual(len(infos), 1) - info = infos[0] - self.assertEqual(info['route_name'], 'foo') - self.assertEqual(info['view'], view) - self.assertRaises(ComponentLookupError, - self._getRouteRequestIface, config, 'foo') - wrapper_exc_view = self._getViewCallable( - config, ctx_iface=implementedBy(RuntimeError), - exception_view=True) - self.assertEqual(wrapper_exc_view, None) - config.add_route('foo', '/a/b') - request_iface = self._getRouteRequestIface(config, 'foo') - self.failIfEqual(request_iface, None) - wrapper_exc_view = self._getViewCallable( - config, ctx_iface=implementedBy(RuntimeError), - request_iface=request_iface, exception_view=True) - self.failIfEqual(wrapper_exc_view, None) - wrapper = self._getViewCallable( - config, ctx_iface=implementedBy(RuntimeError), - request_iface=request_iface) - self.assertEqual(wrapper_exc_view, wrapper) - self.assertEqual(wrapper_exc_view(None, None), 'OK') - - def test_add_view_with_request_method_true(self): - view = lambda *arg: 'OK' - config = self._makeOne() - config.add_view(view=view, request_method='POST') - wrapper = self._getViewCallable(config) - request = self._makeRequest(config) - request.method = 'POST' - self.assertEqual(wrapper(None, request), 'OK') - - def test_add_view_with_request_method_false(self): - view = lambda *arg: 'OK' - config = self._makeOne() - config.add_view(view=view, request_method='POST') - wrapper = self._getViewCallable(config) - request = self._makeRequest(config) - request.method = 'GET' - self._assertNotFound(wrapper, None, request) - - def test_add_view_with_request_param_noval_true(self): - view = lambda *arg: 'OK' - config = self._makeOne() - config.add_view(view=view, request_param='abc') - wrapper = self._getViewCallable(config) - request = self._makeRequest(config) - request.params = {'abc':''} - self.assertEqual(wrapper(None, request), 'OK') - - def test_add_view_with_request_param_noval_false(self): - view = lambda *arg: 'OK' - config = self._makeOne() - config.add_view(view=view, request_param='abc') - wrapper = self._getViewCallable(config) - request = self._makeRequest(config) - request.params = {} - self._assertNotFound(wrapper, None, request) - - def test_add_view_with_request_param_val_true(self): - view = lambda *arg: 'OK' - config = self._makeOne() - config.add_view(view=view, request_param='abc=123') - wrapper = self._getViewCallable(config) - request = self._makeRequest(config) - request.params = {'abc':'123'} - self.assertEqual(wrapper(None, request), 'OK') - - def test_add_view_with_request_param_val_false(self): - view = lambda *arg: 'OK' - config = self._makeOne() - config.add_view(view=view, request_param='abc=123') - wrapper = self._getViewCallable(config) - request = self._makeRequest(config) - request.params = {'abc':''} - self._assertNotFound(wrapper, None, request) - - def test_add_view_with_xhr_true(self): - view = lambda *arg: 'OK' - config = self._makeOne() - config.add_view(view=view, xhr=True) - wrapper = self._getViewCallable(config) - request = self._makeRequest(config) - request.is_xhr = True - self.assertEqual(wrapper(None, request), 'OK') - - def test_add_view_with_xhr_false(self): - view = lambda *arg: 'OK' - config = self._makeOne() - config.add_view(view=view, xhr=True) - wrapper = self._getViewCallable(config) - request = self._makeRequest(config) - request.is_xhr = False - self._assertNotFound(wrapper, None, request) - - def test_add_view_with_header_badregex(self): - from repoze.bfg.exceptions import ConfigurationError - view = lambda *arg: 'OK' - config = self._makeOne() - self.assertRaises(ConfigurationError, - config.add_view, view=view, header='Host:a\\') - - def test_add_view_with_header_noval_match(self): - view = lambda *arg: 'OK' - config = self._makeOne() - config.add_view(view=view, header='Host') - wrapper = self._getViewCallable(config) - request = self._makeRequest(config) - request.headers = {'Host':'whatever'} - self.assertEqual(wrapper(None, request), 'OK') - - def test_add_view_with_header_noval_nomatch(self): - view = lambda *arg: 'OK' - config = self._makeOne() - config.add_view(view=view, header='Host') - wrapper = self._getViewCallable(config) - request = self._makeRequest(config) - request.headers = {'NotHost':'whatever'} - self._assertNotFound(wrapper, None, request) - - def test_add_view_with_header_val_match(self): - view = lambda *arg: 'OK' - config = self._makeOne() - config.add_view(view=view, header=r'Host:\d') - wrapper = self._getViewCallable(config) - request = self._makeRequest(config) - request.headers = {'Host':'1'} - self.assertEqual(wrapper(None, request), 'OK') - - def test_add_view_with_header_val_nomatch(self): - view = lambda *arg: 'OK' - config = self._makeOne() - config.add_view(view=view, header=r'Host:\d') - wrapper = self._getViewCallable(config) - request = self._makeRequest(config) - request.headers = {'Host':'abc'} - self._assertNotFound(wrapper, None, request) - - def test_add_view_with_header_val_missing(self): - from repoze.bfg.exceptions import NotFound - view = lambda *arg: 'OK' - config = self._makeOne() - config.add_view(view=view, header=r'Host:\d') - wrapper = self._getViewCallable(config) - request = self._makeRequest(config) - request.headers = {'NoHost':'1'} - self.assertRaises(NotFound, wrapper, None, request) - - def test_add_view_with_accept_match(self): - view = lambda *arg: 'OK' - config = self._makeOne() - config.add_view(view=view, accept='text/xml') - wrapper = self._getViewCallable(config) - request = self._makeRequest(config) - request.accept = ['text/xml'] - self.assertEqual(wrapper(None, request), 'OK') - - def test_add_view_with_accept_nomatch(self): - view = lambda *arg: 'OK' - config = self._makeOne() - config.add_view(view=view, accept='text/xml') - wrapper = self._getViewCallable(config) - request = self._makeRequest(config) - request.accept = ['text/html'] - self._assertNotFound(wrapper, None, request) - - def test_add_view_with_containment_true(self): - from zope.interface import directlyProvides - view = lambda *arg: 'OK' - config = self._makeOne() - config.add_view(view=view, containment=IDummy) - wrapper = self._getViewCallable(config) - context = DummyContext() - directlyProvides(context, IDummy) - self.assertEqual(wrapper(context, None), 'OK') - - def test_add_view_with_containment_false(self): - view = lambda *arg: 'OK' - config = self._makeOne() - config.add_view(view=view, containment=IDummy) - wrapper = self._getViewCallable(config) - context = DummyContext() - self._assertNotFound(wrapper, context, None) - - def test_add_view_with_containment_dottedname(self): - from zope.interface import directlyProvides - view = lambda *arg: 'OK' - config = self._makeOne() - config.add_view( - view=view, - containment='repoze.bfg.tests.test_configuration.IDummy') - wrapper = self._getViewCallable(config) - context = DummyContext() - directlyProvides(context, IDummy) - self.assertEqual(wrapper(context, None), 'OK') - - def test_add_view_with_path_info_badregex(self): - from repoze.bfg.exceptions import ConfigurationError - view = lambda *arg: 'OK' - config = self._makeOne() - self.assertRaises(ConfigurationError, - config.add_view, view=view, path_info='\\') - - def test_add_view_with_path_info_match(self): - view = lambda *arg: 'OK' - config = self._makeOne() - config.add_view(view=view, path_info='/foo') - wrapper = self._getViewCallable(config) - request = self._makeRequest(config) - request.path_info = '/foo' - self.assertEqual(wrapper(None, request), 'OK') - - def test_add_view_with_path_info_nomatch(self): - view = lambda *arg: 'OK' - config = self._makeOne() - config.add_view(view=view, path_info='/foo') - wrapper = self._getViewCallable(config) - request = self._makeRequest(config) - request.path_info = '/' - self._assertNotFound(wrapper, None, request) - - def test_add_view_with_custom_predicates_match(self): - view = lambda *arg: 'OK' - config = self._makeOne() - def pred1(context, request): - return True - def pred2(context, request): - return True - predicates = (pred1, pred2) - config.add_view(view=view, custom_predicates=predicates) - wrapper = self._getViewCallable(config) - request = self._makeRequest(config) - self.assertEqual(wrapper(None, request), 'OK') - - def test_add_view_with_custom_predicates_nomatch(self): - view = lambda *arg: 'OK' - config = self._makeOne() - def pred1(context, request): - return True - def pred2(context, request): - return False - predicates = (pred1, pred2) - config.add_view(view=view, custom_predicates=predicates) - wrapper = self._getViewCallable(config) - request = self._makeRequest(config) - self._assertNotFound(wrapper, None, request) - - def test_add_view_custom_predicate_bests_standard_predicate(self): - view = lambda *arg: 'OK' - view2 = lambda *arg: 'NOT OK' - config = self._makeOne() - def pred1(context, request): - return True - config.add_view(view=view, custom_predicates=(pred1,)) - config.add_view(view=view2, request_method='GET') - wrapper = self._getViewCallable(config) - request = self._makeRequest(config) - request.method = 'GET' - self.assertEqual(wrapper(None, request), 'OK') - - def test_add_view_custom_more_preds_first_bests_fewer_preds_last(self): - view = lambda *arg: 'OK' - view2 = lambda *arg: 'NOT OK' - config = self._makeOne() - config.add_view(view=view, request_method='GET', xhr=True) - config.add_view(view=view2, request_method='GET') - wrapper = self._getViewCallable(config) - request = self._makeRequest(config) - request.method = 'GET' - request.is_xhr = True - self.assertEqual(wrapper(None, request), 'OK') - - def test_add_view_same_predicates(self): - view2 = lambda *arg: 'second' - view1 = lambda *arg: 'first' - config = self._makeOne() - config.add_view(view=view1) - config.add_view(view=view2) - view = self._getViewCallable(config) - request = self._makeRequest(config) - self.assertEqual(view(None, request), 'second') - - def test_add_view_with_permission(self): - view1 = lambda *arg: 'OK' - outerself = self - class DummyPolicy(object): - def effective_principals(self, r): - outerself.assertEqual(r, request) - return ['abc'] - def permits(self, context, principals, permission): - outerself.assertEqual(context, None) - outerself.assertEqual(principals, ['abc']) - outerself.assertEqual(permission, 'view') - return True - policy = DummyPolicy() - config = self._makeOne(authorization_policy=policy, - authentication_policy=policy) - config.add_view(view=view1, permission='view') - view = self._getViewCallable(config) - request = self._makeRequest(config) - self.assertEqual(view(None, request), 'OK') - - def test_add_view_with_default_permission_no_explicit_permission(self): - view1 = lambda *arg: 'OK' - outerself = self - class DummyPolicy(object): - def effective_principals(self, r): - outerself.assertEqual(r, request) - return ['abc'] - def permits(self, context, principals, permission): - outerself.assertEqual(context, None) - outerself.assertEqual(principals, ['abc']) - outerself.assertEqual(permission, 'view') - return True - policy = DummyPolicy() - config = self._makeOne(authorization_policy=policy, - authentication_policy=policy, - default_permission='view') - config.add_view(view=view1) - view = self._getViewCallable(config) - request = self._makeRequest(config) - self.assertEqual(view(None, request), 'OK') - - def test_add_view_with_no_default_permission_no_explicit_permission(self): - view1 = lambda *arg: 'OK' - class DummyPolicy(object): pass # wont be called - policy = DummyPolicy() - config = self._makeOne(authorization_policy=policy, - authentication_policy=policy) - config.add_view(view=view1) - view = self._getViewCallable(config) - request = self._makeRequest(config) - self.assertEqual(view(None, request), 'OK') - - def _assertRoute(self, config, name, path, num_predicates=0): - from repoze.bfg.interfaces import IRoutesMapper - mapper = config.registry.getUtility(IRoutesMapper) - routes = mapper.get_routes() - route = routes[0] - self.assertEqual(len(routes), 1) - self.assertEqual(route.name, name) - self.assertEqual(route.path, path) - self.assertEqual(len(routes[0].predicates), num_predicates) - return route - - def test_get_routes_mapper_not_yet_registered(self): - config = self._makeOne() - mapper = config.get_routes_mapper() - self.assertEqual(mapper.routelist, []) - - def test_get_routes_mapper_already_registered(self): - from repoze.bfg.interfaces import IRoutesMapper - config = self._makeOne() - mapper = object() - config.registry.registerUtility(mapper, IRoutesMapper) - result = config.get_routes_mapper() - self.assertEqual(result, mapper) - - def test_add_route_defaults(self): - config = self._makeOne() - route = config.add_route('name', 'path') - self._assertRoute(config, 'name', 'path') - self.assertEqual(route.name, 'name') - - def test_add_route_with_factory(self): - config = self._makeOne() - factory = object() - route = config.add_route('name', 'path', factory=factory) - self.assertEqual(route.factory, factory) - - def test_add_route_with_factory_dottedname(self): - config = self._makeOne() - route = config.add_route( - 'name', 'path', - factory='repoze.bfg.tests.test_configuration.dummyfactory') - self.assertEqual(route.factory, dummyfactory) - - def test_add_route_with_xhr(self): - config = self._makeOne() - config.add_route('name', 'path', xhr=True) - route = self._assertRoute(config, 'name', 'path', 1) - predicate = route.predicates[0] - request = self._makeRequest(config) - request.is_xhr = True - self.assertEqual(predicate(None, request), True) - request = self._makeRequest(config) - request.is_xhr = False - self.assertEqual(predicate(None, request), False) - - def test_add_route_with_request_method(self): - config = self._makeOne() - config.add_route('name', 'path', request_method='GET') - route = self._assertRoute(config, 'name', 'path', 1) - predicate = route.predicates[0] - request = self._makeRequest(config) - request.method = 'GET' - self.assertEqual(predicate(None, request), True) - request = self._makeRequest(config) - request.method = 'POST' - self.assertEqual(predicate(None, request), False) - - def test_add_route_with_path_info(self): - config = self._makeOne() - config.add_route('name', 'path', path_info='/foo') - route = self._assertRoute(config, 'name', 'path', 1) - predicate = route.predicates[0] - request = self._makeRequest(config) - request.path_info = '/foo' - self.assertEqual(predicate(None, request), True) - request = self._makeRequest(config) - request.path_info = '/' - self.assertEqual(predicate(None, request), False) - - def test_add_route_with_request_param(self): - config = self._makeOne() - config.add_route('name', 'path', request_param='abc') - route = self._assertRoute(config, 'name', 'path', 1) - predicate = route.predicates[0] - request = self._makeRequest(config) - request.params = {'abc':'123'} - self.assertEqual(predicate(None, request), True) - request = self._makeRequest(config) - request.params = {} - self.assertEqual(predicate(None, request), False) - - def test_add_route_with_custom_predicates(self): - config = self._makeOne() - def pred1(context, request): pass - def pred2(context, request): pass - config.add_route('name', 'path', custom_predicates=(pred1, pred2)) - route = self._assertRoute(config, 'name', 'path', 2) - self.assertEqual(route.predicates, [pred1, pred2]) - - def test_add_route_with_header(self): - config = self._makeOne() - config.add_route('name', 'path', header='Host') - route = self._assertRoute(config, 'name', 'path', 1) - predicate = route.predicates[0] - request = self._makeRequest(config) - request.headers = {'Host':'example.com'} - self.assertEqual(predicate(None, request), True) - request = self._makeRequest(config) - request.headers = {} - self.assertEqual(predicate(None, request), False) - - def test_add_route_with_accept(self): - config = self._makeOne() - config.add_route('name', 'path', accept='text/xml') - route = self._assertRoute(config, 'name', 'path', 1) - predicate = route.predicates[0] - request = self._makeRequest(config) - request.accept = ['text/xml'] - self.assertEqual(predicate(None, request), True) - request = self._makeRequest(config) - request.accept = ['text/html'] - self.assertEqual(predicate(None, request), False) - - def test_add_route_with_view(self): - config = self._makeOne() - view = lambda *arg: 'OK' - config.add_route('name', 'path', view=view) - request_type = self._getRouteRequestIface(config, 'name') - wrapper = self._getViewCallable(config, None, request_type) - self.assertEqual(wrapper(None, None), 'OK') - self._assertRoute(config, 'name', 'path') - - def test_add_route_with_view_context(self): - config = self._makeOne() - view = lambda *arg: 'OK' - config.add_route('name', 'path', view=view, view_context=IDummy) - request_type = self._getRouteRequestIface(config, 'name') - wrapper = self._getViewCallable(config, IDummy, request_type) - self.assertEqual(wrapper(None, None), 'OK') - self._assertRoute(config, 'name', 'path') - wrapper = self._getViewCallable(config, IOther, request_type) - self.assertEqual(wrapper, None) - - def test_add_route_with_view_exception(self): - from zope.interface import implementedBy - config = self._makeOne() - view = lambda *arg: 'OK' - config.add_route('name', 'path', view=view, view_context=RuntimeError) - request_type = self._getRouteRequestIface(config, 'name') - wrapper = self._getViewCallable( - config, ctx_iface=implementedBy(RuntimeError), - request_iface=request_type, exception_view=True) - self.assertEqual(wrapper(None, None), 'OK') - self._assertRoute(config, 'name', 'path') - wrapper = self._getViewCallable( - config, ctx_iface=IOther, - request_iface=request_type, exception_view=True) - self.assertEqual(wrapper, None) - - def test_add_route_with_view_for(self): - config = self._makeOne() - view = lambda *arg: 'OK' - config.add_route('name', 'path', view=view, view_for=IDummy) - request_type = self._getRouteRequestIface(config, 'name') - wrapper = self._getViewCallable(config, IDummy, request_type) - self.assertEqual(wrapper(None, None), 'OK') - self._assertRoute(config, 'name', 'path') - wrapper = self._getViewCallable(config, IOther, request_type) - self.assertEqual(wrapper, None) - - def test_add_route_with_for_(self): - config = self._makeOne() - view = lambda *arg: 'OK' - config.add_route('name', 'path', view=view, for_=IDummy) - request_type = self._getRouteRequestIface(config, 'name') - wrapper = self._getViewCallable(config, IDummy, request_type) - self.assertEqual(wrapper(None, None), 'OK') - self._assertRoute(config, 'name', 'path') - wrapper = self._getViewCallable(config, IOther, request_type) - self.assertEqual(wrapper, None) - - def test_add_route_with_view_renderer(self): - config = self._makeOne() - self._registerRenderer(config) - view = lambda *arg: 'OK' - config.add_route('name', 'path', view=view, - view_renderer='fixtures/minimal.txt') - request_type = self._getRouteRequestIface(config, 'name') - wrapper = self._getViewCallable(config, None, request_type) - self._assertRoute(config, 'name', 'path') - self.assertEqual(wrapper(None, None).body, 'Hello!') - - def test_add_route_with_view_attr(self): - config = self._makeOne() - self._registerRenderer(config) - class View(object): - def __init__(self, context, request): - pass - def alt(self): - return 'OK' - config.add_route('name', 'path', view=View, view_attr='alt') - request_type = self._getRouteRequestIface(config, 'name') - wrapper = self._getViewCallable(config, None, request_type) - self._assertRoute(config, 'name', 'path') - self.assertEqual(wrapper(None, None), 'OK') - - def test_add_route_with_view_renderer_alias(self): - config = self._makeOne() - self._registerRenderer(config) - view = lambda *arg: 'OK' - config.add_route('name', 'path', view=view, - renderer='fixtures/minimal.txt') - request_type = self._getRouteRequestIface(config, 'name') - wrapper = self._getViewCallable(config, None, request_type) - self._assertRoute(config, 'name', 'path') - self.assertEqual(wrapper(None, None).body, 'Hello!') - - def test_add_route_with_view_permission(self): - from repoze.bfg.interfaces import IAuthenticationPolicy - from repoze.bfg.interfaces import IAuthorizationPolicy - config = self._makeOne() - policy = lambda *arg: None - config.registry.registerUtility(policy, IAuthenticationPolicy) - config.registry.registerUtility(policy, IAuthorizationPolicy) - view = lambda *arg: 'OK' - config.add_route('name', 'path', view=view, view_permission='edit') - request_type = self._getRouteRequestIface(config, 'name') - wrapper = self._getViewCallable(config, None, request_type) - self._assertRoute(config, 'name', 'path') - self.failUnless(hasattr(wrapper, '__call_permissive__')) - - def test_add_route_with_view_permission_alias(self): - from repoze.bfg.interfaces import IAuthenticationPolicy - from repoze.bfg.interfaces import IAuthorizationPolicy - config = self._makeOne() - policy = lambda *arg: None - config.registry.registerUtility(policy, IAuthenticationPolicy) - config.registry.registerUtility(policy, IAuthorizationPolicy) - view = lambda *arg: 'OK' - config.add_route('name', 'path', view=view, permission='edit') - request_type = self._getRouteRequestIface(config, 'name') - wrapper = self._getViewCallable(config, None, request_type) - self._assertRoute(config, 'name', 'path') - self.failUnless(hasattr(wrapper, '__call_permissive__')) - - def test_add_route_no_pattern_with_path(self): - config = self._makeOne() - route = config.add_route('name', path='path') - self._assertRoute(config, 'name', 'path') - self.assertEqual(route.name, 'name') - - def test_add_route_no_path_no_pattern(self): - from repoze.bfg.exceptions import ConfigurationError - config = self._makeOne() - self.assertRaises(ConfigurationError, config.add_route, 'name') - - def test_add_route_with_pregenerator(self): - config = self._makeOne() - route = config.add_route('name', 'pattern', pregenerator='123') - self.assertEqual(route.pregenerator, '123') - - def test__override_not_yet_registered(self): - from repoze.bfg.interfaces import IPackageOverrides - package = DummyPackage('package') - opackage = DummyPackage('opackage') - config = self._makeOne() - config._override(package, 'path', opackage, 'oprefix', - PackageOverrides=DummyOverrides) - overrides = config.registry.queryUtility(IPackageOverrides, - name='package') - self.assertEqual(overrides.inserted, [('path', 'opackage', 'oprefix')]) - self.assertEqual(overrides.package, package) - - def test__override_already_registered(self): - from repoze.bfg.interfaces import IPackageOverrides - package = DummyPackage('package') - opackage = DummyPackage('opackage') - overrides = DummyOverrides(package) - config = self._makeOne() - config.registry.registerUtility(overrides, IPackageOverrides, - name='package') - config._override(package, 'path', opackage, 'oprefix', - PackageOverrides=DummyOverrides) - self.assertEqual(overrides.inserted, [('path', 'opackage', 'oprefix')]) - self.assertEqual(overrides.package, package) - - def test_add_static_here_no_utility_registered(self): - from repoze.bfg.static import PackageURLParser - from zope.interface import implementedBy - from repoze.bfg.static import StaticURLInfo - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IViewClassifier - config = self._makeOne() - config.add_static_view('static', 'fixtures/static') - request_type = self._getRouteRequestIface(config, 'static/') - route = self._assertRoute(config, 'static/', 'static/*subpath') - self.assertEqual(route.factory.__class__, type(lambda x: x)) - iface = implementedBy(StaticURLInfo) - wrapped = config.registry.adapters.lookup( - (IViewClassifier, request_type, iface), IView, name='') - request = self._makeRequest(config) - self.assertEqual(wrapped(None, request).__class__, PackageURLParser) - - def test_add_static_view_package_relative(self): - from repoze.bfg.interfaces import IStaticURLInfo - info = DummyStaticURLInfo() - config = self._makeOne() - config.registry.registerUtility(info, IStaticURLInfo) - config.add_static_view('static', 'repoze.bfg.tests:fixtures/static') - self.assertEqual(info.added, - [('static', 'repoze.bfg.tests:fixtures/static', {})]) - - def test_add_static_view_package_here_relative(self): - from repoze.bfg.interfaces import IStaticURLInfo - info = DummyStaticURLInfo() - config = self._makeOne() - config.registry.registerUtility(info, IStaticURLInfo) - config.add_static_view('static', 'fixtures/static') - self.assertEqual(info.added, - [('static', 'repoze.bfg.tests:fixtures/static', {})]) - - def test_add_static_view_absolute(self): - import os - from repoze.bfg.interfaces import IStaticURLInfo - info = DummyStaticURLInfo() - config = self._makeOne() - config.registry.registerUtility(info, IStaticURLInfo) - here = os.path.dirname(__file__) - static_path = os.path.join(here, 'fixtures', 'static') - config.add_static_view('static', static_path) - self.assertEqual(info.added, - [('static', static_path, {})]) - - def test_set_notfound_view(self): - from zope.interface import implementedBy - from repoze.bfg.interfaces import IRequest - from repoze.bfg.exceptions import NotFound - config = self._makeOne() - view = lambda *arg: arg - config.set_notfound_view(view) - request = self._makeRequest(config) - view = self._getViewCallable(config, ctx_iface=implementedBy(NotFound), - request_iface=IRequest) - result = view(None, request) - self.assertEqual(result, (None, request)) - - def test_set_notfound_view_request_has_context(self): - from zope.interface import implementedBy - from repoze.bfg.interfaces import IRequest - from repoze.bfg.exceptions import NotFound - config = self._makeOne() - view = lambda *arg: arg - config.set_notfound_view(view) - request = self._makeRequest(config) - request.context = 'abc' - view = self._getViewCallable(config, ctx_iface=implementedBy(NotFound), - request_iface=IRequest) - result = view(None, request) - self.assertEqual(result, ('abc', request)) - - def test_set_forbidden_view(self): - from zope.interface import implementedBy - from repoze.bfg.interfaces import IRequest - from repoze.bfg.exceptions import Forbidden - config = self._makeOne() - view = lambda *arg: 'OK' - config.set_forbidden_view(view) - request = self._makeRequest(config) - view = self._getViewCallable(config, ctx_iface=implementedBy(Forbidden), - request_iface=IRequest) - result = view(None, request) - self.assertEqual(result, 'OK') - - def test_set_forbidden_view_request_has_context(self): - from zope.interface import implementedBy - from repoze.bfg.interfaces import IRequest - from repoze.bfg.exceptions import Forbidden - config = self._makeOne() - view = lambda *arg: arg - config.set_forbidden_view(view) - request = self._makeRequest(config) - request.context = 'abc' - view = self._getViewCallable(config, ctx_iface=implementedBy(Forbidden), - request_iface=IRequest) - result = view(None, request) - self.assertEqual(result, ('abc', request)) - - def test__set_authentication_policy(self): - from repoze.bfg.interfaces import IAuthenticationPolicy - config = self._makeOne() - policy = object() - config._set_authentication_policy(policy) - self.assertEqual( - config.registry.getUtility(IAuthenticationPolicy), policy) - - def test__set_authorization_policy(self): - from repoze.bfg.interfaces import IAuthorizationPolicy - config = self._makeOne() - policy = object() - config._set_authorization_policy(policy) - self.assertEqual( - config.registry.getUtility(IAuthorizationPolicy), policy) - - def test_set_locale_negotiator(self): - from repoze.bfg.interfaces import ILocaleNegotiator - config = self._makeOne() - def negotiator(request): pass - config.set_locale_negotiator(negotiator) - self.assertEqual(config.registry.getUtility(ILocaleNegotiator), - negotiator) - - def test_set_locale_negotiator_dottedname(self): - from repoze.bfg.interfaces import ILocaleNegotiator - config = self._makeOne() - config.set_locale_negotiator( - 'repoze.bfg.tests.test_configuration.dummyfactory') - self.assertEqual(config.registry.getUtility(ILocaleNegotiator), - dummyfactory) - - def test_set_request_factory(self): - from repoze.bfg.interfaces import IRequestFactory - config = self._makeOne() - factory = object() - config.set_request_factory(factory) - self.assertEqual(config.registry.getUtility(IRequestFactory), factory) - - def test_set_request_factory_dottedname(self): - from repoze.bfg.interfaces import IRequestFactory - config = self._makeOne() - config.set_request_factory( - 'repoze.bfg.tests.test_configuration.dummyfactory') - self.assertEqual(config.registry.getUtility(IRequestFactory), - dummyfactory) - - def test_set_renderer_globals_factory(self): - from repoze.bfg.interfaces import IRendererGlobalsFactory - config = self._makeOne() - factory = object() - config.set_renderer_globals_factory(factory) - self.assertEqual(config.registry.getUtility(IRendererGlobalsFactory), - factory) - - def test_set_renderer_globals_factory_dottedname(self): - from repoze.bfg.interfaces import IRendererGlobalsFactory - config = self._makeOne() - config.set_renderer_globals_factory( - 'repoze.bfg.tests.test_configuration.dummyfactory') - self.assertEqual(config.registry.getUtility(IRendererGlobalsFactory), - dummyfactory) - - def test_set_default_permission(self): - from repoze.bfg.interfaces import IDefaultPermission - config = self._makeOne() - config.set_default_permission('view') - self.assertEqual(config.registry.getUtility(IDefaultPermission), - 'view') - - def test_add_translation_dirs_missing_dir(self): - from repoze.bfg.exceptions import ConfigurationError - config = self._makeOne() - self.assertRaises(ConfigurationError, - config.add_translation_dirs, - '/wont/exist/on/my/system') - - def test_add_translation_dirs_resource_spec(self): - import os - from repoze.bfg.interfaces import ITranslationDirectories - config = self._makeOne() - config.add_translation_dirs('repoze.bfg.tests.localeapp:locale') - here = os.path.dirname(__file__) - locale = os.path.join(here, 'localeapp', 'locale') - self.assertEqual(config.registry.getUtility(ITranslationDirectories), - [locale]) - - def test_add_translation_dirs_registers_chameleon_translate(self): - from repoze.bfg.interfaces import IChameleonTranslate - from repoze.bfg.threadlocal import manager - request = DummyRequest() - config = self._makeOne() - manager.push({'request':request, 'registry':config.registry}) - try: - config.add_translation_dirs('repoze.bfg.tests.localeapp:locale') - translate = config.registry.getUtility(IChameleonTranslate) - self.assertEqual(translate('Approve'), u'Approve') - finally: - manager.pop() - - def test_add_translation_dirs_abspath(self): - import os - from repoze.bfg.interfaces import ITranslationDirectories - config = self._makeOne() - here = os.path.dirname(__file__) - locale = os.path.join(here, 'localeapp', 'locale') - config.add_translation_dirs(locale) - self.assertEqual(config.registry.getUtility(ITranslationDirectories), - [locale]) - - def test_derive_view_function(self): - def view(request): - return 'OK' - config = self._makeOne() - result = config.derive_view(view) - self.failIf(result is view) - self.assertEqual(result(None, None), 'OK') - - def test_derive_view_dottedname(self): - config = self._makeOne() - result = config.derive_view( - 'repoze.bfg.tests.test_configuration.dummy_view') - self.failIf(result is dummy_view) - self.assertEqual(result(None, None), 'OK') - - def test_derive_view_with_renderer(self): - def view(request): - return 'OK' - config = self._makeOne() - class moo(object): - def __init__(self, *arg, **kw): - pass - def __call__(self, *arg, **kw): - return 'moo' - config.add_renderer('moo', moo) - result = config.derive_view(view, renderer='moo') - self.failIf(result is view) - self.assertEqual(result(None, None).body, 'moo') - - def test_derive_view_class_without_attr(self): - class View(object): - def __init__(self, request): - pass - def __call__(self): - return 'OK' - config = self._makeOne() - result = config.derive_view(View) - self.assertEqual(result(None, None), 'OK') - - def test_derive_view_class_with_attr(self): - class View(object): - def __init__(self, request): - pass - def another(self): - return 'OK' - config = self._makeOne() - result = config.derive_view(View, attr='another') - self.assertEqual(result(None, None), 'OK') - - def test__derive_view_as_function_context_and_request(self): - def view(context, request): - return 'OK' - config = self._makeOne() - result = config._derive_view(view) - self.failUnless(result is view) - self.failIf(hasattr(result, '__call_permissive__')) - self.assertEqual(view(None, None), 'OK') - - def test__derive_view_as_function_requestonly(self): - def view(request): - return 'OK' - config = self._makeOne() - result = config._derive_view(view) - self.failIf(result is view) - self.assertEqual(view.__module__, result.__module__) - self.assertEqual(view.__doc__, result.__doc__) - self.assertEqual(view.__name__, result.__name__) - self.failIf(hasattr(result, '__call_permissive__')) - self.assertEqual(result(None, None), 'OK') - - def test__derive_view_as_newstyle_class_context_and_request(self): - class view(object): - def __init__(self, context, request): - pass - def __call__(self): - return 'OK' - config = self._makeOne() - result = config._derive_view(view) - self.failIf(result is view) - self.assertEqual(view.__module__, result.__module__) - self.assertEqual(view.__doc__, result.__doc__) - self.assertEqual(view.__name__, result.__name__) - self.failIf(hasattr(result, '__call_permissive__')) - self.assertEqual(result(None, None), 'OK') - - def test__derive_view_as_newstyle_class_requestonly(self): - class view(object): - def __init__(self, context, request): - pass - def __call__(self): - return 'OK' - config = self._makeOne() - result = config._derive_view(view) - self.failIf(result is view) - self.assertEqual(view.__module__, result.__module__) - self.assertEqual(view.__doc__, result.__doc__) - self.assertEqual(view.__name__, result.__name__) - self.failIf(hasattr(result, '__call_permissive__')) - self.assertEqual(result(None, None), 'OK') - - def test__derive_view_as_oldstyle_class_context_and_request(self): - class view: - def __init__(self, context, request): - pass - def __call__(self): - return 'OK' - config = self._makeOne() - result = config._derive_view(view) - self.failIf(result is view) - self.assertEqual(view.__module__, result.__module__) - self.assertEqual(view.__doc__, result.__doc__) - self.assertEqual(view.__name__, result.__name__) - self.failIf(hasattr(result, '__call_permissive__')) - self.assertEqual(result(None, None), 'OK') - - def test__derive_view_as_oldstyle_class_requestonly(self): - class view: - def __init__(self, context, request): - pass - def __call__(self): - return 'OK' - config = self._makeOne() - result = config._derive_view(view) - self.failIf(result is view) - self.assertEqual(view.__module__, result.__module__) - self.assertEqual(view.__doc__, result.__doc__) - self.assertEqual(view.__name__, result.__name__) - self.failIf(hasattr(result, '__call_permissive__')) - self.assertEqual(result(None, None), 'OK') - - def test__derive_view_as_instance_context_and_request(self): - class View: - def __call__(self, context, request): - return 'OK' - view = View() - config = self._makeOne() - result = config._derive_view(view) - self.failUnless(result is view) - self.failIf(hasattr(result, '__call_permissive__')) - self.assertEqual(result(None, None), 'OK') - - def test__derive_view_as_instance_requestonly(self): - class View: - def __call__(self, request): - return 'OK' - view = View() - config = self._makeOne() - result = config._derive_view(view) - self.failIf(result is view) - self.assertEqual(view.__module__, result.__module__) - self.assertEqual(view.__doc__, result.__doc__) - self.failUnless('instance' in result.__name__) - self.failIf(hasattr(result, '__call_permissive__')) - self.assertEqual(result(None, None), 'OK') - - def test__derive_view_with_debug_authorization_no_authpol(self): - view = lambda *arg: 'OK' - config = self._makeOne() - self._registerSettings(config, - debug_authorization=True, reload_templates=True) - logger = self._registerLogger(config) - result = config._derive_view(view, permission='view') - self.assertEqual(view.__module__, result.__module__) - self.assertEqual(view.__doc__, result.__doc__) - self.assertEqual(view.__name__, result.__name__) - self.failIf(hasattr(result, '__call_permissive__')) - request = self._makeRequest(config) - request.view_name = 'view_name' - request.url = 'url' - self.assertEqual(result(None, request), 'OK') - self.assertEqual(len(logger.messages), 1) - self.assertEqual(logger.messages[0], - "debug_authorization of url url (view name " - "'view_name' against context None): Allowed " - "(no authorization policy in use)") - - def test__derive_view_with_debug_authorization_no_permission(self): - view = lambda *arg: 'OK' - config = self._makeOne() - self._registerSettings(config, - debug_authorization=True, reload_templates=True) - self._registerSecurityPolicy(config, True) - logger = self._registerLogger(config) - result = config._derive_view(view) - self.assertEqual(view.__module__, result.__module__) - self.assertEqual(view.__doc__, result.__doc__) - self.assertEqual(view.__name__, result.__name__) - self.failIf(hasattr(result, '__call_permissive__')) - request = self._makeRequest(config) - request.view_name = 'view_name' - request.url = 'url' - self.assertEqual(result(None, request), 'OK') - self.assertEqual(len(logger.messages), 1) - self.assertEqual(logger.messages[0], - "debug_authorization of url url (view name " - "'view_name' against context None): Allowed (" - "no permission registered)") - - def test__derive_view_debug_auth_permission_authpol_permitted(self): - view = lambda *arg: 'OK' - config = self._makeOne() - self._registerSettings(config, debug_authorization=True, - reload_templates=True) - logger = self._registerLogger(config) - self._registerSecurityPolicy(config, True) - result = config._derive_view(view, permission='view') - self.assertEqual(view.__module__, result.__module__) - self.assertEqual(view.__doc__, result.__doc__) - self.assertEqual(view.__name__, result.__name__) - self.assertEqual(result.__call_permissive__, view) - request = self._makeRequest(config) - request.view_name = 'view_name' - request.url = 'url' - self.assertEqual(result(None, request), 'OK') - self.assertEqual(len(logger.messages), 1) - self.assertEqual(logger.messages[0], - "debug_authorization of url url (view name " - "'view_name' against context None): True") - - def test__derive_view_debug_auth_permission_authpol_denied(self): - from repoze.bfg.exceptions import Forbidden - view = lambda *arg: 'OK' - config = self._makeOne() - self._registerSettings(config, - debug_authorization=True, reload_templates=True) - logger = self._registerLogger(config) - self._registerSecurityPolicy(config, False) - result = config._derive_view(view, permission='view') - self.assertEqual(view.__module__, result.__module__) - self.assertEqual(view.__doc__, result.__doc__) - self.assertEqual(view.__name__, result.__name__) - self.assertEqual(result.__call_permissive__, view) - request = self._makeRequest(config) - request.view_name = 'view_name' - request.url = 'url' - self.assertRaises(Forbidden, result, None, request) - self.assertEqual(len(logger.messages), 1) - self.assertEqual(logger.messages[0], - "debug_authorization of url url (view name " - "'view_name' against context None): False") - - def test__derive_view_debug_auth_permission_authpol_denied2(self): - view = lambda *arg: 'OK' - config = self._makeOne() - self._registerSettings(config, - debug_authorization=True, reload_templates=True) - self._registerLogger(config) - self._registerSecurityPolicy(config, False) - result = config._derive_view(view, permission='view') - self.assertEqual(view.__module__, result.__module__) - self.assertEqual(view.__doc__, result.__doc__) - self.assertEqual(view.__name__, result.__name__) - request = self._makeRequest(config) - request.view_name = 'view_name' - request.url = 'url' - permitted = result.__permitted__(None, None) - self.assertEqual(permitted, False) - - def test__derive_view_with_predicates_all(self): - view = lambda *arg: 'OK' - predicates = [] - def predicate1(context, request): - predicates.append(True) - return True - def predicate2(context, request): - predicates.append(True) - return True - config = self._makeOne() - result = config._derive_view(view, predicates=[predicate1, predicate2]) - request = self._makeRequest(config) - request.method = 'POST' - next = result(None, None) - self.assertEqual(next, 'OK') - self.assertEqual(predicates, [True, True]) - - def test__derive_view_with_predicates_checker(self): - view = lambda *arg: 'OK' - predicates = [] - def predicate1(context, request): - predicates.append(True) - return True - def predicate2(context, request): - predicates.append(True) - return True - config = self._makeOne() - result = config._derive_view(view, predicates=[predicate1, predicate2]) - request = self._makeRequest(config) - request.method = 'POST' - next = result.__predicated__(None, None) - self.assertEqual(next, True) - self.assertEqual(predicates, [True, True]) - - def test__derive_view_with_predicates_notall(self): - from repoze.bfg.exceptions import NotFound - view = lambda *arg: 'OK' - predicates = [] - def predicate1(context, request): - predicates.append(True) - return True - def predicate2(context, request): - predicates.append(True) - return False - config = self._makeOne() - result = config._derive_view(view, predicates=[predicate1, predicate2]) - request = self._makeRequest(config) - request.method = 'POST' - self.assertRaises(NotFound, result, None, None) - self.assertEqual(predicates, [True, True]) - - def test__derive_view_with_wrapper_viewname(self): - from webob import Response - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IViewClassifier - inner_response = Response('OK') - def inner_view(context, request): - return inner_response - def outer_view(context, request): - self.assertEqual(request.wrapped_response, inner_response) - self.assertEqual(request.wrapped_body, inner_response.body) - self.assertEqual(request.wrapped_view, inner_view) - return Response('outer ' + request.wrapped_body) - config = self._makeOne() - config.registry.registerAdapter( - outer_view, (IViewClassifier, None, None), IView, 'owrap') - result = config._derive_view(inner_view, viewname='inner', - wrapper_viewname='owrap') - self.failIf(result is inner_view) - self.assertEqual(inner_view.__module__, result.__module__) - self.assertEqual(inner_view.__doc__, result.__doc__) - request = self._makeRequest(config) - request.registry = config.registry - response = result(None, request) - self.assertEqual(response.body, 'outer OK') - - def test__derive_view_with_wrapper_viewname_notfound(self): - from webob import Response - inner_response = Response('OK') - def inner_view(context, request): - return inner_response - config = self._makeOne() - request = self._makeRequest(config) - request.registry = config.registry - wrapped = config._derive_view( - inner_view, viewname='inner', wrapper_viewname='owrap') - self.assertRaises(ValueError, wrapped, None, request) - - def test_override_resource_samename(self): - from repoze.bfg.exceptions import ConfigurationError - config = self._makeOne() - self.assertRaises(ConfigurationError, config.override_resource,'a', 'a') - - def test_override_resource_directory_with_file(self): - from repoze.bfg.exceptions import ConfigurationError - config = self._makeOne() - self.assertRaises(ConfigurationError, config.override_resource, - 'a:foo/', 'a:foo.pt') - - def test_override_resource_file_with_directory(self): - from repoze.bfg.exceptions import ConfigurationError - config = self._makeOne() - self.assertRaises(ConfigurationError, config.override_resource, - 'a:foo.pt', 'a:foo/') - - def test_override_resource_success(self): - config = self._makeOne() - override = DummyUnderOverride() - config.override_resource( - 'repoze.bfg.tests.fixtureapp:templates/foo.pt', - 'repoze.bfg.tests.fixtureapp.subpackage:templates/bar.pt', - _override=override) - from repoze.bfg.tests import fixtureapp - from repoze.bfg.tests.fixtureapp import subpackage - self.assertEqual(override.package, fixtureapp) - self.assertEqual(override.path, 'templates/foo.pt') - self.assertEqual(override.override_package, subpackage) - self.assertEqual(override.override_prefix, 'templates/bar.pt') - - def test_add_renderer(self): - from repoze.bfg.interfaces import IRendererFactory - config = self._makeOne() - renderer = object() - config.add_renderer('name', renderer) - self.assertEqual(config.registry.getUtility(IRendererFactory, 'name'), - renderer) - - def test_add_renderer_dottedname_factory(self): - from repoze.bfg.interfaces import IRendererFactory - config = self._makeOne() - import repoze.bfg.tests - config.add_renderer('name', 'repoze.bfg.tests') - self.assertEqual(config.registry.getUtility(IRendererFactory, 'name'), - repoze.bfg.tests) - - def test_scan_integration(self): - from zope.interface import alsoProvides - from repoze.bfg.interfaces import IRequest - from repoze.bfg.view import render_view_to_response - import repoze.bfg.tests.grokkedapp as package - config = self._makeOne() - config.scan(package) - - ctx = DummyContext() - req = DummyRequest() - alsoProvides(req, IRequest) - req.registry = config.registry - - req.method = 'GET' - result = render_view_to_response(ctx, req, '') - self.assertEqual(result, 'grokked') - - req.method = 'POST' - result = render_view_to_response(ctx, req, '') - self.assertEqual(result, 'grokked_post') - - result= render_view_to_response(ctx, req, 'grokked_class') - self.assertEqual(result, 'grokked_class') - - result= render_view_to_response(ctx, req, 'grokked_instance') - self.assertEqual(result, 'grokked_instance') - - result= render_view_to_response(ctx, req, 'oldstyle_grokked_class') - self.assertEqual(result, 'oldstyle_grokked_class') - - req.method = 'GET' - result = render_view_to_response(ctx, req, 'another') - self.assertEqual(result, 'another_grokked') - - req.method = 'POST' - result = render_view_to_response(ctx, req, 'another') - self.assertEqual(result, 'another_grokked_post') - - result= render_view_to_response(ctx, req, 'another_grokked_class') - self.assertEqual(result, 'another_grokked_class') - - result= render_view_to_response(ctx, req, 'another_grokked_instance') - self.assertEqual(result, 'another_grokked_instance') - - result= render_view_to_response(ctx, req, - 'another_oldstyle_grokked_class') - self.assertEqual(result, 'another_oldstyle_grokked_class') - - result = render_view_to_response(ctx, req, 'stacked1') - self.assertEqual(result, 'stacked') - - result = render_view_to_response(ctx, req, 'stacked2') - self.assertEqual(result, 'stacked') - - result = render_view_to_response(ctx, req, 'another_stacked1') - self.assertEqual(result, 'another_stacked') - - result = render_view_to_response(ctx, req, 'another_stacked2') - self.assertEqual(result, 'another_stacked') - - result = render_view_to_response(ctx, req, 'stacked_class1') - self.assertEqual(result, 'stacked_class') - - result = render_view_to_response(ctx, req, 'stacked_class2') - self.assertEqual(result, 'stacked_class') - - result = render_view_to_response(ctx, req, 'another_stacked_class1') - self.assertEqual(result, 'another_stacked_class') - - result = render_view_to_response(ctx, req, 'another_stacked_class2') - self.assertEqual(result, 'another_stacked_class') - - self.assertRaises(TypeError, - render_view_to_response, ctx, req, 'basemethod') - - result = render_view_to_response(ctx, req, 'method1') - self.assertEqual(result, 'method1') - - result = render_view_to_response(ctx, req, 'method2') - self.assertEqual(result, 'method2') - - result = render_view_to_response(ctx, req, 'stacked_method1') - self.assertEqual(result, 'stacked_method') - - result = render_view_to_response(ctx, req, 'stacked_method2') - self.assertEqual(result, 'stacked_method') - - result = render_view_to_response(ctx, req, 'subpackage_init') - self.assertEqual(result, 'subpackage_init') - - result = render_view_to_response(ctx, req, 'subpackage_notinit') - self.assertEqual(result, 'subpackage_notinit') - - result = render_view_to_response(ctx, req, 'subsubpackage_init') - self.assertEqual(result, 'subsubpackage_init') - - result = render_view_to_response(ctx, req, 'pod_notinit') - self.assertEqual(result, None) - - def test_scan_integration_dottedname_package(self): - from zope.interface import alsoProvides - from repoze.bfg.interfaces import IRequest - from repoze.bfg.view import render_view_to_response - config = self._makeOne() - config.scan('repoze.bfg.tests.grokkedapp') - - ctx = DummyContext() - req = DummyRequest() - alsoProvides(req, IRequest) - req.registry = config.registry - - req.method = 'GET' - result = render_view_to_response(ctx, req, '') - self.assertEqual(result, 'grokked') - - def test_testing_securitypolicy(self): - from repoze.bfg.testing import DummySecurityPolicy - config = self._makeOne() - config.testing_securitypolicy('user', ('group1', 'group2'), - permissive=False) - from repoze.bfg.interfaces import IAuthenticationPolicy - from repoze.bfg.interfaces import IAuthorizationPolicy - ut = config.registry.getUtility(IAuthenticationPolicy) - self.failUnless(isinstance(ut, DummySecurityPolicy)) - ut = config.registry.getUtility(IAuthorizationPolicy) - self.assertEqual(ut.userid, 'user') - self.assertEqual(ut.groupids, ('group1', 'group2')) - self.assertEqual(ut.permissive, False) - - def test_testing_models(self): - from repoze.bfg.traversal import find_model - from repoze.bfg.interfaces import ITraverser - ob1 = object() - ob2 = object() - models = {'/ob1':ob1, '/ob2':ob2} - config = self._makeOne() - config.testing_models(models) - adapter = config.registry.getAdapter(None, ITraverser) - result = adapter({'PATH_INFO':'/ob1'}) - self.assertEqual(result['context'], ob1) - self.assertEqual(result['view_name'], '') - self.assertEqual(result['subpath'], ()) - self.assertEqual(result['traversed'], (u'ob1',)) - self.assertEqual(result['virtual_root'], ob1) - self.assertEqual(result['virtual_root_path'], ()) - result = adapter({'PATH_INFO':'/ob2'}) - self.assertEqual(result['context'], ob2) - self.assertEqual(result['view_name'], '') - self.assertEqual(result['subpath'], ()) - self.assertEqual(result['traversed'], (u'ob2',)) - self.assertEqual(result['virtual_root'], ob2) - self.assertEqual(result['virtual_root_path'], ()) - self.assertRaises(KeyError, adapter, {'PATH_INFO':'/ob3'}) - try: - config.begin() - self.assertEqual(find_model(None, '/ob1'), ob1) - finally: - config.end() - - def test_testing_add_subscriber_single(self): - config = self._makeOne() - L = config.testing_add_subscriber(IDummy) - event = DummyEvent() - config.registry.notify(event) - self.assertEqual(len(L), 1) - self.assertEqual(L[0], event) - config.registry.notify(object()) - self.assertEqual(len(L), 1) - - def test_testing_add_subscriber_dottedname(self): - config = self._makeOne() - L = config.testing_add_subscriber( - 'repoze.bfg.tests.test_configuration.IDummy') - event = DummyEvent() - config.registry.notify(event) - self.assertEqual(len(L), 1) - self.assertEqual(L[0], event) - config.registry.notify(object()) - self.assertEqual(len(L), 1) - - def test_testing_add_subscriber_multiple(self): - config = self._makeOne() - L = config.testing_add_subscriber((Interface, IDummy)) - event = DummyEvent() - event.object = 'foo' - # the below is the equivalent of z.c.event.objectEventNotify(event) - config.registry.subscribers((event.object, event), None) - self.assertEqual(len(L), 2) - self.assertEqual(L[0], 'foo') - self.assertEqual(L[1], event) - - def test_testing_add_subscriber_defaults(self): - config = self._makeOne() - L = config.testing_add_subscriber() - event = object() - config.registry.notify(event) - self.assertEqual(L[-1], event) - event2 = object() - config.registry.notify(event2) - self.assertEqual(L[-1], event2) - - def test_hook_zca(self): - from repoze.bfg.threadlocal import get_current_registry - gsm = DummyGetSiteManager() - config = self._makeOne() - config.hook_zca(getSiteManager=gsm) - self.assertEqual(gsm.hook, get_current_registry) - - def test_unhook_zca(self): - gsm = DummyGetSiteManager() - config = self._makeOne() - config.unhook_zca(getSiteManager=gsm) - self.assertEqual(gsm.unhooked, True) - - def test_testing_add_renderer(self): - config = self._makeOne() - renderer = config.testing_add_renderer('templates/foo.pt') - from repoze.bfg.testing import DummyTemplateRenderer - self.failUnless(isinstance(renderer, DummyTemplateRenderer)) - from repoze.bfg.renderers import render_to_response - # must provide request to pass in registry (this is a functest) - request = DummyRequest() - request.registry = config.registry - render_to_response( - 'templates/foo.pt', {'foo':1, 'bar':2}, request=request) - renderer.assert_(foo=1) - renderer.assert_(bar=2) - renderer.assert_(request=request) - - def test_testing_add_renderer_explicitrenderer(self): - config = self._makeOne() - class E(Exception): pass - def renderer(kw, system): - self.assertEqual(kw, {'foo':1, 'bar':2}) - raise E - renderer = config.testing_add_renderer('templates/foo.pt', renderer) - from repoze.bfg.renderers import render_to_response - # must provide request to pass in registry (this is a functest) - request = DummyRequest() - request.registry = config.registry - try: - render_to_response( - 'templates/foo.pt', {'foo':1, 'bar':2}, request=request) - except E: - pass - else: # pragma: no cover - raise AssertionError - - def test_testing_add_template(self): - config = self._makeOne() - renderer = config.testing_add_template('templates/foo.pt') - from repoze.bfg.testing import DummyTemplateRenderer - self.failUnless(isinstance(renderer, DummyTemplateRenderer)) - from repoze.bfg.renderers import render_to_response - # must provide request to pass in registry (this is a functest) - request = DummyRequest() - request.registry = config.registry - render_to_response('templates/foo.pt', dict(foo=1, bar=2), - request=request) - renderer.assert_(foo=1) - renderer.assert_(bar=2) - renderer.assert_(request=request) - -class Test__map_view(unittest.TestCase): - def setUp(self): - from repoze.bfg.registry import Registry - self.registry = Registry() - testing.setUp(registry=self.registry) - - def tearDown(self): - del self.registry - testing.tearDown() - - def _registerRenderer(self, typ='.txt'): - from repoze.bfg.interfaces import IRendererFactory - from repoze.bfg.interfaces import ITemplateRenderer - from zope.interface import implements - class Renderer: - implements(ITemplateRenderer) - spec = 'abc' + typ - def __init__(self, path): - self.__class__.path = path - def __call__(self, *arg): - return 'Hello!' - self.registry.registerUtility(Renderer, IRendererFactory, name=typ) - return Renderer - - def _makeRequest(self): - request = DummyRequest() - request.registry = self.registry - return request - - def _callFUT(self, *arg, **kw): - from repoze.bfg.configuration import _map_view - return _map_view(*arg, **kw) - - def test__map_view_as_function_context_and_request(self): - def view(context, request): - return 'OK' - result = self._callFUT(view) - self.failUnless(result is view) - self.assertEqual(result(None, None), 'OK') - - def test__map_view_as_function_with_attr(self): - def view(context, request): - """ """ - result = self._callFUT(view, attr='__name__') - self.failIf(result is view) - self.assertRaises(TypeError, result, None, None) - - def test__map_view_as_function_with_attr_and_renderer(self): - renderer = self._registerRenderer() - view = lambda *arg: 'OK' - result = self._callFUT(view, attr='__name__', - renderer_name=renderer.spec) - self.failIf(result is view) - self.assertRaises(TypeError, result, None, None) - - def test__map_view_as_function_requestonly(self): - def view(request): - return 'OK' - result = self._callFUT(view) - self.failIf(result is view) - self.assertEqual(view.__module__, result.__module__) - self.assertEqual(view.__doc__, result.__doc__) - self.assertEqual(view.__name__, result.__name__) - self.assertEqual(result(None, None), 'OK') - - def test__map_view_as_function_requestonly_with_attr(self): - def view(request): - """ """ - result = self._callFUT(view, attr='__name__') - self.failIf(result is view) - self.assertEqual(view.__module__, result.__module__) - self.assertEqual(view.__doc__, result.__doc__) - self.assertEqual(view.__name__, result.__name__) - self.assertRaises(TypeError, result, None, None) - - def test__map_view_as_newstyle_class_context_and_request(self): - class view(object): - def __init__(self, context, request): - pass - def __call__(self): - return 'OK' - result = self._callFUT(view) - self.failIf(result is view) - self.assertEqual(view.__module__, result.__module__) - self.assertEqual(view.__doc__, result.__doc__) - self.assertEqual(view.__name__, result.__name__) - self.assertEqual(result(None, None), 'OK') - - def test__map_view_as_newstyle_class_context_and_request_with_attr(self): - class view(object): - def __init__(self, context, request): - pass - def index(self): - return 'OK' - result = self._callFUT(view, attr='index') - self.failIf(result is view) - self.assertEqual(view.__module__, result.__module__) - self.assertEqual(view.__doc__, result.__doc__) - self.assertEqual(view.__name__, result.__name__) - self.assertEqual(result(None, None), 'OK') - - def test__map_view_as_newstyle_class_context_and_request_attr_and_renderer( - self): - renderer = self._registerRenderer() - class view(object): - def __init__(self, context, request): - pass - def index(self): - return {'a':'1'} - result = self._callFUT(view, attr='index', renderer_name=renderer.spec) - self.failIf(result is view) - self.assertEqual(view.__module__, result.__module__) - self.assertEqual(view.__doc__, result.__doc__) - self.assertEqual(view.__name__, result.__name__) - request = self._makeRequest() - self.assertEqual(result(None, request).body, 'Hello!') - - def test__map_view_as_newstyle_class_requestonly(self): - class view(object): - def __init__(self, request): - pass - def __call__(self): - return 'OK' - result = self._callFUT(view) - self.failIf(result is view) - self.assertEqual(view.__module__, result.__module__) - self.assertEqual(view.__doc__, result.__doc__) - self.assertEqual(view.__name__, result.__name__) - self.assertEqual(result(None, None), 'OK') - - def test__map_view_as_newstyle_class_requestonly_with_attr(self): - class view(object): - def __init__(self, request): - pass - def index(self): - return 'OK' - result = self._callFUT(view, attr='index') - self.failIf(result is view) - self.assertEqual(view.__module__, result.__module__) - self.assertEqual(view.__doc__, result.__doc__) - self.assertEqual(view.__name__, result.__name__) - self.assertEqual(result(None, None), 'OK') - - def test__map_view_as_newstyle_class_requestonly_attr_and_renderer(self): - renderer = self._registerRenderer() - class view(object): - def __init__(self, request): - pass - def index(self): - return {'a':'1'} - result = self._callFUT(view, attr='index', renderer_name=renderer.spec) - self.failIf(result is view) - self.assertEqual(view.__module__, result.__module__) - self.assertEqual(view.__doc__, result.__doc__) - self.assertEqual(view.__name__, result.__name__) - request = self._makeRequest() - self.assertEqual(result(None, request).body, 'Hello!') - - def test__map_view_as_oldstyle_class_context_and_request(self): - class view: - def __init__(self, context, request): - pass - def __call__(self): - return 'OK' - result = self._callFUT(view) - self.failIf(result is view) - self.assertEqual(view.__module__, result.__module__) - self.assertEqual(view.__doc__, result.__doc__) - self.assertEqual(view.__name__, result.__name__) - self.assertEqual(result(None, None), 'OK') - - def test__map_view_as_oldstyle_class_context_and_request_with_attr(self): - class view: - def __init__(self, context, request): - pass - def index(self): - return 'OK' - result = self._callFUT(view, attr='index') - self.failIf(result is view) - self.assertEqual(view.__module__, result.__module__) - self.assertEqual(view.__doc__, result.__doc__) - self.assertEqual(view.__name__, result.__name__) - self.assertEqual(result(None, None), 'OK') - - def test__map_view_as_oldstyle_cls_context_request_attr_and_renderer(self): - renderer = self._registerRenderer() - class view: - def __init__(self, context, request): - pass - def index(self): - return {'a':'1'} - result = self._callFUT(view, attr='index', renderer_name=renderer.spec) - self.failIf(result is view) - self.assertEqual(view.__module__, result.__module__) - self.assertEqual(view.__doc__, result.__doc__) - self.assertEqual(view.__name__, result.__name__) - request = self._makeRequest() - self.assertEqual(result(None, request).body, 'Hello!') - - def test__map_view_as_oldstyle_class_requestonly(self): - class view: - def __init__(self, request): - pass - def __call__(self): - return 'OK' - result = self._callFUT(view) - self.failIf(result is view) - self.assertEqual(view.__module__, result.__module__) - self.assertEqual(view.__doc__, result.__doc__) - self.assertEqual(view.__name__, result.__name__) - self.assertEqual(result(None, None), 'OK') - - def test__map_view_as_oldstyle_class_requestonly_with_attr(self): - class view: - def __init__(self, request): - pass - def index(self): - return 'OK' - result = self._callFUT(view, attr='index') - self.failIf(result is view) - self.assertEqual(view.__module__, result.__module__) - self.assertEqual(view.__doc__, result.__doc__) - self.assertEqual(view.__name__, result.__name__) - self.assertEqual(result(None, None), 'OK') - - def test__map_view_as_oldstyle_class_requestonly_attr_and_renderer(self): - renderer = self._registerRenderer() - class view: - def __init__(self, request): - pass - def index(self): - return {'a':'1'} - result = self._callFUT(view, attr='index', renderer_name=renderer.spec) - self.failIf(result is view) - self.assertEqual(view.__module__, result.__module__) - self.assertEqual(view.__doc__, result.__doc__) - self.assertEqual(view.__name__, result.__name__) - request = self._makeRequest() - self.assertEqual(result(None, request).body, 'Hello!') - - def test__map_view_as_instance_context_and_request(self): - class View: - def __call__(self, context, request): - return 'OK' - view = View() - result = self._callFUT(view) - self.failUnless(result is view) - self.assertEqual(result(None, None), 'OK') - - def test__map_view_as_instance_context_and_request_and_attr(self): - class View: - def index(self, context, request): - return 'OK' - view = View() - result = self._callFUT(view, attr='index') - self.failIf(result is view) - self.assertEqual(result(None, None), 'OK') - - def test__map_view_as_instance_context_and_request_attr_and_renderer(self): - renderer = self._registerRenderer() - class View: - def index(self, context, request): - return {'a':'1'} - view = View() - result = self._callFUT(view, attr='index', renderer_name=renderer.spec) - self.failIf(result is view) - request = self._makeRequest() - self.assertEqual(result(None, request).body, 'Hello!') - - def test__map_view_as_instance_requestonly(self): - class View: - def __call__(self, request): - return 'OK' - view = View() - result = self._callFUT(view) - self.failIf(result is view) - self.assertEqual(view.__module__, result.__module__) - self.assertEqual(view.__doc__, result.__doc__) - self.failUnless('instance' in result.__name__) - self.assertEqual(result(None, None), 'OK') - - def test__map_view_as_instance_requestonly_with_attr(self): - class View: - def index(self, request): - return 'OK' - view = View() - result = self._callFUT(view, attr='index') - self.failIf(result is view) - self.assertEqual(view.__module__, result.__module__) - self.assertEqual(view.__doc__, result.__doc__) - self.failUnless('instance' in result.__name__) - self.assertEqual(result(None, None), 'OK') - - def test__map_view_as_instance_requestonly_with_attr_and_renderer(self): - renderer = self._registerRenderer() - class View: - def index(self, request): - return {'a':'1'} - view = View() - result = self._callFUT(view, attr='index', renderer_name=renderer.spec) - self.failIf(result is view) - self.assertEqual(view.__module__, result.__module__) - self.assertEqual(view.__doc__, result.__doc__) - self.failUnless('instance' in result.__name__) - request = self._makeRequest() - self.assertEqual(result(None, request).body, 'Hello!') - - def test__map_view_rendereronly(self): - renderer = self._registerRenderer() - def view(context, request): - return {'a':'1'} - result = self._callFUT(view, renderer_name=renderer.spec) - self.failIf(result is view) - self.assertEqual(view.__module__, result.__module__) - self.assertEqual(view.__doc__, result.__doc__) - request = self._makeRequest() - self.assertEqual(result(None, request).body, 'Hello!') - - def test__map_view_with_registry(self): - renderer = self._registerRenderer() - def view(context, request): - return {'a':'1'} - result = self._callFUT(view, renderer_name=renderer.spec, - registry=self.registry) - self.failIf(result is view) - self.assertEqual(view.__module__, result.__module__) - self.assertEqual(view.__doc__, result.__doc__) - request = self._makeRequest() - self.assertEqual(result(None, request).body, 'Hello!') - - def test__map_view_with_package(self): - renderer = self._registerRenderer() - def view(context, request): - return {'a':'1'} - result = self._callFUT(view, renderer_name=renderer.spec, - package='repoze.bfg') - self.failIf(result is view) - self.assertEqual(view.__module__, result.__module__) - self.assertEqual(view.__doc__, result.__doc__) - request = self._makeRequest() - self.assertEqual(result(None, request).body, 'Hello!') - self.assertEqual(renderer.path, 'repoze.bfg:abc.txt') - -class Test_decorate_view(unittest.TestCase): - def _callFUT(self, wrapped, original): - from repoze.bfg.configuration import decorate_view - return decorate_view(wrapped, original) - - def test_it_same(self): - def view(context, request): - """ """ - result = self._callFUT(view, view) - self.assertEqual(result, False) - - def test_it_different(self): - class DummyView1: - """ 1 """ - __name__ = '1' - __module__ = '1' - def __call__(self, context, request): - """ """ - def __call_permissive__(self, context, reuqest): - """ """ - def __predicated__(self, context, reuqest): - """ """ - def __permitted__(self, context, request): - """ """ - class DummyView2: - """ 2 """ - __name__ = '2' - __module__ = '2' - def __call__(self, context, request): - """ """ - def __call_permissive__(self, context, reuqest): - """ """ - def __predicated__(self, context, reuqest): - """ """ - def __permitted__(self, context, request): - """ """ - view1 = DummyView1() - view2 = DummyView2() - result = self._callFUT(view1, view2) - self.assertEqual(result, True) - self.failUnless(view1.__doc__ is view2.__doc__) - self.failUnless(view1.__module__ is view2.__module__) - self.failUnless(view1.__name__ is view2.__name__) - self.failUnless(view1.__call_permissive__.im_func is - view2.__call_permissive__.im_func) - self.failUnless(view1.__permitted__.im_func is - view2.__permitted__.im_func) - self.failUnless(view1.__predicated__.im_func is - view2.__predicated__.im_func) - -class Test__make_predicates(unittest.TestCase): - def _callFUT(self, **kw): - from repoze.bfg.configuration import _make_predicates - return _make_predicates(**kw) - - def test_ordering_xhr_and_request_method_trump_only_containment(self): - order1, _, _ = self._callFUT(xhr=True, request_method='GET') - order2, _, _ = self._callFUT(containment=True) - self.failUnless(order1 < order2) - - def test_ordering_number_of_predicates(self): - order1, _, _ = self._callFUT( - xhr='xhr', - request_method='request_method', - path_info='path_info', - request_param='param', - header='header', - accept='accept', - containment='containment', - request_type='request_type', - custom=('a',) - ) - order2, _, _ = self._callFUT( - xhr='xhr', - request_method='request_method', - path_info='path_info', - request_param='param', - header='header', - accept='accept', - containment='containment', - request_type='request_type', - custom=('a',) - ) - order3, _, _ = self._callFUT( - xhr='xhr', - request_method='request_method', - path_info='path_info', - request_param='param', - header='header', - accept='accept', - containment='containment', - request_type='request_type', - ) - order4, _, _ = self._callFUT( - xhr='xhr', - request_method='request_method', - path_info='path_info', - request_param='param', - header='header', - accept='accept', - containment='containment', - ) - order5, _, _ = self._callFUT( - xhr='xhr', - request_method='request_method', - path_info='path_info', - request_param='param', - header='header', - accept='accept', - ) - order6, _, _ = self._callFUT( - xhr='xhr', - request_method='request_method', - path_info='path_info', - request_param='param', - header='header', - ) - order7, _, _ = self._callFUT( - xhr='xhr', - request_method='request_method', - path_info='path_info', - request_param='param', - ) - order8, _, _ = self._callFUT( - xhr='xhr', - request_method='request_method', - path_info='path_info', - ) - order9, _, _ = self._callFUT( - xhr='xhr', - request_method='request_method', - ) - order10, _, _ = self._callFUT( - xhr='xhr', - ) - order11, _, _ = self._callFUT( - ) - self.assertEqual(order1, order2) - self.failUnless(order3 > order2) - self.failUnless(order4 > order3) - self.failUnless(order5 > order4) - self.failUnless(order6 > order5) - self.failUnless(order7 > order6) - self.failUnless(order8 > order7) - self.failUnless(order9 > order8) - self.failUnless(order10 > order9) - self.failUnless(order11 > order10) - - def test_ordering_importance_of_predicates(self): - order1, _, _ = self._callFUT( - xhr='xhr', - ) - order2, _, _ = self._callFUT( - request_method='request_method', - ) - order3, _, _ = self._callFUT( - path_info='path_info', - ) - order4, _, _ = self._callFUT( - request_param='param', - ) - order5, _, _ = self._callFUT( - header='header', - ) - order6, _, _ = self._callFUT( - accept='accept', - ) - order7, _, _ = self._callFUT( - containment='containment', - ) - order8, _, _ = self._callFUT( - request_type='request_type', - ) - order9, _, _ = self._callFUT( - custom=('a',), - ) - self.failUnless(order1 > order2) - self.failUnless(order2 > order3) - self.failUnless(order3 > order4) - self.failUnless(order4 > order5) - self.failUnless(order5 > order6) - self.failUnless(order6 > order7) - self.failUnless(order7 > order8) - self.failUnless(order8 > order9) - - def test_ordering_importance_and_number(self): - order1, _, _ = self._callFUT( - xhr='xhr', - request_method='request_method', - ) - order2, _, _ = self._callFUT( - custom=('a',), - ) - self.failUnless(order1 < order2) - - order1, _, _ = self._callFUT( - xhr='xhr', - request_method='request_method', - ) - order2, _, _ = self._callFUT( - request_method='request_method', - custom=('a',), - ) - self.failUnless(order1 > order2) - - order1, _, _ = self._callFUT( - xhr='xhr', - request_method='request_method', - path_info='path_info', - ) - order2, _, _ = self._callFUT( - request_method='request_method', - custom=('a',), - ) - self.failUnless(order1 < order2) - - order1, _, _ = self._callFUT( - xhr='xhr', - request_method='request_method', - path_info='path_info', - ) - order2, _, _ = self._callFUT( - xhr='xhr', - request_method='request_method', - custom=('a',), - ) - self.failUnless(order1 > order2) - - def test_different_custom_predicates_with_same_hash(self): - class PredicateWithHash(object): - def __hash__(self): - return 1 - a = PredicateWithHash() - b = PredicateWithHash() - _, _, a_phash = self._callFUT(custom=(a,)) - _, _, b_phash = self._callFUT(custom=(b,)) - self.assertEqual(a_phash, b_phash) - - def test_traverse_has_remainder_already(self): - order, predicates, phash = self._callFUT(traverse='/1/:a/:b') - self.assertEqual(len(predicates), 1) - pred = predicates[0] - info = {'traverse':'abc'} - request = DummyRequest() - result = pred(info, request) - self.assertEqual(result, True) - self.assertEqual(info, {'traverse':'abc'}) - - def test_traverse_matches(self): - order, predicates, phash = self._callFUT(traverse='/1/:a/:b') - self.assertEqual(len(predicates), 1) - pred = predicates[0] - info = {'match':{'a':'a', 'b':'b'}} - request = DummyRequest() - result = pred(info, request) - self.assertEqual(result, True) - self.assertEqual(info, {'match': - {'a':'a', 'b':'b', 'traverse':('1', 'a', 'b')}}) - -class TestMultiView(unittest.TestCase): - def _getTargetClass(self): - from repoze.bfg.configuration import MultiView - return MultiView - - def _makeOne(self, name='name'): - return self._getTargetClass()(name) - - def test_class_implements_ISecuredView(self): - from zope.interface.verify import verifyClass - from repoze.bfg.interfaces import ISecuredView - verifyClass(ISecuredView, self._getTargetClass()) - - def test_instance_implements_ISecuredView(self): - from zope.interface.verify import verifyObject - from repoze.bfg.interfaces import ISecuredView - verifyObject(ISecuredView, self._makeOne()) - - def test_add(self): - mv = self._makeOne() - mv.add('view', 100) - self.assertEqual(mv.views, [(100, 'view', None)]) - mv.add('view2', 99) - self.assertEqual(mv.views, [(99, 'view2', None), (100, 'view', None)]) - mv.add('view3', 100, 'text/html') - self.assertEqual(mv.media_views['text/html'], [(100, 'view3', None)]) - mv.add('view4', 99, 'text/html') - self.assertEqual(mv.media_views['text/html'], - [(99, 'view4', None), (100, 'view3', None)]) - mv.add('view5', 100, 'text/xml') - self.assertEqual(mv.media_views['text/xml'], [(100, 'view5', None)]) - self.assertEqual(set(mv.accepts), set(['text/xml', 'text/html'])) - self.assertEqual(mv.views, [(99, 'view2', None), (100, 'view', None)]) - mv.add('view6', 98, 'text/*') - self.assertEqual(mv.views, [(98, 'view6', None), - (99, 'view2', None), - (100, 'view', None)]) - - def test_add_with_phash(self): - mv = self._makeOne() - mv.add('view', 100, phash='abc') - self.assertEqual(mv.views, [(100, 'view', 'abc')]) - mv.add('view', 100, phash='abc') - self.assertEqual(mv.views, [(100, 'view', 'abc')]) - mv.add('view', 100, phash='def') - self.assertEqual(mv.views, [(100, 'view', 'abc'), (100, 'view', 'def')]) - mv.add('view', 100, phash='abc') - self.assertEqual(mv.views, [(100, 'view', 'abc'), (100, 'view', 'def')]) - - def test_get_views_request_has_no_accept(self): - request = DummyRequest() - mv = self._makeOne() - mv.views = [(99, lambda *arg: None)] - self.assertEqual(mv.get_views(request), mv.views) - - def test_get_views_no_self_accepts(self): - request = DummyRequest() - request.accept = True - mv = self._makeOne() - mv.accepts = [] - mv.views = [(99, lambda *arg: None)] - self.assertEqual(mv.get_views(request), mv.views) - - def test_get_views(self): - request = DummyRequest() - request.accept = DummyAccept('text/html') - mv = self._makeOne() - mv.accepts = ['text/html'] - mv.views = [(99, lambda *arg: None)] - html_views = [(98, lambda *arg: None)] - mv.media_views['text/html'] = html_views - self.assertEqual(mv.get_views(request), html_views + mv.views) - - def test_get_views_best_match_returns_None(self): - request = DummyRequest() - request.accept = DummyAccept(None) - mv = self._makeOne() - mv.accepts = ['text/html'] - mv.views = [(99, lambda *arg: None)] - self.assertEqual(mv.get_views(request), mv.views) - - def test_match_not_found(self): - from repoze.bfg.exceptions import NotFound - mv = self._makeOne() - context = DummyContext() - request = DummyRequest() - self.assertRaises(NotFound, mv.match, context, request) - - def test_match_predicate_fails(self): - from repoze.bfg.exceptions import NotFound - mv = self._makeOne() - def view(context, request): - """ """ - view.__predicated__ = lambda *arg: False - mv.views = [(100, view, None)] - context = DummyContext() - request = DummyRequest() - self.assertRaises(NotFound, mv.match, context, request) - - def test_match_predicate_succeeds(self): - mv = self._makeOne() - def view(context, request): - """ """ - view.__predicated__ = lambda *arg: True - mv.views = [(100, view, None)] - context = DummyContext() - request = DummyRequest() - result = mv.match(context, request) - self.assertEqual(result, view) - - def test_permitted_no_views(self): - from repoze.bfg.exceptions import NotFound - mv = self._makeOne() - context = DummyContext() - request = DummyRequest() - self.assertRaises(NotFound, mv.__permitted__, context, request) - - def test_permitted_no_match_with__permitted__(self): - mv = self._makeOne() - def view(context, request): - """ """ - mv.views = [(100, view, None)] - self.assertEqual(mv.__permitted__(None, None), True) - - def test_permitted(self): - mv = self._makeOne() - def view(context, request): - """ """ - def permitted(context, request): - return False - view.__permitted__ = permitted - mv.views = [(100, view, None)] - context = DummyContext() - request = DummyRequest() - result = mv.__permitted__(context, request) - self.assertEqual(result, False) - - def test__call__not_found(self): - from repoze.bfg.exceptions import NotFound - mv = self._makeOne() - context = DummyContext() - request = DummyRequest() - self.assertRaises(NotFound, mv, context, request) - - def test___call__intermediate_not_found(self): - from repoze.bfg.exceptions import PredicateMismatch - mv = self._makeOne() - context = DummyContext() - request = DummyRequest() - request.view_name = '' - expected_response = DummyResponse() - def view1(context, request): - raise PredicateMismatch - def view2(context, request): - return expected_response - mv.views = [(100, view1, None), (99, view2, None)] - response = mv(context, request) - self.assertEqual(response, expected_response) - - def test___call__raise_not_found_isnt_interpreted_as_pred_mismatch(self): - from repoze.bfg.exceptions import NotFound - mv = self._makeOne() - context = DummyContext() - request = DummyRequest() - request.view_name = '' - def view1(context, request): - raise NotFound - def view2(context, request): - """ """ - mv.views = [(100, view1, None), (99, view2, None)] - self.assertRaises(NotFound, mv, context, request) - - def test___call__(self): - mv = self._makeOne() - context = DummyContext() - request = DummyRequest() - request.view_name = '' - expected_response = DummyResponse() - def view(context, request): - return expected_response - mv.views = [(100, view, None)] - response = mv(context, request) - self.assertEqual(response, expected_response) - - def test__call_permissive__not_found(self): - from repoze.bfg.exceptions import NotFound - mv = self._makeOne() - context = DummyContext() - request = DummyRequest() - self.assertRaises(NotFound, mv, context, request) - - def test___call_permissive_has_call_permissive(self): - mv = self._makeOne() - context = DummyContext() - request = DummyRequest() - request.view_name = '' - expected_response = DummyResponse() - def view(context, request): - """ """ - def permissive(context, request): - return expected_response - view.__call_permissive__ = permissive - mv.views = [(100, view, None)] - response = mv.__call_permissive__(context, request) - self.assertEqual(response, expected_response) - - def test___call_permissive_has_no_call_permissive(self): - mv = self._makeOne() - context = DummyContext() - request = DummyRequest() - request.view_name = '' - expected_response = DummyResponse() - def view(context, request): - return expected_response - mv.views = [(100, view, None)] - response = mv.__call_permissive__(context, request) - self.assertEqual(response, expected_response) - - def test__call__with_accept_match(self): - mv = self._makeOne() - context = DummyContext() - request = DummyRequest() - request.accept = DummyAccept('text/html', 'text/xml') - expected_response = DummyResponse() - def view(context, request): - return expected_response - mv.views = [(100, None)] - mv.media_views['text/xml'] = [(100, view, None)] - mv.accepts = ['text/xml'] - response = mv(context, request) - self.assertEqual(response, expected_response) - - def test__call__with_accept_miss(self): - mv = self._makeOne() - context = DummyContext() - request = DummyRequest() - request.accept = DummyAccept('text/plain', 'text/html') - expected_response = DummyResponse() - def view(context, request): - return expected_response - mv.views = [(100, view, None)] - mv.media_views['text/xml'] = [(100, None, None)] - mv.accepts = ['text/xml'] - response = mv(context, request) - self.assertEqual(response, expected_response) - - -class TestRequestOnly(unittest.TestCase): - def _callFUT(self, arg): - from repoze.bfg.configuration import requestonly - return requestonly(arg) - - def test_newstyle_class_no_init(self): - class foo(object): - """ """ - self.assertFalse(self._callFUT(foo)) - - def test_newstyle_class_init_toomanyargs(self): - class foo(object): - def __init__(self, context, request): - """ """ - self.assertFalse(self._callFUT(foo)) - - def test_newstyle_class_init_onearg_named_request(self): - class foo(object): - def __init__(self, request): - """ """ - self.assertTrue(self._callFUT(foo)) - - def test_newstyle_class_init_onearg_named_somethingelse(self): - class foo(object): - def __init__(self, req): - """ """ - self.assertTrue(self._callFUT(foo)) - - def test_newstyle_class_init_defaultargs_firstname_not_request(self): - class foo(object): - def __init__(self, context, request=None): - """ """ - self.assertFalse(self._callFUT(foo)) - - def test_newstyle_class_init_defaultargs_firstname_request(self): - class foo(object): - def __init__(self, request, foo=1, bar=2): - """ """ - self.assertTrue(self._callFUT(foo)) - - def test_newstyle_class_init_noargs(self): - class foo(object): - def __init__(): - """ """ - self.assertFalse(self._callFUT(foo)) - - def test_oldstyle_class_no_init(self): - class foo: - """ """ - self.assertFalse(self._callFUT(foo)) - - def test_oldstyle_class_init_toomanyargs(self): - class foo: - def __init__(self, context, request): - """ """ - self.assertFalse(self._callFUT(foo)) - - def test_oldstyle_class_init_onearg_named_request(self): - class foo: - def __init__(self, request): - """ """ - self.assertTrue(self._callFUT(foo)) - - def test_oldstyle_class_init_onearg_named_somethingelse(self): - class foo: - def __init__(self, req): - """ """ - self.assertTrue(self._callFUT(foo)) - - def test_oldstyle_class_init_defaultargs_firstname_not_request(self): - class foo: - def __init__(self, context, request=None): - """ """ - self.assertFalse(self._callFUT(foo)) - - def test_oldstyle_class_init_defaultargs_firstname_request(self): - class foo: - def __init__(self, request, foo=1, bar=2): - """ """ - self.assertTrue(self._callFUT(foo), True) - - def test_oldstyle_class_init_noargs(self): - class foo: - def __init__(): - """ """ - self.assertFalse(self._callFUT(foo)) - - def test_function_toomanyargs(self): - def foo(context, request): - """ """ - self.assertFalse(self._callFUT(foo)) - - def test_function_onearg_named_request(self): - def foo(request): - """ """ - self.assertTrue(self._callFUT(foo)) - - def test_function_onearg_named_somethingelse(self): - def foo(req): - """ """ - self.assertTrue(self._callFUT(foo)) - - def test_function_defaultargs_firstname_not_request(self): - def foo(context, request=None): - """ """ - self.assertFalse(self._callFUT(foo)) - - def test_function_defaultargs_firstname_request(self): - def foo(request, foo=1, bar=2): - """ """ - self.assertTrue(self._callFUT(foo)) - - def test_function_noargs(self): - def foo(): - """ """ - self.assertFalse(self._callFUT(foo)) - - def test_instance_toomanyargs(self): - class Foo: - def __call__(self, context, request): - """ """ - foo = Foo() - self.assertFalse(self._callFUT(foo)) - - def test_instance_defaultargs_onearg_named_request(self): - class Foo: - def __call__(self, request): - """ """ - foo = Foo() - self.assertTrue(self._callFUT(foo)) - - def test_instance_defaultargs_onearg_named_somethingelse(self): - class Foo: - def __call__(self, req): - """ """ - foo = Foo() - self.assertTrue(self._callFUT(foo)) - - def test_instance_defaultargs_firstname_not_request(self): - class Foo: - def __call__(self, context, request=None): - """ """ - foo = Foo() - self.assertFalse(self._callFUT(foo)) - - def test_instance_defaultargs_firstname_request(self): - class Foo: - def __call__(self, request, foo=1, bar=2): - """ """ - foo = Foo() - self.assertTrue(self._callFUT(foo), True) - - def test_instance_nocall(self): - class Foo: pass - foo = Foo() - self.assertFalse(self._callFUT(foo)) - -class TestMakeApp(unittest.TestCase): - def setUp(self): - testing.setUp() - - def tearDown(self): - testing.tearDown() - - def _callFUT(self, *arg, **kw): - from repoze.bfg.configuration import make_app - return make_app(*arg, **kw) - - def test_it(self): - settings = {'a':1} - rootfactory = object() - app = self._callFUT(rootfactory, settings=settings, - Configurator=DummyConfigurator) - self.assertEqual(app.root_factory, rootfactory) - self.assertEqual(app.settings, settings) - self.assertEqual(app.zcml_file, 'configure.zcml') - self.assertEqual(app.zca_hooked, True) - - def test_it_options_means_settings(self): - settings = {'a':1} - rootfactory = object() - app = self._callFUT(rootfactory, options=settings, - Configurator=DummyConfigurator) - self.assertEqual(app.root_factory, rootfactory) - self.assertEqual(app.settings, settings) - self.assertEqual(app.zcml_file, 'configure.zcml') - - def test_it_with_package(self): - package = object() - rootfactory = object() - app = self._callFUT(rootfactory, package=package, - Configurator=DummyConfigurator) - self.assertEqual(app.package, package) - - def test_it_with_custom_configure_zcml(self): - rootfactory = object() - settings = {'configure_zcml':'2.zcml'} - app = self._callFUT(rootfactory, filename='1.zcml', settings=settings, - Configurator=DummyConfigurator) - self.assertEqual(app.zcml_file, '2.zcml') - -class TestDottedNameResolver(unittest.TestCase): - def _makeOne(self, package=None): - from repoze.bfg.configuration import DottedNameResolver - return DottedNameResolver(package) - - def config_exc(self, func, *arg, **kw): - from repoze.bfg.exceptions import ConfigurationError - try: - func(*arg, **kw) - except ConfigurationError, e: - return e - else: - raise AssertionError('Invalid not raised') # pragma: no cover - - def test_zope_dottedname_style_resolve_absolute(self): - typ = self._makeOne() - result = typ._zope_dottedname_style( - 'repoze.bfg.tests.test_configuration.TestDottedNameResolver') - self.assertEqual(result, self.__class__) - - def test_zope_dottedname_style_irrresolveable_absolute(self): - typ = self._makeOne() - self.assertRaises(ImportError, typ._zope_dottedname_style, - 'repoze.bfg.test_configuration.nonexisting_name') - - def test__zope_dottedname_style_resolve_relative(self): - import repoze.bfg.tests - typ = self._makeOne(package=repoze.bfg.tests) - result = typ._zope_dottedname_style( - '.test_configuration.TestDottedNameResolver') - self.assertEqual(result, self.__class__) - - def test__zope_dottedname_style_resolve_relative_leading_dots(self): - import repoze.bfg.tests.test_configuration - typ = self._makeOne(package=repoze.bfg.tests) - result = typ._zope_dottedname_style( - '..tests.test_configuration.TestDottedNameResolver') - self.assertEqual(result, self.__class__) - - def test__zope_dottedname_style_resolve_relative_is_dot(self): - import repoze.bfg.tests - typ = self._makeOne(package=repoze.bfg.tests) - result = typ._zope_dottedname_style('.') - self.assertEqual(result, repoze.bfg.tests) - - def test__zope_dottedname_style_irresolveable_relative_is_dot(self): - typ = self._makeOne() - e = self.config_exc(typ._zope_dottedname_style, '.') - self.assertEqual( - e.args[0], - "relative name '.' irresolveable without package") - - def test_zope_dottedname_style_resolve_relative_nocurrentpackage(self): - typ = self._makeOne() - e = self.config_exc(typ._zope_dottedname_style, '.whatever') - self.assertEqual( - e.args[0], - "relative name '.whatever' irresolveable without package") - - def test_zope_dottedname_style_irrresolveable_relative(self): - import repoze.bfg.tests - typ = self._makeOne(package=repoze.bfg.tests) - self.assertRaises(ImportError, typ._zope_dottedname_style, - '.notexisting') - - def test__zope_dottedname_style_resolveable_relative(self): - import repoze.bfg - typ = self._makeOne(package=repoze.bfg) - result = typ._zope_dottedname_style('.tests') - from repoze.bfg import tests - self.assertEqual(result, tests) - - def test__zope_dottedname_style_irresolveable_absolute(self): - typ = self._makeOne() - self.assertRaises( - ImportError, - typ._zope_dottedname_style, 'repoze.bfg.fudge.bar') - - def test__zope_dottedname_style_resolveable_absolute(self): - typ = self._makeOne() - result = typ._zope_dottedname_style( - 'repoze.bfg.tests.test_configuration.TestDottedNameResolver') - self.assertEqual(result, self.__class__) - - def test__pkg_resources_style_resolve_absolute(self): - typ = self._makeOne() - result = typ._pkg_resources_style( - 'repoze.bfg.tests.test_configuration:TestDottedNameResolver') - self.assertEqual(result, self.__class__) - - def test__pkg_resources_style_irrresolveable_absolute(self): - typ = self._makeOne() - self.assertRaises(ImportError, typ._pkg_resources_style, - 'repoze.bfg.tests:nonexisting') - - def test__pkg_resources_style_resolve_relative(self): - import repoze.bfg.tests - typ = self._makeOne(package=repoze.bfg.tests) - result = typ._pkg_resources_style( - '.test_configuration:TestDottedNameResolver') - self.assertEqual(result, self.__class__) - - def test__pkg_resources_style_resolve_relative_is_dot(self): - import repoze.bfg.tests - typ = self._makeOne(package=repoze.bfg.tests) - result = typ._pkg_resources_style('.') - self.assertEqual(result, repoze.bfg.tests) - - def test__pkg_resources_style_resolve_relative_nocurrentpackage(self): - typ = self._makeOne() - from repoze.bfg.exceptions import ConfigurationError - self.assertRaises(ConfigurationError, typ._pkg_resources_style, - '.whatever') - - def test__pkg_resources_style_irrresolveable_relative(self): - import repoze.bfg - typ = self._makeOne(package=repoze.bfg) - self.assertRaises(ImportError, typ._pkg_resources_style, - ':notexisting') - - def test_resolve_not_a_string(self): - typ = self._makeOne() - e = self.config_exc(typ.resolve, None) - self.assertEqual(e.args[0], 'None is not a string') - - def test_resolve_using_pkgresources_style(self): - typ = self._makeOne() - result = typ.resolve( - 'repoze.bfg.tests.test_configuration:TestDottedNameResolver') - self.assertEqual(result, self.__class__) - - def test_resolve_using_zope_dottedname_style(self): - typ = self._makeOne() - result = typ.resolve( - 'repoze.bfg.tests.test_configuration:TestDottedNameResolver') - self.assertEqual(result, self.__class__) - - def test_resolve_missing_raises(self): - typ = self._makeOne() - e = self.config_exc(typ.resolve, 'cant.be.found') - self.assertEqual(e.args[0], - "The dotted name 'cant.be.found' cannot be imported") - - def test_ctor_string_module_resolveable(self): - import repoze.bfg.tests - typ = self._makeOne('repoze.bfg.tests.test_configuration') - self.assertEqual(typ.package, repoze.bfg.tests) - self.assertEqual(typ.package_name, 'repoze.bfg.tests') - - def test_ctor_string_package_resolveable(self): - import repoze.bfg.tests - typ = self._makeOne('repoze.bfg.tests') - self.assertEqual(typ.package, repoze.bfg.tests) - self.assertEqual(typ.package_name, 'repoze.bfg.tests') - - def test_ctor_string_irresolveable(self): - from repoze.bfg.configuration import ConfigurationError - self.assertRaises(ConfigurationError, self._makeOne, 'cant.be.found') - - def test_ctor_module(self): - import repoze.bfg.tests - import repoze.bfg.tests.test_configuration - typ = self._makeOne(repoze.bfg.tests.test_configuration) - self.assertEqual(typ.package, repoze.bfg.tests) - self.assertEqual(typ.package_name, 'repoze.bfg.tests') - - def test_ctor_package(self): - import repoze.bfg.tests - typ = self._makeOne(repoze.bfg.tests) - self.assertEqual(typ.package, repoze.bfg.tests) - self.assertEqual(typ.package_name, 'repoze.bfg.tests') - - def test_ctor_None(self): - typ = self._makeOne(None) - self.assertEqual(typ.package, None) - self.assertEqual(typ.package_name, None) - -class Test_isexception(unittest.TestCase): - def _callFUT(self, ob): - from repoze.bfg.configuration import isexception - return isexception(ob) - - def test_is_exception_instance(self): - class E(Exception): - pass - e = E() - self.assertEqual(self._callFUT(e), True) - - def test_is_exception_class(self): - class E(Exception): - pass - self.assertEqual(self._callFUT(E), True) - - def test_is_IException(self): - from repoze.bfg.interfaces import IException - self.assertEqual(self._callFUT(IException), True) - - def test_is_IException_subinterface(self): - from repoze.bfg.interfaces import IException - class ISubException(IException): - pass - self.assertEqual(self._callFUT(ISubException), True) - -class DummyRequest: - subpath = () - def __init__(self): - self.environ = {'PATH_INFO':'/static'} - self.params = {} - self.cookies = {} - def copy(self): - return self - def get_response(self, app): - return app - -class DummyContext: - pass - -class DummyLock: - def acquire(self): - self.acquired = True - - def release(self): - self.released = True - -class DummyPackage: - def __init__(self, name): - self.__name__ = name - -class DummyOverrides: - def __init__(self, package): - self.package = package - self.inserted = [] - - def insert(self, path, package, prefix): - self.inserted.append((path, package, prefix)) - -class DummyUnderOverride: - def __call__(self, package, path, override_package, override_prefix, - _info=u''): - self.package = package - self.path = path - self.override_package = override_package - self.override_prefix = override_prefix - -from zope.interface import Interface -class IDummy(Interface): - pass - -class IOther(Interface): - pass - -class DummyResponse: - status = '200 OK' - headerlist = () - app_iter = () - body = '' - -class DummyLogger: - def __init__(self): - self.messages = [] - def info(self, msg): - self.messages.append(msg) - warn = info - debug = info - -class DummySecurityPolicy: - def __init__(self, permitted=True): - self.permitted = permitted - - def effective_principals(self, request): - return [] - - def permits(self, context, principals, permission): - return self.permitted - -class DummyConfigurator(object): - def __init__(self, registry=None, package=None, root_factory=None, - settings=None): - self.root_factory = root_factory - self.package = package - self.settings = settings - - def begin(self, request=None): - self.begun = True - self.request = request - - def end(self): - self.ended = True - - def load_zcml(self, filename): - self.zcml_file = filename - - def make_wsgi_app(self): - return self - - def hook_zca(self): - self.zca_hooked = True - -class DummyAccept(object): - def __init__(self, *matches): - self.matches = list(matches) - - def best_match(self, offered): - if self.matches: - for match in self.matches: - if match in offered: - self.matches.remove(match) - return match - def __contains__(self, val): - return val in self.matches - -from zope.interface import implements -from repoze.bfg.interfaces import IMultiView -class DummyMultiView: - implements(IMultiView) - def __init__(self): - self.views = [] - self.name = 'name' - def add(self, view, order, accept=None, phash=None): - self.views.append((view, accept, phash)) - def __call__(self, context, request): - return 'OK1' - def __permitted__(self, context, request): - """ """ - -class DummyGetSiteManager(object): - def sethook(self, hook): - self.hook = hook - def reset(self): - self.unhooked = True - -class DummyThreadLocalManager(object): - pushed = None - popped = False - def push(self, d): - self.pushed = d - def pop(self): - self.popped = True - -class IFactory(Interface): - pass - -class DummyFactory(object): - implements(IFactory) - def __call__(self): - """ """ - -class DummyEvent: - implements(IDummy) - -class DummyStaticURLInfo: - def __init__(self): - self.added = [] - - def add(self, name, spec, **kw): - self.added.append((name, spec, kw)) - -def dummy_view(request): - return 'OK' - -def dummyfactory(request): - """ """ diff --git a/repoze/bfg/tests/test_decorator.py b/repoze/bfg/tests/test_decorator.py deleted file mode 100644 index d41c62c65..000000000 --- a/repoze/bfg/tests/test_decorator.py +++ /dev/null @@ -1,29 +0,0 @@ -import unittest - -class TestReify(unittest.TestCase): - def _makeOne(self, wrapped): - from repoze.bfg.decorator import reify - return reify(wrapped) - - def test___get__withinst(self): - def wrapped(inst): - return 'a' - decorator = self._makeOne(wrapped) - inst = Dummy() - result = decorator.__get__(inst) - self.assertEqual(result, 'a') - self.assertEqual(inst.__dict__['wrapped'], 'a') - - def test___get__noinst(self): - decorator = self._makeOne(None) - result = decorator.__get__(None) - self.assertEqual(result, decorator) - - def test___doc__copied(self): - def wrapped(inst): - """My doc""" - decorator = self._makeOne(wrapped) - self.assertEqual(decorator.__doc__, "My doc") - -class Dummy(object): - pass diff --git a/repoze/bfg/tests/test_docs.py b/repoze/bfg/tests/test_docs.py deleted file mode 100644 index a00171842..000000000 --- a/repoze/bfg/tests/test_docs.py +++ /dev/null @@ -1,35 +0,0 @@ -import unittest - -if 0: - # no released version of manuel actually works with :lineno: - # settings yet - class ManuelDocsCase(unittest.TestCase): - def __new__(self, test): - return getattr(self, test)() - - @classmethod - def test_docs(cls): - import os - import pkg_resources - import manuel.testing - import manuel.codeblock - import manuel.capture - import manuel.ignore - m = manuel.ignore.Manuel() - m += manuel.codeblock.Manuel() - m += manuel.capture.Manuel() - docs = [] - - egg_path = pkg_resources.get_distribution('repoze.bfg').location - path = os.path.join(egg_path, 'docs') - for root, dirs, files in os.walk(path): - for ignore in ('.svn', '.build', '.hg', '.git', 'CVS'): - if ignore in dirs: - dirs.remove(ignore) - - for filename in files: - if filename.endswith('.rst'): - docs.append(os.path.join(root, filename)) - - print path - return manuel.testing.TestSuite(m, *docs) diff --git a/repoze/bfg/tests/test_encode.py b/repoze/bfg/tests/test_encode.py deleted file mode 100644 index 364247fb3..000000000 --- a/repoze/bfg/tests/test_encode.py +++ /dev/null @@ -1,61 +0,0 @@ -import unittest - -class UrlEncodeTests(unittest.TestCase): - def _callFUT(self, query, doseq=False): - from repoze.bfg.encode import urlencode - return urlencode(query, doseq) - - def test_ascii_only(self): - result = self._callFUT([('a',1), ('b',2)]) - self.assertEqual(result, 'a=1&b=2') - - def test_unicode_key(self): - la = unicode('LaPe\xc3\xb1a', 'utf-8') - result = self._callFUT([(la, 1), ('b',2)]) - self.assertEqual(result, 'LaPe%C3%B1a=1&b=2') - - def test_unicode_val_single(self): - la = unicode('LaPe\xc3\xb1a', 'utf-8') - result = self._callFUT([('a', la), ('b',2)]) - self.assertEqual(result, 'a=LaPe%C3%B1a&b=2') - - def test_unicode_val_multiple(self): - la = [unicode('LaPe\xc3\xb1a', 'utf-8')] * 2 - result = self._callFUT([('a', la), ('b',2)], doseq=True) - self.assertEqual(result, 'a=LaPe%C3%B1a&a=LaPe%C3%B1a&b=2') - - def test_dict(self): - result = self._callFUT({'a':1}) - self.assertEqual(result, 'a=1') - -class URLQuoteTests(unittest.TestCase): - def _callFUT(self, val, safe=''): - from repoze.bfg.encode import url_quote - return url_quote(val, safe) - - def test_it_default(self): - la = 'La/Pe\xc3\xb1a' - result = self._callFUT(la) - self.assertEqual(result, 'La%2FPe%C3%B1a') - - def test_it_with_safe(self): - la = 'La/Pe\xc3\xb1a' - result = self._callFUT(la, '/') - self.assertEqual(result, 'La/Pe%C3%B1a') - -class TestQuotePlus(unittest.TestCase): - def _callFUT(self, val, safe=''): - from repoze.bfg.encode import quote_plus - return quote_plus(val, safe) - - def test_it_default(self): - la = 'La Pe\xc3\xb1a' - result = self._callFUT(la) - self.assertEqual(result, 'La+Pe%C3%B1a') - - def test_it_with_safe(self): - la = 'La /Pe\xc3\xb1a' - result = self._callFUT(la, '/') - self.assertEqual(result, 'La+/Pe%C3%B1a') - - diff --git a/repoze/bfg/tests/test_events.py b/repoze/bfg/tests/test_events.py deleted file mode 100644 index d097ca0f4..000000000 --- a/repoze/bfg/tests/test_events.py +++ /dev/null @@ -1,181 +0,0 @@ -import unittest - -class NewRequestEventTests(unittest.TestCase): - def _getTargetClass(self): - from repoze.bfg.events import NewRequest - return NewRequest - - def _makeOne(self, request): - return self._getTargetClass()(request) - - def test_class_implements(self): - from repoze.bfg.interfaces import INewRequest - from zope.interface.verify import verifyClass - klass = self._getTargetClass() - verifyClass(INewRequest, klass) - - def test_instance_implements(self): - from repoze.bfg.interfaces import INewRequest - from zope.interface.verify import verifyObject - request = DummyRequest() - inst = self._makeOne(request) - verifyObject(INewRequest, inst) - - def test_ctor(self): - request = DummyRequest() - inst = self._makeOne(request) - self.assertEqual(inst.request, request) - -class NewResponseEventTests(unittest.TestCase): - def _getTargetClass(self): - from repoze.bfg.events import NewResponse - return NewResponse - - def _makeOne(self, request, response): - return self._getTargetClass()(request, response) - - def test_class_implements(self): - from repoze.bfg.interfaces import INewResponse - from zope.interface.verify import verifyClass - klass = self._getTargetClass() - verifyClass(INewResponse, klass) - - def test_instance_implements(self): - from repoze.bfg.interfaces import INewResponse - from zope.interface.verify import verifyObject - request = DummyRequest() - response = DummyResponse() - inst = self._makeOne(request, response) - verifyObject(INewResponse, inst) - - def test_ctor(self): - request = DummyRequest() - response = DummyResponse() - inst = self._makeOne(request, response) - self.assertEqual(inst.request, request) - self.assertEqual(inst.response, response) - -class ApplicationCreatedEventTests(unittest.TestCase): - def test_alias_object_implements(self): - from repoze.bfg.events import WSGIApplicationCreatedEvent - event = WSGIApplicationCreatedEvent(object()) - from repoze.bfg.interfaces import IWSGIApplicationCreatedEvent - from repoze.bfg.interfaces import IApplicationCreated - from zope.interface.verify import verifyObject - verifyObject(IWSGIApplicationCreatedEvent, event) - verifyObject(IApplicationCreated, event) - - def test_alias_class_implements(self): - from repoze.bfg.events import WSGIApplicationCreatedEvent - from repoze.bfg.interfaces import IWSGIApplicationCreatedEvent - from repoze.bfg.interfaces import IApplicationCreated - from zope.interface.verify import verifyClass - verifyClass(IWSGIApplicationCreatedEvent, WSGIApplicationCreatedEvent) - verifyClass(IApplicationCreated, WSGIApplicationCreatedEvent) - - def test_object_implements(self): - from repoze.bfg.events import ApplicationCreated - event = ApplicationCreated(object()) - from repoze.bfg.interfaces import IApplicationCreated - from zope.interface.verify import verifyObject - verifyObject(IApplicationCreated, event) - - def test_class_implements(self): - from repoze.bfg.events import ApplicationCreated - from repoze.bfg.interfaces import IApplicationCreated - from zope.interface.verify import verifyClass - verifyClass(IApplicationCreated, ApplicationCreated) - -class ContextFoundEventTests(unittest.TestCase): - def test_alias_class_implements(self): - from zope.interface.verify import verifyClass - from repoze.bfg.events import AfterTraversal - from repoze.bfg.interfaces import IAfterTraversal - from repoze.bfg.interfaces import IContextFound - verifyClass(IAfterTraversal, AfterTraversal) - verifyClass(IContextFound, AfterTraversal) - - def test_alias_instance_implements(self): - from zope.interface.verify import verifyObject - from repoze.bfg.events import AfterTraversal - from repoze.bfg.interfaces import IAfterTraversal - from repoze.bfg.interfaces import IContextFound - request = DummyRequest() - inst = AfterTraversal(request) - verifyObject(IAfterTraversal, inst) - verifyObject(IContextFound, inst) - - def test_class_implements(self): - from zope.interface.verify import verifyClass - from repoze.bfg.events import ContextFound - from repoze.bfg.interfaces import IContextFound - verifyClass(IContextFound, ContextFound) - - def test_instance_implements(self): - from zope.interface.verify import verifyObject - from repoze.bfg.events import ContextFound - from repoze.bfg.interfaces import IContextFound - request = DummyRequest() - inst = ContextFound(request) - verifyObject(IContextFound, inst) - -class TestSubscriber(unittest.TestCase): - def setUp(self): - registry = DummyRegistry() - from repoze.bfg.configuration import Configurator - self.config = Configurator(registry) - self.config.begin() - - def tearDown(self): - self.config.end() - - def _makeOne(self, *ifaces): - from repoze.bfg.events import subscriber - return subscriber(*ifaces) - - def test_register(self): - from zope.interface import Interface - class IFoo(Interface): pass - class IBar(Interface): pass - dec = self._makeOne(IFoo, IBar) - def foo(): pass - config = DummyConfigurator() - scanner = Dummy() - scanner.config = config - dec.register(scanner, None, foo) - self.assertEqual(config.subscribed, [(foo, (IFoo, IBar))]) - - def test___call__(self): - dec = self._makeOne() - dummy_venusian = DummyVenusian() - dec.venusian = dummy_venusian - def foo(): pass - dec(foo) - self.assertEqual(dummy_venusian.attached, [(foo, dec.register, 'bfg')]) - -class DummyConfigurator(object): - def __init__(self): - self.subscribed = [] - - def add_subscriber(self, wrapped, ifaces): - self.subscribed.append((wrapped, ifaces)) - -class DummyRegistry(object): - pass - -class DummyVenusian(object): - def __init__(self): - self.attached = [] - - def attach(self, wrapped, fn, category=None): - self.attached.append((wrapped, fn, category)) - -class Dummy: - pass - -class DummyRequest: - pass - -class DummyResponse: - pass - diff --git a/repoze/bfg/tests/test_exceptions.py b/repoze/bfg/tests/test_exceptions.py deleted file mode 100644 index 4091eb941..000000000 --- a/repoze/bfg/tests/test_exceptions.py +++ /dev/null @@ -1,45 +0,0 @@ -import unittest - -class TestExceptionResponse(unittest.TestCase): - def _makeOne(self, message): - from repoze.bfg.exceptions import ExceptionResponse - return ExceptionResponse(message) - - def test_app_iter(self): - exc = self._makeOne('') - self.failUnless('<code></code>' in exc.app_iter[0]) - - def test_headerlist(self): - exc = self._makeOne('') - headerlist = exc.headerlist - headerlist.sort() - app_iter = exc.app_iter - clen = str(len(app_iter[0])) - self.assertEqual(headerlist[0], ('Content-Length', clen)) - self.assertEqual(headerlist[1], ('Content-Type', 'text/html')) - - def test_withmessage(self): - exc = self._makeOne('abc&123') - self.failUnless('<code>abc&123</code>' in exc.app_iter[0]) - -class TestNotFound(unittest.TestCase): - def _makeOne(self, message): - from repoze.bfg.exceptions import NotFound - return NotFound(message) - - def test_it(self): - from repoze.bfg.exceptions import ExceptionResponse - e = self._makeOne('notfound') - self.failUnless(isinstance(e, ExceptionResponse)) - self.assertEqual(e.status, '404 Not Found') - -class TestForbidden(unittest.TestCase): - def _makeOne(self, message): - from repoze.bfg.exceptions import Forbidden - return Forbidden(message) - - def test_it(self): - from repoze.bfg.exceptions import ExceptionResponse - e = self._makeOne('unauthorized') - self.failUnless(isinstance(e, ExceptionResponse)) - self.assertEqual(e.status, '401 Unauthorized') diff --git a/repoze/bfg/tests/test_i18n.py b/repoze/bfg/tests/test_i18n.py deleted file mode 100644 index 95017807f..000000000 --- a/repoze/bfg/tests/test_i18n.py +++ /dev/null @@ -1,394 +0,0 @@ -# -*- coding: utf-8 -*- -# - -import unittest -from repoze.bfg.testing import cleanUp - -class TestTranslationString(unittest.TestCase): - def _makeOne(self, *arg, **kw): - from repoze.bfg.i18n import TranslationString - return TranslationString(*arg, **kw) - - def test_it(self): - # this is part of the API, we don't actually need to test much more - # than that it's importable - ts = self._makeOne('a') - self.assertEqual(ts, 'a') - -class TestTranslationStringFactory(unittest.TestCase): - def _makeOne(self, *arg, **kw): - from repoze.bfg.i18n import TranslationStringFactory - return TranslationStringFactory(*arg, **kw) - - def test_it(self): - # this is part of the API, we don't actually need to test much more - # than that it's importable - factory = self._makeOne('a') - self.assertEqual(factory('').domain, 'a') - -class TestLocalizer(unittest.TestCase): - def _makeOne(self, *arg, **kw): - from repoze.bfg.i18n import Localizer - return Localizer(*arg, **kw) - - def test_ctor(self): - localizer = self._makeOne('en_US', None) - self.assertEqual(localizer.locale_name, 'en_US') - self.assertEqual(localizer.translations, None) - - def test_translate(self): - translations = DummyTranslations() - localizer = self._makeOne(None, translations) - self.assertEqual(localizer.translate('123', domain='1', - mapping={}), '123') - self.failUnless(localizer.translator) - - def test_pluralize(self): - translations = DummyTranslations() - localizer = self._makeOne(None, translations) - self.assertEqual(localizer.pluralize('singular', 'plural', 1, - domain='1', mapping={}), - 'singular') - self.failUnless(localizer.pluralizer) - -class Test_negotiate_locale_name(unittest.TestCase): - def setUp(self): - cleanUp() - - def tearDown(self): - cleanUp() - - def _callFUT(self, request): - from repoze.bfg.i18n import negotiate_locale_name - return negotiate_locale_name(request) - - def _registerImpl(self, impl): - from repoze.bfg.threadlocal import get_current_registry - registry = get_current_registry() - from repoze.bfg.interfaces import ILocaleNegotiator - registry.registerUtility(impl, ILocaleNegotiator) - - def test_no_registry_on_request(self): - self._registerImpl(dummy_negotiator) - request = DummyRequest() - result = self._callFUT(request) - self.assertEqual(result, 'bogus') - - def test_with_registry_on_request(self): - from repoze.bfg.threadlocal import get_current_registry - registry = get_current_registry() - self._registerImpl(dummy_negotiator) - request = DummyRequest() - request.registry = registry - result = self._callFUT(request) - self.assertEqual(result, 'bogus') - - def test_default_from_settings(self): - from repoze.bfg.threadlocal import get_current_registry - registry = get_current_registry() - settings = {'default_locale_name':'settings'} - from repoze.bfg.interfaces import ISettings - registry.registerUtility(settings, ISettings) - request = DummyRequest() - request.registry = registry - result = self._callFUT(request) - self.assertEqual(result, 'settings') - - def test_use_default_locale_negotiator(self): - from repoze.bfg.threadlocal import get_current_registry - registry = get_current_registry() - request = DummyRequest() - request.registry = registry - request._LOCALE_ = 'locale' - result = self._callFUT(request) - self.assertEqual(result, 'locale') - - def test_default_default(self): - request = DummyRequest() - result = self._callFUT(request) - self.assertEqual(result, 'en') - -class Test_get_locale_name(unittest.TestCase): - def setUp(self): - cleanUp() - - def tearDown(self): - cleanUp() - - def _callFUT(self, request): - from repoze.bfg.i18n import get_locale_name - return get_locale_name(request) - - def _registerImpl(self, impl): - from repoze.bfg.threadlocal import get_current_registry - registry = get_current_registry() - from repoze.bfg.interfaces import ILocaleNegotiator - registry.registerUtility(impl, ILocaleNegotiator) - - def test_name_on_request(self): - request = DummyRequest() - request.bfg_locale_name = 'ie' - result = self._callFUT(request) - self.assertEqual(result, 'ie') - - def test_name_not_on_request(self): - self._registerImpl(dummy_negotiator) - request = DummyRequest() - result = self._callFUT(request) - self.assertEqual(result, 'bogus') - self.assertEqual(request.bfg_locale_name, 'bogus') - -class Test_get_localizer(unittest.TestCase): - def setUp(self): - cleanUp() - - def tearDown(self): - cleanUp() - - def _callFUT(self, request): - from repoze.bfg.i18n import get_localizer - return get_localizer(request) - - def test_no_registry_on_request(self): - request = DummyRequest() - request.bfg_localizer = '123' - result = self._callFUT(request) - self.assertEqual(result, '123') - - def test_with_registry_on_request(self): - from repoze.bfg.threadlocal import get_current_registry - registry = get_current_registry() - request = DummyRequest() - request.bfg_localizer = '123' - request.registry = registry - result = self._callFUT(request) - self.assertEqual(result, '123') - - def test_locale_on_request(self): - request = DummyRequest() - request.bfg_localizer = 'abc' - result = self._callFUT(request) - self.assertEqual(result, 'abc') - - def test_locale_from_registry(self): - from repoze.bfg.threadlocal import get_current_registry - from repoze.bfg.interfaces import ILocalizer - registry = get_current_registry() - locale = 'abc' - registry.registerUtility(locale, ILocalizer, name='en') - request = DummyRequest() - request.bfg_locale_name = 'en' - result = self._callFUT(request) - self.assertEqual(result, 'abc') - - def test_locale_from_mo(self): - import os - from repoze.bfg.threadlocal import get_current_registry - from repoze.bfg.interfaces import ITranslationDirectories - from repoze.bfg.i18n import Localizer - registry = get_current_registry() - here = os.path.dirname(__file__) - localedir = os.path.join(here, 'localeapp', 'locale') - localedirs = [localedir] - registry.registerUtility(localedirs, ITranslationDirectories) - request = DummyRequest() - request.bfg_locale_name = 'de' - result = self._callFUT(request) - self.assertEqual(result.__class__, Localizer) - self.assertEqual(result.translate('Approve', 'deformsite'), - 'Genehmigen') - self.assertEqual(result.translate('Approve'), 'Approve') - self.failUnless(hasattr(result, 'pluralize')) - - def test_locale_from_mo_bad_mo(self): - import os - from repoze.bfg.threadlocal import get_current_registry - from repoze.bfg.interfaces import ITranslationDirectories - from repoze.bfg.i18n import Localizer - registry = get_current_registry() - here = os.path.dirname(__file__) - localedir = os.path.join(here, 'localeapp', 'locale') - localedirs = [localedir] - registry.registerUtility(localedirs, ITranslationDirectories) - request = DummyRequest() - request.bfg_locale_name = 'be' - result = self._callFUT(request) - self.assertEqual(result.__class__, Localizer) - self.assertEqual(result.translate('Approve', 'deformsite'), - 'Approve') - -class Test_default_locale_negotiator(unittest.TestCase): - def setUp(self): - cleanUp() - - def tearDown(self): - cleanUp() - - def _callFUT(self, request): - from repoze.bfg.i18n import default_locale_negotiator - return default_locale_negotiator(request) - - def test_from_none(self): - request = DummyRequest() - result = self._callFUT(request) - self.assertEqual(result, None) - - def test_from_request_attr(self): - request = DummyRequest() - request._LOCALE_ = 'foo' - result = self._callFUT(request) - self.assertEqual(result, 'foo') - - def test_from_params(self): - request = DummyRequest() - request.params['_LOCALE_'] = 'foo' - result = self._callFUT(request) - self.assertEqual(result, 'foo') - - def test_from_cookies(self): - request = DummyRequest() - request.cookies['_LOCALE_'] = 'foo' - result = self._callFUT(request) - self.assertEqual(result, 'foo') - -class TestTranslations(unittest.TestCase): - def _getTargetClass(self): - from repoze.bfg.i18n import Translations - return Translations - - def _makeOne(self): - messages1 = [ - ('foo', 'Voh'), - (('foo1', 1), 'Voh1'), - ] - messages2 = [ - ('foo', 'VohD'), - (('foo1', 1), 'VohD1'), - ] - - klass = self._getTargetClass() - - translations1 = klass(None, domain='messages') - translations1._catalog = dict(messages1) - translations1.plural = lambda *arg: 1 - translations2 = klass(None, domain='messages1') - translations2._catalog = dict(messages2) - translations2.plural = lambda *arg: 1 - translations = translations1.add(translations2, merge=False) - return translations - - def test_load_domain_None(self): - import gettext - import os - here = os.path.dirname(__file__) - localedir = os.path.join(here, 'localeapp', 'locale') - locales = ['de', 'en'] - klass = self._getTargetClass() - result = klass.load(localedir, locales, domain=None) - self.assertEqual(result.__class__, gettext.NullTranslations) - - def test_load_found_locale_and_domain(self): - import os - here = os.path.dirname(__file__) - localedir = os.path.join(here, 'localeapp', 'locale') - locales = ['de', 'en'] - klass = self._getTargetClass() - result = klass.load(localedir, locales, domain='deformsite') - self.assertEqual(result.__class__, klass) - - def test_load_found_locale_and_domain_locale_is_string(self): - import os - here = os.path.dirname(__file__) - localedir = os.path.join(here, 'localeapp', 'locale') - locales = 'de' - klass = self._getTargetClass() - result = klass.load(localedir, locales, domain='deformsite') - self.assertEqual(result.__class__, klass) - - def test___repr__(self): - inst = self._makeOne() - result = repr(inst) - self.assertEqual(result, '<Translations: "None">') - - def test_merge_not_gnutranslations(self): - inst = self._makeOne() - self.assertEqual(inst.merge(None), inst) - - def test_merge_gnutranslations(self): - inst = self._makeOne() - inst2 = self._makeOne() - inst2._catalog['a'] = 'b' - inst.merge(inst2) - self.assertEqual(inst._catalog['a'], 'b') - - def test_add_different_domain_merge_true_notexisting(self): - inst = self._makeOne() - inst2 = self._makeOne() - inst2.domain = 'domain2' - inst.add(inst2) - self.assertEqual(inst._domains['domain2'], inst2) - - def test_add_different_domain_merge_true_existing(self): - inst = self._makeOne() - inst2 = self._makeOne() - inst3 = self._makeOne() - inst2.domain = 'domain2' - inst2._catalog['a'] = 'b' - inst3.domain = 'domain2' - inst._domains['domain2'] = inst3 - inst.add(inst2) - self.assertEqual(inst._domains['domain2'], inst3) - self.assertEqual(inst3._catalog['a'], 'b') - - def test_add_same_domain_merge_true(self): - inst = self._makeOne() - inst2 = self._makeOne() - inst2._catalog['a'] = 'b' - inst.add(inst2) - self.assertEqual(inst._catalog['a'], 'b') - - def test_dgettext(self): - t = self._makeOne() - self.assertEqual(t.dgettext('messages', 'foo'), 'Voh') - self.assertEqual(t.dgettext('messages1', 'foo'), 'VohD') - - def test_ldgettext(self): - t = self._makeOne() - self.assertEqual(t.ldgettext('messages', 'foo'), 'Voh') - self.assertEqual(t.ldgettext('messages1', 'foo'), 'VohD') - - def test_dugettext(self): - t = self._makeOne() - self.assertEqual(t.dugettext('messages', 'foo'), 'Voh') - self.assertEqual(t.dugettext('messages1', 'foo'), 'VohD') - - def test_dngettext(self): - t = self._makeOne() - self.assertEqual(t.dngettext('messages', 'foo1', 'foos1', 1), 'Voh1') - self.assertEqual(t.dngettext('messages1', 'foo1', 'foos1', 1), 'VohD1') - - def test_ldngettext(self): - t = self._makeOne() - self.assertEqual(t.ldngettext('messages', 'foo1', 'foos1', 1), 'Voh1') - self.assertEqual(t.ldngettext('messages1', 'foo1', 'foos1', 1), 'VohD1') - - def test_dungettext(self): - t = self._makeOne() - self.assertEqual(t.dungettext('messages', 'foo1', 'foos1', 1), 'Voh1') - self.assertEqual(t.dungettext('messages1', 'foo1', 'foos1', 1), 'VohD1') - - -class DummyRequest(object): - def __init__(self): - self.params = {} - self.cookies = {} - -def dummy_negotiator(request): - return 'bogus' - -class DummyTranslations(object): - def ugettext(self, text): - return text - - def ungettext(self, singular, plural, n): - return singular diff --git a/repoze/bfg/tests/test_integration.py b/repoze/bfg/tests/test_integration.py deleted file mode 100644 index b6eb860ee..000000000 --- a/repoze/bfg/tests/test_integration.py +++ /dev/null @@ -1,236 +0,0 @@ -import os -import unittest - -from repoze.bfg.wsgi import wsgiapp -from repoze.bfg.view import bfg_view -from repoze.bfg.view import static - -from zope.interface import Interface - -from repoze.bfg import testing - -class INothing(Interface): - pass - -@bfg_view(for_=INothing) -@wsgiapp -def wsgiapptest(environ, start_response): - """ """ - return '123' - -class WGSIAppPlusBFGViewTests(unittest.TestCase): - def test_it(self): - from venusian import ATTACH_ATTR - import types - self.failUnless(getattr(wsgiapptest, ATTACH_ATTR)) - self.failUnless(type(wsgiapptest) is types.FunctionType) - context = DummyContext() - request = DummyRequest() - result = wsgiapptest(context, request) - self.assertEqual(result, '123') - - def test_scanned(self): - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.configuration import Configurator - from repoze.bfg.tests import test_integration - config = Configurator() - config.scan(test_integration) - reg = config.registry - view = reg.adapters.lookup( - (IViewClassifier, IRequest, INothing), IView, name='') - self.assertEqual(view, wsgiapptest) - -here = os.path.dirname(__file__) -staticapp = static(os.path.join(here, 'fixtures')) - -class TestStaticApp(unittest.TestCase): - def test_it(self): - from webob import Request - context = DummyContext() - from StringIO import StringIO - request = Request({'PATH_INFO':'', - 'SCRIPT_NAME':'', - 'SERVER_NAME':'localhost', - 'SERVER_PORT':'80', - 'REQUEST_METHOD':'GET', - 'wsgi.version':(1,0), - 'wsgi.url_scheme':'http', - 'wsgi.input':StringIO()}) - request.subpath = ['minimal.pt'] - result = staticapp(context, request) - self.assertEqual(result.status, '200 OK') - self.assertEqual( - result.body, - open(os.path.join(here, 'fixtures/minimal.pt'), 'r').read()) - -class TwillBase(unittest.TestCase): - root_factory = None - def setUp(self): - import sys - import twill - from repoze.bfg.configuration import Configurator - config = Configurator(root_factory=self.root_factory) - config.load_zcml(self.config) - twill.add_wsgi_intercept('localhost', 6543, config.make_wsgi_app) - if sys.platform is 'win32': # pragma: no cover - out = open('nul:', 'wb') - else: - out = open('/dev/null', 'wb') - twill.set_output(out) - testing.setUp(registry=config.registry) - - def tearDown(self): - import twill - import twill.commands - twill.commands.reset_browser() - twill.remove_wsgi_intercept('localhost', 6543) - twill.set_output(None) - testing.tearDown() - -class TestFixtureApp(TwillBase): - config = 'repoze.bfg.tests.fixtureapp:configure.zcml' - def test_it(self): - import twill.commands - browser = twill.commands.get_browser() - browser.go('http://localhost:6543/another.html') - self.assertEqual(browser.get_code(), 200) - self.assertEqual(browser.get_html(), 'fixture') - browser.go('http://localhost:6543') - self.assertEqual(browser.get_code(), 200) - self.assertEqual(browser.get_html(), 'fixture') - browser.go('http://localhost:6543/dummyskin.html') - self.assertEqual(browser.get_code(), 404) - browser.go('http://localhost:6543/error.html') - self.assertEqual(browser.get_code(), 200) - self.assertEqual(browser.get_html(), 'supressed') - browser.go('http://localhost:6543/protected.html') - self.assertEqual(browser.get_code(), 401) - -class TestCCBug(TwillBase): - # "unordered" as reported in IRC by author of - # http://labs.creativecommons.org/2010/01/13/cc-engine-and-web-non-frameworks/ - config = 'repoze.bfg.tests.ccbugapp:configure.zcml' - def test_it(self): - import twill.commands - browser = twill.commands.get_browser() - browser.go('http://localhost:6543/licenses/1/v1/rdf') - self.assertEqual(browser.get_code(), 200) - self.assertEqual(browser.get_html(), 'rdf') - browser.go('http://localhost:6543/licenses/1/v1/juri') - self.assertEqual(browser.get_code(), 200) - self.assertEqual(browser.get_html(), 'juri') - -class TestHybridApp(TwillBase): - # make sure views registered for a route "win" over views registered - # without one, even though the context of the non-route view may - # be more specific than the route view. - config = 'repoze.bfg.tests.hybridapp:configure.zcml' - def test_it(self): - import twill.commands - browser = twill.commands.get_browser() - browser.go('http://localhost:6543/') - self.assertEqual(browser.get_code(), 200) - self.assertEqual(browser.get_html(), 'global') - browser.go('http://localhost:6543/abc') - self.assertEqual(browser.get_code(), 200) - self.assertEqual(browser.get_html(), 'route') - browser.go('http://localhost:6543/def') - self.assertEqual(browser.get_code(), 200) - self.assertEqual(browser.get_html(), 'route2') - browser.go('http://localhost:6543/ghi') - self.assertEqual(browser.get_code(), 200) - self.assertEqual(browser.get_html(), 'global') - browser.go('http://localhost:6543/jkl') - self.assertEqual(browser.get_code(), 404) - browser.go('http://localhost:6543/mno/global2') - self.assertEqual(browser.get_code(), 404) - browser.go('http://localhost:6543/pqr/global2') - self.assertEqual(browser.get_code(), 200) - self.assertEqual(browser.get_html(), 'global2') - browser.go('http://localhost:6543/error') - self.assertEqual(browser.get_code(), 200) - self.assertEqual(browser.get_html(), 'supressed') - browser.go('http://localhost:6543/error2') - self.assertEqual(browser.get_code(), 200) - self.assertEqual(browser.get_html(), 'supressed2') - browser.go('http://localhost:6543/error_sub') - self.assertEqual(browser.get_code(), 200) - self.assertEqual(browser.get_html(), 'supressed2') - -class TestRestBugApp(TwillBase): - # test bug reported by delijati 2010/2/3 (http://pastebin.com/d4cc15515) - config = 'repoze.bfg.tests.restbugapp:configure.zcml' - def test_it(self): - import twill.commands - browser = twill.commands.get_browser() - browser.go('http://localhost:6543/pet') - self.assertEqual(browser.get_code(), 200) - self.assertEqual(browser.get_html(), 'gotten') - -class TestViewDecoratorApp(TwillBase): - config = 'repoze.bfg.tests.viewdecoratorapp:configure.zcml' - def test_it(self): - import twill.commands - browser = twill.commands.get_browser() - browser.go('http://localhost:6543/first') - self.assertEqual(browser.get_code(), 200) - self.failUnless('OK' in browser.get_html()) - - browser.go('http://localhost:6543/second') - self.assertEqual(browser.get_code(), 200) - self.failUnless('OK2' in browser.get_html()) - - browser.go('http://localhost:6543/third') - self.assertEqual(browser.get_code(), 200) - self.failUnless('OK3' in browser.get_html()) - -from repoze.bfg.tests.exceptionviewapp.models import AnException, NotAnException -excroot = {'anexception':AnException(), - 'notanexception':NotAnException()} - -class TestExceptionViewsApp(TwillBase): - config = 'repoze.bfg.tests.exceptionviewapp:configure.zcml' - root_factory = lambda *arg: excroot - def test_it(self): - import twill.commands - browser = twill.commands.get_browser() - browser.go('http://localhost:6543/') - self.assertEqual(browser.get_code(), 200) - self.failUnless('maybe' in browser.get_html()) - - browser.go('http://localhost:6543/notanexception') - self.assertEqual(browser.get_code(), 200) - self.failUnless('no' in browser.get_html()) - - browser.go('http://localhost:6543/anexception') - self.assertEqual(browser.get_code(), 200) - self.failUnless('yes' in browser.get_html()) - - browser.go('http://localhost:6543/route_raise_exception') - self.assertEqual(browser.get_code(), 200) - self.failUnless('yes' in browser.get_html()) - - browser.go('http://localhost:6543/route_raise_exception2') - self.assertEqual(browser.get_code(), 200) - self.failUnless('yes' in browser.get_html()) - - browser.go('http://localhost:6543/route_raise_exception3') - self.assertEqual(browser.get_code(), 200) - self.failUnless('whoa' in browser.get_html()) - - browser.go('http://localhost:6543/route_raise_exception4') - self.assertEqual(browser.get_code(), 200) - self.failUnless('whoa' in browser.get_html()) - -class DummyContext(object): - pass - -class DummyRequest: - subpath = ('__init__.py',) - traversed = None - environ = {'REQUEST_METHOD':'GET', 'wsgi.version':(1,0)} - def get_response(self, application): - return application(None, None) - diff --git a/repoze/bfg/tests/test_location.py b/repoze/bfg/tests/test_location.py deleted file mode 100644 index 9b8360f8b..000000000 --- a/repoze/bfg/tests/test_location.py +++ /dev/null @@ -1,40 +0,0 @@ -import unittest - -class TestInside(unittest.TestCase): - def _callFUT(self, one, two): - from repoze.bfg.location import inside - return inside(one, two) - - def test_inside(self): - o1 = Location() - o2 = Location(); o2.__parent__ = o1 - o3 = Location(); o3.__parent__ = o2 - o4 = Location(); o4.__parent__ = o3 - - self.assertEqual(self._callFUT(o1, o1), True) - self.assertEqual(self._callFUT(o2, o1), True) - self.assertEqual(self._callFUT(o3, o1), True) - self.assertEqual(self._callFUT(o4, o1), True) - self.assertEqual(self._callFUT(o1, o4), False) - self.assertEqual(self._callFUT(o1, None), False) - -class TestLineage(unittest.TestCase): - def _callFUT(self, context): - from repoze.bfg.location import lineage - return lineage(context) - - def test_lineage(self): - o1 = Location() - o2 = Location(); o2.__parent__ = o1 - o3 = Location(); o3.__parent__ = o2 - o4 = Location(); o4.__parent__ = o3 - result = list(self._callFUT(o3)) - self.assertEqual(result, [o3, o2, o1]) - result = list(self._callFUT(o1)) - self.assertEqual(result, [o1]) - -from repoze.bfg.interfaces import ILocation -from zope.interface import implements -class Location(object): - implements(ILocation) - __name__ = __parent__ = None diff --git a/repoze/bfg/tests/test_log.py b/repoze/bfg/tests/test_log.py deleted file mode 100644 index 4cc8d12a0..000000000 --- a/repoze/bfg/tests/test_log.py +++ /dev/null @@ -1,16 +0,0 @@ -import unittest - -class TestFunctions(unittest.TestCase): - def test_make_stream_logger(self): - from repoze.bfg.log import make_stream_logger - import logging - import sys - logger = make_stream_logger('foo', sys.stderr, levelname='DEBUG', - fmt='%(message)s') - self.assertEqual(logger.name, 'foo') - self.assertEqual(logger.handlers[0].stream, sys.stderr) - self.assertEqual(logger.handlers[0].formatter._fmt, '%(message)s') - self.assertEqual(logger.level, logging.DEBUG) - - - diff --git a/repoze/bfg/tests/test_paster.py b/repoze/bfg/tests/test_paster.py deleted file mode 100644 index 43837b5f0..000000000 --- a/repoze/bfg/tests/test_paster.py +++ /dev/null @@ -1,186 +0,0 @@ -import unittest - -class TestBFGShellCommand(unittest.TestCase): - def _getTargetClass(self): - from repoze.bfg.paster import BFGShellCommand - return BFGShellCommand - - def _makeOne(self): - return self._getTargetClass()('bfgshell') - - def test_command_ipython_disabled(self): - command = self._makeOne() - interact = DummyInteractor() - app = DummyApp() - loadapp = DummyLoadApp(app) - command.interact = (interact,) - command.loadapp = (loadapp,) - command.args = ('/foo/bar/myapp.ini', 'myapp') - class Options(object): pass - command.options = Options() - command.options.disable_ipython =True - command.command(IPShell=None) - self.assertEqual(loadapp.config_name, 'config:/foo/bar/myapp.ini') - self.assertEqual(loadapp.section_name, 'myapp') - self.failUnless(loadapp.relative_to) - self.assertEqual(len(app.threadlocal_manager.pushed), 1) - pushed = app.threadlocal_manager.pushed[0] - self.assertEqual(pushed['registry'], dummy_registry) - self.assertEqual(pushed['request'].registry, dummy_registry) - self.assertEqual(interact.local, {'root':dummy_root}) - self.failUnless(interact.banner) - self.assertEqual(len(app.threadlocal_manager.popped), 1) - - def test_command_ipython_enabled(self): - command = self._makeOne() - app = DummyApp() - loadapp = DummyLoadApp(app) - command.loadapp = (loadapp,) - dummy_shell_factory = DummyIPShellFactory() - command.args = ('/foo/bar/myapp.ini', 'myapp') - class Options(object): pass - command.options = Options() - command.options.disable_ipython = False - command.command(IPShell=dummy_shell_factory) - self.assertEqual(loadapp.config_name, 'config:/foo/bar/myapp.ini') - self.assertEqual(loadapp.section_name, 'myapp') - self.failUnless(loadapp.relative_to) - self.assertEqual(len(app.threadlocal_manager.pushed), 1) - pushed = app.threadlocal_manager.pushed[0] - self.assertEqual(pushed['registry'], dummy_registry) - self.assertEqual(pushed['request'].registry, dummy_registry) - self.assertEqual(dummy_shell_factory.shell.local_ns,{'root':dummy_root}) - self.assertEqual(dummy_shell_factory.shell.global_ns, {}) - self.failUnless('\n\n' in dummy_shell_factory.shell.IP.BANNER) - self.assertEqual(len(app.threadlocal_manager.popped), 1) - - def test_command_get_app_hookable(self): - from paste.deploy import loadapp - command = self._makeOne() - app = DummyApp() - apped = [] - def get_app(*arg, **kw): - apped.append((arg, kw)) - return app - command.get_app = get_app - interact = DummyInteractor() - app = DummyApp() - command.interact = (interact,) - command.args = ('/foo/bar/myapp.ini', 'myapp') - class Options(object): pass - command.options = Options() - command.options.disable_ipython =True - command.command(IPShell=None) - self.assertEqual(len(app.threadlocal_manager.pushed), 1) - pushed = app.threadlocal_manager.pushed[0] - self.assertEqual(pushed['registry'], dummy_registry) - self.assertEqual(pushed['request'].registry, dummy_registry) - self.assertEqual(interact.local, {'root':dummy_root}) - self.failUnless(interact.banner) - self.assertEqual(len(app.threadlocal_manager.popped), 1) - self.assertEqual(apped, [(('/foo/bar/myapp.ini', 'myapp'), - {'loadapp': loadapp})]) - - def test_command_get_root_hookable(self): - command = self._makeOne() - interact = DummyInteractor() - app = DummyApp() - loadapp = DummyLoadApp(app) - command.interact = (interact,) - command.loadapp = (loadapp,) - root = Dummy() - apps = [] - def get_root(app): - apps.append(app) - return root, lambda *arg: None - command.get_root =get_root - command.args = ('/foo/bar/myapp.ini', 'myapp') - class Options(object): pass - command.options = Options() - command.options.disable_ipython =True - command.command(IPShell=None) - self.assertEqual(loadapp.config_name, 'config:/foo/bar/myapp.ini') - self.assertEqual(loadapp.section_name, 'myapp') - self.failUnless(loadapp.relative_to) - self.assertEqual(len(app.threadlocal_manager.pushed), 0) - self.assertEqual(interact.local, {'root':root}) - self.failUnless(interact.banner) - self.assertEqual(apps, [app]) - -class TestGetApp(unittest.TestCase): - def _callFUT(self, config_file, section_name, loadapp): - from repoze.bfg.paster import get_app - return get_app(config_file, section_name, loadapp) - - def test_it(self): - import os - app = DummyApp() - loadapp = DummyLoadApp(app) - result = self._callFUT('/foo/bar/myapp.ini', 'myapp', loadapp) - self.assertEqual(loadapp.config_name, 'config:/foo/bar/myapp.ini') - self.assertEqual(loadapp.section_name, 'myapp') - self.assertEqual(loadapp.relative_to, os.getcwd()) - self.assertEqual(result, app) - -class Dummy: - pass - -class DummyIPShellFactory(object): - def __call__(self, argv, user_ns=None): - shell = DummyIPShell() - shell(user_ns, {}) - self.shell = shell - return shell - -class DummyIPShell(object): - IP = Dummy() - IP.BANNER = 'foo' - def __call__(self, local_ns, global_ns): - self.local_ns = local_ns - self.global_ns = global_ns - - def mainloop(self): - pass - -dummy_root = Dummy() - -class DummyRegistry(object): - def queryUtility(self, iface, default=None): - return default - -dummy_registry = DummyRegistry() - -class DummyInteractor: - def __call__(self, banner, local): - self.banner = banner - self.local = local - -class DummyLoadApp: - def __init__(self, app): - self.app = app - - def __call__(self, config_name, name=None, relative_to=None): - self.config_name = config_name - self.section_name = name - self.relative_to = relative_to - return self.app - -class DummyApp: - def __init__(self): - self.registry = dummy_registry - self.threadlocal_manager = DummyThreadLocalManager() - - def root_factory(self, environ): - return dummy_root - -class DummyThreadLocalManager: - def __init__(self): - self.pushed = [] - self.popped = [] - - def push(self, item): - self.pushed.append(item) - - def pop(self): - self.popped.append(True) - diff --git a/repoze/bfg/tests/test_path.py b/repoze/bfg/tests/test_path.py deleted file mode 100644 index 8ee0474f9..000000000 --- a/repoze/bfg/tests/test_path.py +++ /dev/null @@ -1,172 +0,0 @@ -import unittest - -class TestCallerPath(unittest.TestCase): - def tearDown(self): - from repoze.bfg.tests import test_path - if hasattr(test_path, '__bfg_abspath__'): - del test_path.__bfg_abspath__ - - def _callFUT(self, path, level=2): - from repoze.bfg.path import caller_path - return caller_path(path, level) - - def test_isabs(self): - result = self._callFUT('/a/b/c') - self.assertEqual(result, '/a/b/c') - - def test_pkgrelative(self): - import os - here = os.path.abspath(os.path.dirname(__file__)) - result = self._callFUT('a/b/c') - self.assertEqual(result, os.path.join(here, 'a/b/c')) - - def test_memoization_has_bfg_abspath(self): - import os - from repoze.bfg.tests import test_path - test_path.__bfg_abspath__ = '/foo/bar' - result = self._callFUT('a/b/c') - self.assertEqual(result, os.path.join('/foo/bar', 'a/b/c')) - - def test_memoization_success(self): - import os - here = os.path.abspath(os.path.dirname(__file__)) - from repoze.bfg.tests import test_path - result = self._callFUT('a/b/c') - self.assertEqual(result, os.path.join(here, 'a/b/c')) - self.assertEqual(test_path.__bfg_abspath__, here) - -class TestCallerModule(unittest.TestCase): - def _callFUT(self, level=2): - from repoze.bfg.path import caller_module - return caller_module(level) - - def test_it_level_1(self): - from repoze.bfg.tests import test_path - result = self._callFUT(1) - self.assertEqual(result, test_path) - - def test_it_level_2(self): - from repoze.bfg.tests import test_path - result = self._callFUT(2) - self.assertEqual(result, test_path) - - def test_it_level_3(self): - from repoze.bfg.tests import test_path - result = self._callFUT(3) - self.failIfEqual(result, test_path) - -class TestCallerPackage(unittest.TestCase): - def _callFUT(self, *arg, **kw): - from repoze.bfg.path import caller_package - return caller_package(*arg, **kw) - - def test_it_level_1(self): - from repoze.bfg import tests - result = self._callFUT(1) - self.assertEqual(result, tests) - - def test_it_level_2(self): - from repoze.bfg import tests - result = self._callFUT(2) - self.assertEqual(result, tests) - - def test_it_level_3(self): - import unittest - result = self._callFUT(3) - self.assertEqual(result, unittest) - - def test_it_package(self): - import repoze.bfg.tests - def dummy_caller_module(*arg): - return repoze.bfg.tests - result = self._callFUT(1, caller_module=dummy_caller_module) - self.assertEqual(result, repoze.bfg.tests) - -class TestPackagePath(unittest.TestCase): - def _callFUT(self, package): - from repoze.bfg.path import package_path - return package_path(package) - - def test_it_package(self): - from repoze.bfg import tests - package = DummyPackageOrModule(tests) - result = self._callFUT(package) - self.assertEqual(result, package.package_path) - - def test_it_module(self): - from repoze.bfg.tests import test_path - module = DummyPackageOrModule(test_path) - result = self._callFUT(module) - self.assertEqual(result, module.package_path) - - def test_memoization_success(self): - from repoze.bfg.tests import test_path - module = DummyPackageOrModule(test_path) - self._callFUT(module) - self.assertEqual(module.__bfg_abspath__, module.package_path) - - def test_memoization_fail(self): - from repoze.bfg.tests import test_path - module = DummyPackageOrModule(test_path, raise_exc=TypeError) - result = self._callFUT(module) - self.failIf(hasattr(module, '__bfg_abspath__')) - self.assertEqual(result, module.package_path) - -class TestPackageOf(unittest.TestCase): - def _callFUT(self, package): - from repoze.bfg.path import package_of - return package_of(package) - - def test_it_package(self): - from repoze.bfg import tests - package = DummyPackageOrModule(tests) - result = self._callFUT(package) - self.assertEqual(result, tests) - - def test_it_module(self): - import repoze.bfg.tests.test_configuration - from repoze.bfg import tests - package = DummyPackageOrModule(repoze.bfg.tests.test_configuration) - result = self._callFUT(package) - self.assertEqual(result, tests) - -class TestPackageName(unittest.TestCase): - def _callFUT(self, package): - from repoze.bfg.path import package_name - return package_name(package) - - def test_it_package(self): - from repoze.bfg import tests - package = DummyPackageOrModule(tests) - result = self._callFUT(package) - self.assertEqual(result, 'repoze.bfg.tests') - - def test_it_module(self): - from repoze.bfg.tests import test_path - module = DummyPackageOrModule(test_path) - result = self._callFUT(module) - self.assertEqual(result, 'repoze.bfg.tests') - - def test_it_None(self): - result = self._callFUT(None) - self.assertEqual(result, '__main__') - -class DummyPackageOrModule: - def __init__(self, real_package_or_module, raise_exc=None): - self.__dict__['raise_exc'] = raise_exc - self.__dict__['__name__'] = real_package_or_module.__name__ - import os - self.__dict__['package_path'] = os.path.dirname( - os.path.abspath(real_package_or_module.__file__)) - self.__dict__['__file__'] = real_package_or_module.__file__ - - def __setattr__(self, key, val): - if self.raise_exc is not None: - raise self.raise_exc - self.__dict__[key] = val - - - - - - diff --git a/repoze/bfg/tests/test_registry.py b/repoze/bfg/tests/test_registry.py deleted file mode 100644 index b6185964a..000000000 --- a/repoze/bfg/tests/test_registry.py +++ /dev/null @@ -1,42 +0,0 @@ -import unittest - -class TestRegistry(unittest.TestCase): - def _getTargetClass(self): - from repoze.bfg.registry import Registry - return Registry - - def _makeOne(self): - return self._getTargetClass()() - - def test_registerHandler_and_notify(self): - registry = self._makeOne() - self.assertEqual(registry.has_listeners, False) - L = [] - def f(event): - L.append(event) - registry.registerHandler(f, [IDummyEvent]) - self.assertEqual(registry.has_listeners, True) - event = DummyEvent() - registry.notify(event) - self.assertEqual(L, [event]) - - def test_registerSubscriptionAdapter(self): - registry = self._makeOne() - self.assertEqual(registry.has_listeners, False) - from zope.interface import Interface - registry.registerSubscriptionAdapter(DummyEvent, - [IDummyEvent], Interface) - self.assertEqual(registry.has_listeners, True) - -class DummyModule: - __path__ = "foo" - __name__ = "dummy" - __file__ = '' - -from zope.interface import Interface -from zope.interface import implements -class IDummyEvent(Interface): - pass - -class DummyEvent(object): - implements(IDummyEvent) diff --git a/repoze/bfg/tests/test_renderers.py b/repoze/bfg/tests/test_renderers.py deleted file mode 100644 index 264b4a547..000000000 --- a/repoze/bfg/tests/test_renderers.py +++ /dev/null @@ -1,499 +0,0 @@ -import unittest - -from repoze.bfg.testing import cleanUp -from repoze.bfg import testing - -class TestTemplateRendererFactory(unittest.TestCase): - def setUp(self): - cleanUp() - - def tearDown(self): - cleanUp() - - def _callFUT(self, path, factory): - from repoze.bfg.renderers import template_renderer_factory - return template_renderer_factory(path, factory) - - def test_abspath_notfound(self): - from repoze.bfg.interfaces import ITemplateRenderer - abspath = '/wont/exist' - testing.registerUtility({}, ITemplateRenderer, name=abspath) - self.assertRaises(ValueError, self._callFUT, abspath, None) - - def test_abspath_alreadyregistered(self): - from repoze.bfg.interfaces import ITemplateRenderer - import os - abspath = os.path.abspath(__file__) - renderer = {} - testing.registerUtility(renderer, ITemplateRenderer, name=abspath) - result = self._callFUT(abspath, None) - self.failUnless(result is renderer) - - def test_abspath_notyetregistered(self): - from repoze.bfg.interfaces import ITemplateRenderer - import os - abspath = os.path.abspath(__file__) - renderer = {} - testing.registerUtility(renderer, ITemplateRenderer, name=abspath) - result = self._callFUT(abspath, None) - self.failUnless(result is renderer) - - def test_relpath_path_registered(self): - renderer = {} - from repoze.bfg.interfaces import ITemplateRenderer - testing.registerUtility(renderer, ITemplateRenderer, name='foo/bar') - result = self._callFUT('foo/bar', None) - self.failUnless(renderer is result) - - def test_relpath_is_package_registered(self): - renderer = {} - from repoze.bfg.interfaces import ITemplateRenderer - testing.registerUtility(renderer, ITemplateRenderer, name='foo:bar/baz') - result = self._callFUT('foo:bar/baz', None) - self.failUnless(renderer is result) - - def test_spec_notfound(self): - self.assertRaises(ValueError, self._callFUT, - 'repoze.bfg.tests:wont/exist', None) - - def test_spec_alreadyregistered(self): - from repoze.bfg.interfaces import ITemplateRenderer - from repoze.bfg import tests - module_name = tests.__name__ - relpath = 'test_renderers.py' - spec = '%s:%s' % (module_name, relpath) - renderer = {} - testing.registerUtility(renderer, ITemplateRenderer, name=spec) - result = self._callFUT(spec, None) - self.failUnless(result is renderer) - - def test_spec_notyetregistered(self): - import os - from repoze.bfg import tests - module_name = tests.__name__ - relpath = 'test_renderers.py' - renderer = {} - factory = DummyFactory(renderer) - spec = '%s:%s' % (module_name, relpath) - result = self._callFUT(spec, factory) - self.failUnless(result is renderer) - path = os.path.abspath(__file__) - if path.endswith('pyc'): # pragma: no cover - path = path[:-1] - self.assertEqual(factory.path, path) - self.assertEqual(factory.kw, {}) - - def test_reload_resources_true(self): - from repoze.bfg.threadlocal import get_current_registry - from repoze.bfg.interfaces import ISettings - from repoze.bfg.interfaces import ITemplateRenderer - settings = {'reload_resources':True} - testing.registerUtility(settings, ISettings) - renderer = {} - factory = DummyFactory(renderer) - result = self._callFUT('repoze.bfg.tests:test_renderers.py', factory) - self.failUnless(result is renderer) - spec = '%s:%s' % ('repoze.bfg.tests', 'test_renderers.py') - reg = get_current_registry() - self.assertEqual(reg.queryUtility(ITemplateRenderer, name=spec), - None) - - def test_reload_resources_false(self): - from repoze.bfg.threadlocal import get_current_registry - from repoze.bfg.interfaces import ISettings - from repoze.bfg.interfaces import ITemplateRenderer - settings = {'reload_resources':False} - testing.registerUtility(settings, ISettings) - renderer = {} - factory = DummyFactory(renderer) - result = self._callFUT('repoze.bfg.tests:test_renderers.py', factory) - self.failUnless(result is renderer) - spec = '%s:%s' % ('repoze.bfg.tests', 'test_renderers.py') - reg = get_current_registry() - self.assertNotEqual(reg.queryUtility(ITemplateRenderer, name=spec), - None) - -class TestRendererFromName(unittest.TestCase): - def setUp(self): - cleanUp() - - def tearDown(self): - cleanUp() - - def _callFUT(self, path, package=None): - from repoze.bfg.renderers import renderer_from_name - return renderer_from_name(path, package) - - def test_it(self): - from repoze.bfg.interfaces import IRendererFactory - import os - here = os.path.dirname(os.path.abspath(__file__)) - fixture = os.path.join(here, 'fixtures/minimal.pt') - def factory(path, **kw): - return path - testing.registerUtility(factory, IRendererFactory, name='.pt') - result = self._callFUT(fixture) - self.assertEqual(result, fixture) - - def test_with_package(self): - from repoze.bfg.interfaces import IRendererFactory - def factory(path, **kw): - return path - testing.registerUtility(factory, IRendererFactory, name='.pt') - import repoze.bfg.tests - result = self._callFUT('fixtures/minimal.pt', repoze.bfg.tests) - self.assertEqual(result, 'repoze.bfg.tests:fixtures/minimal.pt') - - def test_it_no_renderer(self): - self.assertRaises(ValueError, self._callFUT, 'foo') - - -class Test_json_renderer_factory(unittest.TestCase): - def _callFUT(self, name): - from repoze.bfg.renderers import json_renderer_factory - return json_renderer_factory(name) - - def test_it(self): - renderer = self._callFUT(None) - result = renderer({'a':1}, {}) - self.assertEqual(result, '{"a": 1}') - - def test_with_request_content_type_notset(self): - request = testing.DummyRequest() - renderer = self._callFUT(None) - renderer({'a':1}, {'request':request}) - self.assertEqual(request.response_content_type, 'application/json') - - def test_with_request_content_type_set(self): - request = testing.DummyRequest() - request.response_content_type = 'text/mishmash' - renderer = self._callFUT(None) - renderer({'a':1}, {'request':request}) - self.assertEqual(request.response_content_type, 'text/mishmash') - -class Test_string_renderer_factory(unittest.TestCase): - def _callFUT(self, name): - from repoze.bfg.renderers import string_renderer_factory - return string_renderer_factory(name) - - def test_it_unicode(self): - renderer = self._callFUT(None) - value = unicode('La Pe\xc3\xb1a', 'utf-8') - result = renderer(value, {}) - self.assertEqual(result, value) - - def test_it_str(self): - renderer = self._callFUT(None) - value = 'La Pe\xc3\xb1a' - result = renderer(value, {}) - self.assertEqual(result, value) - - def test_it_other(self): - renderer = self._callFUT(None) - value = None - result = renderer(value, {}) - self.assertEqual(result, 'None') - - def test_with_request_content_type_notset(self): - request = testing.DummyRequest() - renderer = self._callFUT(None) - renderer(None, {'request':request}) - self.assertEqual(request.response_content_type, 'text/plain') - - def test_with_request_content_type_set(self): - request = testing.DummyRequest() - request.response_content_type = 'text/mishmash' - renderer = self._callFUT(None) - renderer(None, {'request':request}) - self.assertEqual(request.response_content_type, 'text/mishmash') - -class Test_rendered_response(unittest.TestCase): - def setUp(self): - testing.setUp() - from zope.deprecation import __show__ - __show__.off() - - def tearDown(self): - testing.tearDown() - from zope.deprecation import __show__ - __show__.on() - - def _callFUT(self, renderer, response, view=None, - context=None, request=None, renderer_name=None): - from repoze.bfg.renderers import rendered_response - if request is None: - request = testing.DummyRequest() - return rendered_response(renderer, response, view, - context, request, renderer_name) - - def _makeRenderer(self): - def renderer(*arg): - return 'Hello!' - return renderer - - def test_is_response(self): - renderer = self._makeRenderer() - response = DummyResponse() - result = self._callFUT(renderer, response) - self.assertEqual(result, response) - - def test_calls_renderer(self): - renderer = self._makeRenderer() - response = {'a':'1'} - result = self._callFUT(renderer, response) - self.assertEqual(result.body, 'Hello!') - - -class TestRendererHelper(unittest.TestCase): - def setUp(self): - self.config = cleanUp() - - def tearDown(self): - cleanUp() - - def _makeOne(self, *arg, **kw): - from repoze.bfg.renderers import RendererHelper - return RendererHelper(*arg, **kw) - - def _registerRendererFactory(self): - from repoze.bfg.interfaces import IRendererFactory - def renderer(*arg): - def respond(*arg): - return arg - return respond - self.config.registry.registerUtility(renderer, IRendererFactory, - name='.foo') - return renderer - - def test_resolve_spec_path_is_None(self): - helper = self._makeOne('loo.foo') - result = helper.resolve_spec(None) - self.assertEqual(result, None) - - def test_resolve_spec_package_is_None(self): - helper = self._makeOne('loo.foo') - result = helper.resolve_spec('/foo/bar') - self.assertEqual(result, '/foo/bar') - - def test_resolve_spec_absolute(self): - helper = self._makeOne('loo.foo') - result = helper.resolve_spec('repoze.bfg:flub') - self.assertEqual(result, 'repoze.bfg:flub') - - def test_resolve_spec_relative(self): - helper = self._makeOne('loo.foo', package='repoze.bfg') - result = helper.resolve_spec('flub') - self.assertEqual(result, 'repoze.bfg:flub') - - def test_render_to_response(self): - self._registerRendererFactory() - request = Dummy() - helper = self._makeOne('loo.foo') - response = helper.render_to_response('values', 'system_values', - request=request) - self.assertEqual(response.body, ('values', 'system_values')) - - def test_render_explicit_registry(self): - factory = self._registerRendererFactory() - class DummyRegistry(object): - def __init__(self): - self.responses = [factory, lambda *arg: {}] - def queryUtility(self, iface, name=None): - self.queried = True - return self.responses.pop(0) - reg = DummyRegistry() - helper = self._makeOne('loo.foo', registry=reg) - result = helper.render('value', {}) - self.assertEqual(result, ('value', {})) - self.failUnless(reg.queried) - - def test_render_system_values_is_None(self): - self._registerRendererFactory() - request = Dummy() - context = Dummy() - request.context = context - helper = self._makeOne('loo.foo') - result = helper.render('values', None, request=request) - system = {'request':request, 'context':context, - 'renderer_name':'loo.foo', 'view':None} - self.assertEqual(result, ('values', system)) - - def test_render_renderer_globals_factory_active(self): - self._registerRendererFactory() - from repoze.bfg.interfaces import IRendererGlobalsFactory - def rg(system): - return {'a':1} - self.config.registry.registerUtility(rg, IRendererGlobalsFactory) - helper = self._makeOne('loo.foo') - result = helper.render('values', None) - self.assertEqual(result[1]['a'], 1) - - def test__make_response_with_content_type(self): - request = testing.DummyRequest() - attrs = {'response_content_type':'text/nonsense'} - request.__dict__.update(attrs) - helper = self._makeOne('loo.foo') - response = helper._make_response('abc', request) - self.assertEqual(response.content_type, 'text/nonsense') - self.assertEqual(response.body, 'abc') - - def test__make_response_with_headerlist(self): - request = testing.DummyRequest() - attrs = {'response_headerlist':[('a', '1'), ('b', '2')]} - request.__dict__.update(attrs) - helper = self._makeOne('loo.foo') - response = helper._make_response('abc', request) - self.assertEqual(response.headerlist, - [('Content-Type', 'text/html; charset=UTF-8'), - ('Content-Length', '3'), - ('a', '1'), - ('b', '2')]) - self.assertEqual(response.body, 'abc') - - def test__make_response_with_status(self): - request = testing.DummyRequest() - attrs = {'response_status':'406 You Lose'} - request.__dict__.update(attrs) - helper = self._makeOne('loo.foo') - response = helper._make_response('abc', request) - self.assertEqual(response.status, '406 You Lose') - self.assertEqual(response.body, 'abc') - - def test__make_response_with_charset(self): - request = testing.DummyRequest() - attrs = {'response_charset':'UTF-16'} - request.__dict__.update(attrs) - helper = self._makeOne('loo.foo') - response = helper._make_response('abc', request) - self.assertEqual(response.charset, 'UTF-16') - - def test__make_response_with_cache_for(self): - request = testing.DummyRequest() - attrs = {'response_cache_for':100} - request.__dict__.update(attrs) - helper = self._makeOne('loo.foo') - response = helper._make_response('abc', request) - self.assertEqual(response.cache_control.max_age, 100) - - def test_with_alternate_response_factory(self): - from repoze.bfg.interfaces import IResponseFactory - class ResponseFactory(object): - def __init__(self, result): - self.result = result - self.config.registry.registerUtility(ResponseFactory, IResponseFactory) - request = testing.DummyRequest() - helper = self._makeOne('loo.foo') - response = helper._make_response('abc', request) - self.assertEqual(response.__class__, ResponseFactory) - self.assertEqual(response.result, 'abc') - - def test__make_response_with_real_request(self): - # functional - from repoze.bfg.request import Request - request = Request({}) - attrs = {'response_status':'406 You Lose'} - request.__dict__.update(attrs) - helper = self._makeOne('loo.foo') - response = helper._make_response('abc', request) - self.assertEqual(response.status, '406 You Lose') - self.assertEqual(response.body, 'abc') - -class Test_render(unittest.TestCase): - def setUp(self): - self.config = testing.setUp() - - def tearDown(self): - testing.tearDown() - - def _callFUT(self, renderer_name, value, request=None, package=None): - from repoze.bfg.renderers import render - return render(renderer_name, value, request=request, package=package) - - def test_it_no_request(self): - renderer = self.config.testing_add_renderer( - 'repoze.bfg.tests:abc/def.pt') - renderer.string_response = 'abc' - result = self._callFUT('abc/def.pt', dict(a=1)) - self.assertEqual(result, 'abc') - renderer.assert_(a=1) - renderer.assert_(request=None) - - def test_it_with_request(self): - renderer = self.config.testing_add_renderer( - 'repoze.bfg.tests:abc/def.pt') - renderer.string_response = 'abc' - request = testing.DummyRequest() - result = self._callFUT('abc/def.pt', - dict(a=1), request=request) - self.assertEqual(result, 'abc') - renderer.assert_(a=1) - renderer.assert_(request=request) - -class Test_render_to_response(unittest.TestCase): - def setUp(self): - self.config = testing.setUp() - - def tearDown(self): - testing.tearDown() - - def _callFUT(self, renderer_name, value, request=None, package=None): - from repoze.bfg.renderers import render_to_response - return render_to_response(renderer_name, value, request=request, - package=package) - - def test_it_no_request(self): - renderer = self.config.testing_add_renderer( - 'repoze.bfg.tests:abc/def.pt') - renderer.string_response = 'abc' - response = self._callFUT('abc/def.pt', dict(a=1)) - self.assertEqual(response.body, 'abc') - renderer.assert_(a=1) - renderer.assert_(request=None) - - def test_it_with_request(self): - renderer = self.config.testing_add_renderer( - 'repoze.bfg.tests:abc/def.pt') - renderer.string_response = 'abc' - request = testing.DummyRequest() - response = self._callFUT('abc/def.pt', - dict(a=1), request=request) - self.assertEqual(response.body, 'abc') - renderer.assert_(a=1) - renderer.assert_(request=request) - -class Test_get_renderer(unittest.TestCase): - def setUp(self): - self.config = testing.setUp() - - def tearDown(self): - testing.tearDown() - - def _callFUT(self, renderer_name, **kw): - from repoze.bfg.renderers import get_renderer - return get_renderer(renderer_name) - - def test_it(self): - renderer = self.config.testing_add_renderer( - 'repoze.bfg.tests:abc/def.pt') - result = self._callFUT('abc/def.pt') - self.assertEqual(result, renderer) - -class Dummy: - pass - -class DummyResponse: - status = '200 OK' - headerlist = () - app_iter = () - body = '' - -class DummyFactory: - def __init__(self, renderer): - self.renderer = renderer - - def __call__(self, path, **kw): - self.path = path - self.kw = kw - return self.renderer - - diff --git a/repoze/bfg/tests/test_request.py b/repoze/bfg/tests/test_request.py deleted file mode 100644 index f1874d60a..000000000 --- a/repoze/bfg/tests/test_request.py +++ /dev/null @@ -1,231 +0,0 @@ -import unittest - -class TestRequest(unittest.TestCase): - def _makeOne(self, environ): - return self._getTargetClass()(environ) - - def _getTargetClass(self): - from repoze.bfg.request import Request - return Request - - def test_charset_defaults_to_utf8(self): - r = self._makeOne({'PATH_INFO':'/'}) - self.assertEqual(r.charset, 'UTF-8') - - def test_exception_defaults_to_None(self): - r = self._makeOne({'PATH_INFO':'/'}) - self.assertEqual(r.exception, None) - - def test_params_decoded_from_utf_8_by_default(self): - environ = { - 'PATH_INFO':'/', - 'QUERY_STRING':'la=La%20Pe%C3%B1a' - } - request = self._makeOne(environ) - request.charset = None - self.assertEqual(request.GET['la'], u'La Pe\xf1a') - - def test_class_implements(self): - from repoze.bfg.interfaces import IRequest - klass = self._getTargetClass() - self.assertTrue(IRequest.implementedBy(klass)) - - def test_instance_provides(self): - from repoze.bfg.interfaces import IRequest - inst = self._makeOne({}) - self.assertTrue(IRequest.providedBy(inst)) - - def test_setattr_and_getattr_dotnotation(self): - inst = self._makeOne({}) - inst.foo = 1 - self.assertEqual(inst.foo, 1) - - def test_setattr_and_getattr(self): - inst = self._makeOne({}) - setattr(inst, 'bar', 1) - self.assertEqual(getattr(inst, 'bar'), 1) - - def test___contains__(self): - environ ={'zooma':1} - inst = self._makeOne(environ) - self.failUnless('zooma' in inst) - - def test___delitem__(self): - environ = {'zooma':1} - inst = self._makeOne(environ) - del inst['zooma'] - self.failIf('zooma' in environ) - - def test___getitem__(self): - environ = {'zooma':1} - inst = self._makeOne(environ) - self.assertEqual(inst['zooma'], 1) - - def test___iter__(self): - environ = {'zooma':1} - inst = self._makeOne(environ) - iterator = iter(inst) - self.assertEqual(list(iterator), list(iter(environ))) - - def test___setitem__(self): - environ = {} - inst = self._makeOne(environ) - inst['zooma'] = 1 - self.assertEqual(environ, {'zooma':1}) - - def test_get(self): - environ = {'zooma':1} - inst = self._makeOne(environ) - self.assertEqual(inst.get('zooma'), 1) - - def test_has_key(self): - environ = {'zooma':1} - inst = self._makeOne(environ) - self.assertEqual(inst.has_key('zooma'), True) - - def test_items(self): - environ = {'zooma':1} - inst = self._makeOne(environ) - self.assertEqual(inst.items(), environ.items()) - - def test_iteritems(self): - environ = {'zooma':1} - inst = self._makeOne(environ) - self.assertEqual(list(inst.iteritems()), list(environ.iteritems())) - - def test_iterkeys(self): - environ = {'zooma':1} - inst = self._makeOne(environ) - self.assertEqual(list(inst.iterkeys()), list(environ.iterkeys())) - - def test_itervalues(self): - environ = {'zooma':1} - inst = self._makeOne(environ) - self.assertEqual(list(inst.itervalues()), list(environ.itervalues())) - - def test_keys(self): - environ = {'zooma':1} - inst = self._makeOne(environ) - self.assertEqual(inst.keys(), environ.keys()) - - def test_pop(self): - environ = {'zooma':1} - inst = self._makeOne(environ) - popped = inst.pop('zooma') - self.assertEqual(environ, {}) - self.assertEqual(popped, 1) - - def test_popitem(self): - environ = {'zooma':1} - inst = self._makeOne(environ) - popped = inst.popitem() - self.assertEqual(environ, {}) - self.assertEqual(popped, ('zooma', 1)) - - def test_setdefault(self): - environ = {} - inst = self._makeOne(environ) - marker = [] - result = inst.setdefault('a', marker) - self.assertEqual(environ, {'a':marker}) - self.assertEqual(result, marker) - - def test_update(self): - environ = {} - inst = self._makeOne(environ) - inst.update({'a':1}, b=2) - self.assertEqual(environ, {'a':1, 'b':2}) - - def test_values(self): - environ = {'zooma':1} - inst = self._makeOne(environ) - result = inst.values() - self.assertEqual(result, environ.values()) - - def test_add_response_callback(self): - inst = self._makeOne({}) - self.assertEqual(inst.response_callbacks, ()) - def callback(request, response): - """ """ - inst.add_response_callback(callback) - self.assertEqual(inst.response_callbacks, [callback]) - inst.add_response_callback(callback) - self.assertEqual(inst.response_callbacks, [callback, callback]) - - def test__process_response_callbacks(self): - inst = self._makeOne({}) - def callback1(request, response): - request.called1 = True - response.called1 = True - def callback2(request, response): - request.called2 = True - response.called2 = True - inst.response_callbacks = [callback1, callback2] - response = DummyResponse() - inst._process_response_callbacks(response) - self.assertEqual(inst.called1, True) - self.assertEqual(inst.called2, True) - self.assertEqual(response.called1, True) - self.assertEqual(response.called2, True) - self.assertEqual(inst.response_callbacks, []) - - def test_add_finished_callback(self): - inst = self._makeOne({}) - self.assertEqual(inst.finished_callbacks, ()) - def callback(request): - """ """ - inst.add_finished_callback(callback) - self.assertEqual(inst.finished_callbacks, [callback]) - inst.add_finished_callback(callback) - self.assertEqual(inst.finished_callbacks, [callback, callback]) - - def test__process_finished_callbacks(self): - inst = self._makeOne({}) - def callback1(request): - request.called1 = True - def callback2(request): - request.called2 = True - inst.finished_callbacks = [callback1, callback2] - inst._process_finished_callbacks() - self.assertEqual(inst.called1, True) - self.assertEqual(inst.called2, True) - self.assertEqual(inst.finished_callbacks, []) - -class Test_route_request_iface(unittest.TestCase): - def _callFUT(self, name): - from repoze.bfg.request import route_request_iface - return route_request_iface(name) - - def test_it(self): - iface = self._callFUT('routename') - self.assertEqual(iface.__name__, 'routename_IRequest') - self.assertTrue(hasattr(iface, 'combined')) - self.assertEqual(iface.combined.__name__, 'routename_combined_IRequest') - -class Test_add_global_response_headers(unittest.TestCase): - def _callFUT(self, request, headerlist): - from repoze.bfg.request import add_global_response_headers - return add_global_response_headers(request, headerlist) - - def test_it(self): - request = DummyRequest() - response = DummyResponse() - self._callFUT(request, [('c', 1)]) - self.assertEqual(len(request.response_callbacks), 1) - request.response_callbacks[0](None, response) - self.assertEqual(response.headerlist, [('c', 1)] ) - -class DummyRequest: - def __init__(self, environ=None): - if environ is None: - environ = {} - self.environ = environ - - def add_response_callback(self, callback): - self.response_callbacks = [callback] - -class DummyResponse: - def __init__(self): - self.headerlist = [] - - diff --git a/repoze/bfg/tests/test_resource.py b/repoze/bfg/tests/test_resource.py deleted file mode 100644 index 191d72c8b..000000000 --- a/repoze/bfg/tests/test_resource.py +++ /dev/null @@ -1,431 +0,0 @@ -import unittest -from repoze.bfg.testing import cleanUp - -class TestOverrideProvider(unittest.TestCase): - def setUp(self): - cleanUp() - - def tearDown(self): - cleanUp() - - def _getTargetClass(self): - from repoze.bfg.resource import OverrideProvider - return OverrideProvider - - def _makeOne(self, module): - klass = self._getTargetClass() - return klass(module) - - def _registerOverrides(self, overrides, name='repoze.bfg.tests'): - from repoze.bfg.interfaces import IPackageOverrides - from repoze.bfg.threadlocal import get_current_registry - reg = get_current_registry() - reg.registerUtility(overrides, IPackageOverrides, name=name) - - def test_get_resource_filename_no_overrides(self): - import os - resource_name = 'test_resource.py' - import repoze.bfg.tests - provider = self._makeOne(repoze.bfg.tests) - here = os.path.dirname(os.path.abspath(__file__)) - expected = os.path.join(here, resource_name) - result = provider.get_resource_filename(None, resource_name) - self.assertEqual(result, expected) - - def test_get_resource_stream_no_overrides(self): - import os - resource_name = 'test_resource.py' - import repoze.bfg.tests - provider = self._makeOne(repoze.bfg.tests) - here = os.path.dirname(os.path.abspath(__file__)) - expected = open(os.path.join(here, resource_name)).read() - result = provider.get_resource_stream(None, resource_name) - self.assertEqual(result.read(), expected) - - def test_get_resource_string_no_overrides(self): - import os - resource_name = 'test_resource.py' - import repoze.bfg.tests - provider = self._makeOne(repoze.bfg.tests) - here = os.path.dirname(os.path.abspath(__file__)) - expected = open(os.path.join(here, resource_name)).read() - result = provider.get_resource_string(None, resource_name) - self.assertEqual(result, expected) - - def test_has_resource_no_overrides(self): - resource_name = 'test_resource.py' - import repoze.bfg.tests - provider = self._makeOne(repoze.bfg.tests) - result = provider.has_resource(resource_name) - self.assertEqual(result, True) - - def test_resource_isdir_no_overrides(self): - file_resource_name = 'test_resource.py' - directory_resource_name = 'fixtures' - import repoze.bfg.tests - provider = self._makeOne(repoze.bfg.tests) - result = provider.resource_isdir(file_resource_name) - self.assertEqual(result, False) - result = provider.resource_isdir(directory_resource_name) - self.assertEqual(result, True) - - def test_resource_listdir_no_overrides(self): - resource_name = 'fixtures' - import repoze.bfg.tests - provider = self._makeOne(repoze.bfg.tests) - result = provider.resource_isdir(resource_name) - self.failUnless(result) - - def test_get_resource_filename_override_returns_None(self): - overrides = DummyOverrides(None) - self._registerOverrides(overrides) - import os - resource_name = 'test_resource.py' - import repoze.bfg.tests - provider = self._makeOne(repoze.bfg.tests) - here = os.path.dirname(os.path.abspath(__file__)) - expected = os.path.join(here, resource_name) - result = provider.get_resource_filename(None, resource_name) - self.assertEqual(result, expected) - - def test_get_resource_stream_override_returns_None(self): - overrides = DummyOverrides(None) - self._registerOverrides(overrides) - import os - resource_name = 'test_resource.py' - import repoze.bfg.tests - provider = self._makeOne(repoze.bfg.tests) - here = os.path.dirname(os.path.abspath(__file__)) - expected = os.path.join(here, resource_name) - result = provider.get_resource_filename(None, resource_name) - self.assertEqual(result, expected) - - def test_get_resource_string_override_returns_None(self): - overrides = DummyOverrides(None) - self._registerOverrides(overrides) - import os - resource_name = 'test_resource.py' - import repoze.bfg.tests - provider = self._makeOne(repoze.bfg.tests) - here = os.path.dirname(os.path.abspath(__file__)) - expected = os.path.join(here, resource_name) - result = provider.get_resource_filename(None, resource_name) - self.assertEqual(result, expected) - - def test_has_resource_override_returns_None(self): - overrides = DummyOverrides(None) - self._registerOverrides(overrides) - resource_name = 'test_resource.py' - import repoze.bfg.tests - provider = self._makeOne(repoze.bfg.tests) - result = provider.has_resource(resource_name) - self.assertEqual(result, True) - - def test_resource_isdir_override_returns_None(self): - overrides = DummyOverrides(None) - self._registerOverrides(overrides) - resource_name = 'fixtures' - import repoze.bfg.tests - provider = self._makeOne(repoze.bfg.tests) - result = provider.resource_isdir(resource_name) - self.assertEqual(result, True) - - def test_resource_listdir_override_returns_None(self): - overrides = DummyOverrides(None) - self._registerOverrides(overrides) - resource_name = 'fixtures' - import repoze.bfg.tests - provider = self._makeOne(repoze.bfg.tests) - result = provider.resource_listdir(resource_name) - self.failUnless(result) - - def test_get_resource_filename_override_returns_value(self): - overrides = DummyOverrides('value') - import repoze.bfg.tests - self._registerOverrides(overrides) - provider = self._makeOne(repoze.bfg.tests) - result = provider.get_resource_filename(None, 'test_resource.py') - self.assertEqual(result, 'value') - - def test_get_resource_stream_override_returns_value(self): - overrides = DummyOverrides('value') - import repoze.bfg.tests - self._registerOverrides(overrides) - provider = self._makeOne(repoze.bfg.tests) - result = provider.get_resource_stream(None, 'test_resource.py') - self.assertEqual(result, 'value') - - def test_get_resource_string_override_returns_value(self): - overrides = DummyOverrides('value') - import repoze.bfg.tests - self._registerOverrides(overrides) - provider = self._makeOne(repoze.bfg.tests) - result = provider.get_resource_string(None, 'test_resource.py') - self.assertEqual(result, 'value') - - def test_has_resource_override_returns_True(self): - overrides = DummyOverrides(True) - import repoze.bfg.tests - self._registerOverrides(overrides) - provider = self._makeOne(repoze.bfg.tests) - result = provider.has_resource('test_resource.py') - self.assertEqual(result, True) - - def test_resource_isdir_override_returns_False(self): - overrides = DummyOverrides(False) - import repoze.bfg.tests - self._registerOverrides(overrides) - provider = self._makeOne(repoze.bfg.tests) - result = provider.resource_isdir('fixtures') - self.assertEqual(result, False) - - def test_resource_listdir_override_returns_values(self): - overrides = DummyOverrides(['a']) - import repoze.bfg.tests - self._registerOverrides(overrides) - provider = self._makeOne(repoze.bfg.tests) - result = provider.resource_listdir('fixtures') - self.assertEqual(result, ['a']) - -class TestPackageOverrides(unittest.TestCase): - def _getTargetClass(self): - from repoze.bfg.resource import PackageOverrides - return PackageOverrides - - def _makeOne(self, package, pkg_resources=None): - klass = self._getTargetClass() - if pkg_resources is None: - pkg_resources = DummyPkgResources() - return klass(package, pkg_resources=pkg_resources) - - def test_ctor_package_already_has_loader_of_different_type(self): - package = DummyPackage('package') - package.__loader__ = True - self.assertRaises(TypeError, self._makeOne, package) - - def test_ctor_package_already_has_loader_of_same_type(self): - package = DummyPackage('package') - package.__loader__ = self._makeOne(package) - po = self._makeOne(package) - self.assertEqual(package.__loader__, po) - - def test_ctor_sets_loader(self): - package = DummyPackage('package') - po = self._makeOne(package) - self.assertEqual(package.__loader__, po) - - def test_ctor_registers_loader_type(self): - from repoze.bfg.resource import OverrideProvider - dummy_pkg_resources = DummyPkgResources() - package = DummyPackage('package') - po = self._makeOne(package, dummy_pkg_resources) - self.assertEqual(dummy_pkg_resources.registered, [(po.__class__, - OverrideProvider)]) - - def test_ctor_sets_local_state(self): - package = DummyPackage('package') - po = self._makeOne(package) - self.assertEqual(po.overrides, []) - self.assertEqual(po.overridden_package_name, 'package') - - def test_insert_directory(self): - from repoze.bfg.resource import DirectoryOverride - package = DummyPackage('package') - po = self._makeOne(package) - po.overrides= [None] - po.insert('foo/', 'package', 'bar/') - self.assertEqual(len(po.overrides), 2) - override = po.overrides[0] - self.assertEqual(override.__class__, DirectoryOverride) - - def test_insert_file(self): - from repoze.bfg.resource import FileOverride - package = DummyPackage('package') - po = self._makeOne(package) - po.overrides= [None] - po.insert('foo.pt', 'package', 'bar.pt') - self.assertEqual(len(po.overrides), 2) - override = po.overrides[0] - self.assertEqual(override.__class__, FileOverride) - - def test_search_path(self): - overrides = [ DummyOverride(None), DummyOverride(('package', 'name'))] - package = DummyPackage('package') - po = self._makeOne(package) - po.overrides= overrides - self.assertEqual(list(po.search_path('whatever')), - [('package', 'name')]) - - def test_get_filename(self): - import os - overrides = [ DummyOverride(None), DummyOverride( - ('repoze.bfg.tests', 'test_resource.py'))] - package = DummyPackage('package') - po = self._makeOne(package) - po.overrides= overrides - here = os.path.dirname(os.path.abspath(__file__)) - expected = os.path.join(here, 'test_resource.py') - self.assertEqual(po.get_filename('whatever'), expected) - - def test_get_stream(self): - import os - overrides = [ DummyOverride(None), DummyOverride( - ('repoze.bfg.tests', 'test_resource.py'))] - package = DummyPackage('package') - po = self._makeOne(package) - po.overrides= overrides - here = os.path.dirname(os.path.abspath(__file__)) - expected = open(os.path.join(here, 'test_resource.py')).read() - self.assertEqual(po.get_stream('whatever').read(), expected) - - def test_get_string(self): - import os - overrides = [ DummyOverride(None), DummyOverride( - ('repoze.bfg.tests', 'test_resource.py'))] - package = DummyPackage('package') - po = self._makeOne(package) - po.overrides= overrides - here = os.path.dirname(os.path.abspath(__file__)) - expected = open(os.path.join(here, 'test_resource.py')).read() - self.assertEqual(po.get_string('whatever'), expected) - - def test_has_resource(self): - overrides = [ DummyOverride(None), DummyOverride( - ('repoze.bfg.tests', 'test_resource.py'))] - package = DummyPackage('package') - po = self._makeOne(package) - po.overrides= overrides - self.assertEqual(po.has_resource('whatever'), True) - - def test_isdir_false(self): - overrides = [ DummyOverride( - ('repoze.bfg.tests', 'test_resource.py'))] - package = DummyPackage('package') - po = self._makeOne(package) - po.overrides= overrides - self.assertEqual(po.isdir('whatever'), False) - - def test_isdir_true(self): - overrides = [ DummyOverride( - ('repoze.bfg.tests', 'fixtures'))] - package = DummyPackage('package') - po = self._makeOne(package) - po.overrides= overrides - self.assertEqual(po.isdir('whatever'), True) - - def test_listdir(self): - overrides = [ DummyOverride( - ('repoze.bfg.tests', 'fixtures'))] - package = DummyPackage('package') - po = self._makeOne(package) - po.overrides= overrides - self.failUnless(po.listdir('whatever')) - -class TestDirectoryOverride(unittest.TestCase): - def _getTargetClass(self): - from repoze.bfg.resource import DirectoryOverride - return DirectoryOverride - - def _makeOne(self, path, package, prefix): - klass = self._getTargetClass() - return klass(path, package, prefix) - - def test_it_match(self): - o = self._makeOne('foo/', 'package', 'bar/') - result = o('foo/something.pt') - self.assertEqual(result, ('package', 'bar/something.pt')) - - def test_it_no_match(self): - o = self._makeOne('foo/', 'package', 'bar/') - result = o('baz/notfound.pt') - self.assertEqual(result, None) - -class Test_resolve_resource_spec(unittest.TestCase): - def _callFUT(self, spec, package_name='__main__'): - from repoze.bfg.resource import resolve_resource_spec - return resolve_resource_spec(spec, package_name) - - def test_abspath(self): - import os - here = os.path.dirname(__file__) - path = os.path.abspath(here) - package_name, filename = self._callFUT(path, 'apackage') - self.assertEqual(filename, path) - self.assertEqual(package_name, None) - - def test_rel_spec(self): - pkg = 'repoze.bfg.tests' - path = 'test_resource.py' - package_name, filename = self._callFUT(path, pkg) - self.assertEqual(package_name, 'repoze.bfg.tests') - self.assertEqual(filename, 'test_resource.py') - - def test_abs_spec(self): - pkg = 'repoze.bfg.tests' - path = 'repoze.bfg.nottests:test_resource.py' - package_name, filename = self._callFUT(path, pkg) - self.assertEqual(package_name, 'repoze.bfg.nottests') - self.assertEqual(filename, 'test_resource.py') - - def test_package_name_is_None(self): - pkg = None - path = 'test_resource.py' - package_name, filename = self._callFUT(path, pkg) - self.assertEqual(package_name, None) - self.assertEqual(filename, 'test_resource.py') - - def test_package_name_is_package_object(self): - import repoze.bfg.tests - pkg = repoze.bfg.tests - path = 'test_resource.py' - package_name, filename = self._callFUT(path, pkg) - self.assertEqual(package_name, 'repoze.bfg.tests') - self.assertEqual(filename, 'test_resource.py') - - -class TestFileOverride(unittest.TestCase): - def _getTargetClass(self): - from repoze.bfg.resource import FileOverride - return FileOverride - - def _makeOne(self, path, package, prefix): - klass = self._getTargetClass() - return klass(path, package, prefix) - - def test_it_match(self): - o = self._makeOne('foo.pt', 'package', 'bar.pt') - result = o('foo.pt') - self.assertEqual(result, ('package', 'bar.pt')) - - def test_it_no_match(self): - o = self._makeOne('foo.pt', 'package', 'bar.pt') - result = o('notfound.pt') - self.assertEqual(result, None) - -class DummyOverride: - def __init__(self, result): - self.result = result - - def __call__(self, resource_name): - return self.result - -class DummyOverrides: - def __init__(self, result): - self.result = result - - def get_filename(self, resource_name): - return self.result - - listdir = isdir = has_resource = get_stream = get_string = get_filename - -class DummyPkgResources: - def __init__(self): - self.registered = [] - - def register_loader_type(self, typ, inst): - self.registered.append((typ, inst)) - -class DummyPackage: - def __init__(self, name): - self.__name__ = name - diff --git a/repoze/bfg/tests/test_router.py b/repoze/bfg/tests/test_router.py deleted file mode 100644 index fade0679b..000000000 --- a/repoze/bfg/tests/test_router.py +++ /dev/null @@ -1,1034 +0,0 @@ -import unittest - -from repoze.bfg import testing - -class TestRouter(unittest.TestCase): - def setUp(self): - testing.setUp() - from repoze.bfg.threadlocal import get_current_registry - self.registry = get_current_registry() - - def tearDown(self): - testing.tearDown() - - def _registerRouteRequest(self, name): - from repoze.bfg.interfaces import IRouteRequest - from repoze.bfg.request import route_request_iface - iface = route_request_iface(name) - self.registry.registerUtility(iface, IRouteRequest, name=name) - return iface - - def _connectRoute(self, name, path, factory=None): - from repoze.bfg.interfaces import IRoutesMapper - from repoze.bfg.urldispatch import RoutesMapper - mapper = self.registry.queryUtility(IRoutesMapper) - if mapper is None: - mapper = RoutesMapper() - self.registry.registerUtility(mapper, IRoutesMapper) - mapper.connect(name, path, factory) - - def _registerLogger(self): - from repoze.bfg.interfaces import IDebugLogger - logger = DummyLogger() - self.registry.registerUtility(logger, IDebugLogger) - return logger - - def _registerSettings(self, **kw): - from repoze.bfg.interfaces import ISettings - settings = {'debug_authorization':False, 'debug_notfound':False} - settings.update(kw) - self.registry.registerUtility(settings, ISettings) - - def _registerTraverserFactory(self, context, view_name='', subpath=None, - traversed=None, virtual_root=None, - virtual_root_path=None, raise_error=None, - **kw): - from repoze.bfg.interfaces import ITraverser - - if virtual_root is None: - virtual_root = context - if subpath is None: - subpath = [] - if traversed is None: - traversed = [] - if virtual_root_path is None: - virtual_root_path = [] - - class DummyTraverserFactory: - def __init__(self, root): - self.root = root - - def __call__(self, request): - if raise_error: - raise raise_error - values = {'root':self.root, - 'context':context, - 'view_name':view_name, - 'subpath':subpath, - 'traversed':traversed, - 'virtual_root':virtual_root, - 'virtual_root_path':virtual_root_path} - kw.update(values) - return kw - - self.registry.registerAdapter(DummyTraverserFactory, (None,), - ITraverser, name='') - - def _registerView(self, app, name, classifier, req_iface, ctx_iface): - from repoze.bfg.interfaces import IView - self.registry.registerAdapter( - app, (classifier, req_iface, ctx_iface), IView, name) - - def _registerEventListener(self, iface): - L = [] - def listener(event): - L.append(event) - self.registry.registerHandler(listener, (iface,)) - return L - - def _registerRootFactory(self, val): - rootfactory = DummyRootFactory(val) - from repoze.bfg.interfaces import IRootFactory - self.registry.registerUtility(rootfactory, IRootFactory) - return rootfactory - - def _getTargetClass(self): - from repoze.bfg.router import Router - return Router - - def _makeOne(self): - klass = self._getTargetClass() - return klass(self.registry) - - def _makeEnviron(self, **extras): - environ = { - 'wsgi.url_scheme':'http', - 'SERVER_NAME':'localhost', - 'SERVER_PORT':'8080', - 'REQUEST_METHOD':'GET', - 'PATH_INFO':'/', - } - environ.update(extras) - return environ - - def test_root_policy(self): - context = DummyContext() - self._registerTraverserFactory(context) - rootfactory = self._registerRootFactory('abc') - router = self._makeOne() - self.assertEqual(router.root_policy, rootfactory) - - def test_request_factory(self): - from repoze.bfg.interfaces import IRequestFactory - class DummyRequestFactory(object): - pass - self.registry.registerUtility(DummyRequestFactory, IRequestFactory) - router = self._makeOne() - self.assertEqual(router.request_factory, DummyRequestFactory) - - def test_call_traverser_default(self): - from repoze.bfg.exceptions import NotFound - environ = self._makeEnviron() - logger = self._registerLogger() - router = self._makeOne() - start_response = DummyStartResponse() - why = exc_raised(NotFound, router, environ, start_response) - self.failUnless('/' in why[0], why) - self.failIf('debug_notfound' in why[0]) - self.assertEqual(len(logger.messages), 0) - - def test_traverser_raises_notfound_class(self): - from repoze.bfg.exceptions import NotFound - environ = self._makeEnviron() - context = DummyContext() - self._registerTraverserFactory(context, raise_error=NotFound) - router = self._makeOne() - start_response = DummyStartResponse() - self.assertRaises(NotFound, router, environ, start_response) - - def test_traverser_raises_notfound_instance(self): - from repoze.bfg.exceptions import NotFound - environ = self._makeEnviron() - context = DummyContext() - self._registerTraverserFactory(context, raise_error=NotFound('foo')) - router = self._makeOne() - start_response = DummyStartResponse() - why = exc_raised(NotFound, router, environ, start_response) - self.failUnless('foo' in why[0], why) - - def test_traverser_raises_forbidden_class(self): - from repoze.bfg.exceptions import Forbidden - environ = self._makeEnviron() - context = DummyContext() - self._registerTraverserFactory(context, raise_error=Forbidden) - router = self._makeOne() - start_response = DummyStartResponse() - self.assertRaises(Forbidden, router, environ, start_response) - - def test_traverser_raises_forbidden_instance(self): - from repoze.bfg.exceptions import Forbidden - environ = self._makeEnviron() - context = DummyContext() - self._registerTraverserFactory(context, raise_error=Forbidden('foo')) - router = self._makeOne() - start_response = DummyStartResponse() - why = exc_raised(Forbidden, router, environ, start_response) - self.failUnless('foo' in why[0], why) - - def test_call_no_view_registered_no_isettings(self): - from repoze.bfg.exceptions import NotFound - environ = self._makeEnviron() - context = DummyContext() - self._registerTraverserFactory(context) - logger = self._registerLogger() - router = self._makeOne() - start_response = DummyStartResponse() - why = exc_raised(NotFound, router, environ, start_response) - self.failUnless('/' in why[0], why) - self.failIf('debug_notfound' in why[0]) - self.assertEqual(len(logger.messages), 0) - - def test_call_no_view_registered_debug_notfound_false(self): - from repoze.bfg.exceptions import NotFound - environ = self._makeEnviron() - context = DummyContext() - self._registerTraverserFactory(context) - logger = self._registerLogger() - self._registerSettings(debug_notfound=False) - router = self._makeOne() - start_response = DummyStartResponse() - why = exc_raised(NotFound, router, environ, start_response) - self.failUnless('/' in why[0], why) - self.failIf('debug_notfound' in why[0]) - self.assertEqual(len(logger.messages), 0) - - def test_call_no_view_registered_debug_notfound_true(self): - from repoze.bfg.exceptions import NotFound - environ = self._makeEnviron() - context = DummyContext() - self._registerTraverserFactory(context) - self._registerSettings(debug_notfound=True) - logger = self._registerLogger() - router = self._makeOne() - start_response = DummyStartResponse() - why = exc_raised(NotFound, router, environ, start_response) - self.failUnless( - "debug_notfound of url http://localhost:8080/; path_info: '/', " - "context:" in why[0]) - self.failUnless("view_name: '', subpath: []" in why[0]) - self.failUnless('http://localhost:8080' in why[0], why) - - self.assertEqual(len(logger.messages), 1) - message = logger.messages[0] - self.failUnless('of url http://localhost:8080' in message) - self.failUnless("path_info: '/'" in message) - self.failUnless('DummyContext instance at' in message) - self.failUnless("view_name: ''" in message) - self.failUnless("subpath: []" in message) - - def test_call_view_returns_nonresponse(self): - from repoze.bfg.interfaces import IViewClassifier - context = DummyContext() - self._registerTraverserFactory(context) - environ = self._makeEnviron() - view = DummyView('abc') - self._registerView(view, '', IViewClassifier, None, None) - router = self._makeOne() - start_response = DummyStartResponse() - self.assertRaises(ValueError, router, environ, start_response) - - def test_call_view_registered_nonspecific_default_path(self): - from repoze.bfg.interfaces import IViewClassifier - context = DummyContext() - self._registerTraverserFactory(context) - response = DummyResponse() - response.app_iter = ['Hello world'] - view = DummyView(response) - environ = self._makeEnviron() - self._registerView(view, '', IViewClassifier, None, None) - self._registerRootFactory(context) - router = self._makeOne() - start_response = DummyStartResponse() - result = router(environ, start_response) - self.assertEqual(result, ['Hello world']) - self.assertEqual(start_response.headers, ()) - self.assertEqual(start_response.status, '200 OK') - request = view.request - self.assertEqual(request.view_name, '') - self.assertEqual(request.subpath, []) - self.assertEqual(request.context, context) - self.assertEqual(request.root, context) - - def test_call_view_registered_nonspecific_nondefault_path_and_subpath(self): - from repoze.bfg.interfaces import IViewClassifier - context = DummyContext() - self._registerTraverserFactory(context, view_name='foo', - subpath=['bar'], - traversed=['context']) - self._registerRootFactory(context) - response = DummyResponse() - response.app_iter = ['Hello world'] - view = DummyView(response) - environ = self._makeEnviron() - self._registerView(view, 'foo', IViewClassifier, None, None) - router = self._makeOne() - start_response = DummyStartResponse() - result = router(environ, start_response) - self.assertEqual(result, ['Hello world']) - self.assertEqual(start_response.headers, ()) - self.assertEqual(start_response.status, '200 OK') - request = view.request - self.assertEqual(request.view_name, 'foo') - self.assertEqual(request.subpath, ['bar']) - self.assertEqual(request.context, context) - self.assertEqual(request.root, context) - - def test_call_view_registered_specific_success(self): - from zope.interface import Interface - from zope.interface import directlyProvides - class IContext(Interface): - pass - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IViewClassifier - context = DummyContext() - directlyProvides(context, IContext) - self._registerTraverserFactory(context) - self._registerRootFactory(context) - response = DummyResponse() - response.app_iter = ['Hello world'] - view = DummyView(response) - environ = self._makeEnviron() - self._registerView(view, '', IViewClassifier, IRequest, IContext) - router = self._makeOne() - start_response = DummyStartResponse() - result = router(environ, start_response) - self.assertEqual(result, ['Hello world']) - self.assertEqual(start_response.headers, ()) - self.assertEqual(start_response.status, '200 OK') - request = view.request - self.assertEqual(request.view_name, '') - self.assertEqual(request.subpath, []) - self.assertEqual(request.context, context) - self.assertEqual(request.root, context) - - def test_call_view_registered_specific_fail(self): - from zope.interface import Interface - from zope.interface import directlyProvides - from repoze.bfg.exceptions import NotFound - from repoze.bfg.interfaces import IViewClassifier - class IContext(Interface): - pass - class INotContext(Interface): - pass - from repoze.bfg.interfaces import IRequest - context = DummyContext() - directlyProvides(context, INotContext) - self._registerTraverserFactory(context, subpath=['']) - response = DummyResponse() - view = DummyView(response) - environ = self._makeEnviron() - self._registerView(view, '', IViewClassifier, IRequest, IContext) - router = self._makeOne() - start_response = DummyStartResponse() - self.assertRaises(NotFound, router, environ, start_response) - - def test_call_view_raises_forbidden(self): - from zope.interface import Interface - from zope.interface import directlyProvides - from repoze.bfg.exceptions import Forbidden - class IContext(Interface): - pass - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IViewClassifier - context = DummyContext() - directlyProvides(context, IContext) - self._registerTraverserFactory(context, subpath=['']) - response = DummyResponse() - view = DummyView(response, raise_exception=Forbidden("unauthorized")) - environ = self._makeEnviron() - self._registerView(view, '', IViewClassifier, IRequest, IContext) - router = self._makeOne() - start_response = DummyStartResponse() - why = exc_raised(Forbidden, router, environ, start_response) - self.assertEqual(why[0], 'unauthorized') - - def test_call_view_raises_notfound(self): - from zope.interface import Interface - from zope.interface import directlyProvides - class IContext(Interface): - pass - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.exceptions import NotFound - context = DummyContext() - directlyProvides(context, IContext) - self._registerTraverserFactory(context, subpath=['']) - response = DummyResponse() - view = DummyView(response, raise_exception=NotFound("notfound")) - environ = self._makeEnviron() - self._registerView(view, '', IViewClassifier, IRequest, IContext) - router = self._makeOne() - start_response = DummyStartResponse() - why = exc_raised(NotFound, router, environ, start_response) - self.assertEqual(why[0], 'notfound') - - def test_call_request_has_response_callbacks(self): - from zope.interface import Interface - from zope.interface import directlyProvides - class IContext(Interface): - pass - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IViewClassifier - context = DummyContext() - directlyProvides(context, IContext) - self._registerTraverserFactory(context, subpath=['']) - response = DummyResponse('200 OK') - def view(context, request): - def callback(request, response): - response.called_back = True - request.response_callbacks = [callback] - return response - environ = self._makeEnviron() - self._registerView(view, '', IViewClassifier, IRequest, IContext) - router = self._makeOne() - start_response = DummyStartResponse() - router(environ, start_response) - self.assertEqual(response.called_back, True) - - def test_call_request_has_finished_callbacks_when_view_succeeds(self): - from zope.interface import Interface - from zope.interface import directlyProvides - class IContext(Interface): - pass - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IViewClassifier - context = DummyContext() - directlyProvides(context, IContext) - self._registerTraverserFactory(context, subpath=['']) - response = DummyResponse('200 OK') - def view(context, request): - def callback(request): - request.environ['called_back'] = True - request.finished_callbacks = [callback] - return response - environ = self._makeEnviron() - self._registerView(view, '', IViewClassifier, IRequest, IContext) - router = self._makeOne() - start_response = DummyStartResponse() - router(environ, start_response) - self.assertEqual(environ['called_back'], True) - - def test_call_request_has_finished_callbacks_when_view_raises(self): - from zope.interface import Interface - from zope.interface import directlyProvides - class IContext(Interface): - pass - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IViewClassifier - context = DummyContext() - directlyProvides(context, IContext) - self._registerTraverserFactory(context, subpath=['']) - def view(context, request): - def callback(request): - request.environ['called_back'] = True - request.finished_callbacks = [callback] - raise NotImplementedError - environ = self._makeEnviron() - self._registerView(view, '', IViewClassifier, IRequest, IContext) - router = self._makeOne() - start_response = DummyStartResponse() - exc_raised(NotImplementedError, router, environ, start_response) - self.assertEqual(environ['called_back'], True) - - def test_call_request_factory_raises(self): - # making sure finally doesnt barf when a request cannot be created - environ = self._makeEnviron() - router = self._makeOne() - def dummy_request_factory(environ): - raise NotImplementedError - router.request_factory = dummy_request_factory - start_response = DummyStartResponse() - exc_raised(NotImplementedError, router, environ, start_response) - - def test_call_eventsends(self): - from repoze.bfg.interfaces import INewRequest - from repoze.bfg.interfaces import INewResponse - from repoze.bfg.interfaces import IContextFound - from repoze.bfg.interfaces import IViewClassifier - context = DummyContext() - self._registerTraverserFactory(context) - response = DummyResponse() - response.app_iter = ['Hello world'] - view = DummyView(response) - environ = self._makeEnviron() - self._registerView(view, '', IViewClassifier, None, None) - request_events = self._registerEventListener(INewRequest) - aftertraversal_events = self._registerEventListener(IContextFound) - response_events = self._registerEventListener(INewResponse) - router = self._makeOne() - start_response = DummyStartResponse() - result = router(environ, start_response) - self.assertEqual(len(request_events), 1) - self.assertEqual(request_events[0].request.environ, environ) - self.assertEqual(len(aftertraversal_events), 1) - self.assertEqual(aftertraversal_events[0].request.environ, environ) - self.assertEqual(len(response_events), 1) - self.assertEqual(response_events[0].response, response) - self.assertEqual(result, response.app_iter) - - def test_call_pushes_and_pops_threadlocal_manager(self): - from repoze.bfg.interfaces import IViewClassifier - context = DummyContext() - self._registerTraverserFactory(context) - response = DummyResponse() - response.app_iter = ['Hello world'] - view = DummyView(response) - environ = self._makeEnviron() - self._registerView(view, '', IViewClassifier, None, None) - router = self._makeOne() - start_response = DummyStartResponse() - router.threadlocal_manager = DummyThreadLocalManager() - router(environ, start_response) - self.assertEqual(len(router.threadlocal_manager.pushed), 1) - self.assertEqual(len(router.threadlocal_manager.popped), 1) - - def test_call_route_matches_and_has_factory(self): - from repoze.bfg.interfaces import IViewClassifier - self._registerRouteRequest('foo') - root = object() - def factory(request): - return root - self._connectRoute('foo', 'archives/:action/:article', factory) - context = DummyContext() - self._registerTraverserFactory(context) - response = DummyResponse() - response.app_iter = ['Hello world'] - view = DummyView(response) - environ = self._makeEnviron(PATH_INFO='/archives/action1/article1') - self._registerView(view, '', IViewClassifier, None, None) - self._registerRootFactory(context) - router = self._makeOne() - start_response = DummyStartResponse() - result = router(environ, start_response) - self.assertEqual(result, ['Hello world']) - self.assertEqual(start_response.headers, ()) - self.assertEqual(start_response.status, '200 OK') - request = view.request - self.assertEqual(request.view_name, '') - self.assertEqual(request.subpath, []) - self.assertEqual(request.context, context) - self.assertEqual(request.root, root) - matchdict = {'action':'action1', 'article':'article1'} - self.assertEqual(environ['bfg.routes.matchdict'], matchdict) - self.assertEqual(environ['bfg.routes.route'].name, 'foo') - self.assertEqual(request.matchdict, matchdict) - self.assertEqual(request.matched_route.name, 'foo') - - def test_call_route_matches_doesnt_overwrite_subscriber_iface(self): - from repoze.bfg.interfaces import INewRequest - from repoze.bfg.interfaces import IViewClassifier - from zope.interface import alsoProvides - from zope.interface import Interface - self._registerRouteRequest('foo') - class IFoo(Interface): - pass - def listener(event): - alsoProvides(event.request, IFoo) - self.registry.registerHandler(listener, (INewRequest,)) - root = object() - def factory(request): - return root - self._connectRoute('foo', 'archives/:action/:article', factory) - context = DummyContext() - self._registerTraverserFactory(context) - response = DummyResponse() - response.app_iter = ['Hello world'] - view = DummyView(response) - environ = self._makeEnviron(PATH_INFO='/archives/action1/article1') - self._registerView(view, '', IViewClassifier, None, None) - self._registerRootFactory(context) - router = self._makeOne() - start_response = DummyStartResponse() - result = router(environ, start_response) - self.assertEqual(result, ['Hello world']) - self.assertEqual(start_response.headers, ()) - self.assertEqual(start_response.status, '200 OK') - request = view.request - self.assertEqual(request.view_name, '') - self.assertEqual(request.subpath, []) - self.assertEqual(request.context, context) - self.assertEqual(request.root, root) - matchdict = {'action':'action1', 'article':'article1'} - self.assertEqual(environ['bfg.routes.matchdict'], matchdict) - self.assertEqual(environ['bfg.routes.route'].name, 'foo') - self.assertEqual(request.matchdict, matchdict) - self.assertEqual(request.matched_route.name, 'foo') - self.failUnless(IFoo.providedBy(request)) - - def test_root_factory_raises_notfound(self): - from repoze.bfg.interfaces import IRootFactory - from repoze.bfg.exceptions import NotFound - from zope.interface import Interface - from zope.interface import directlyProvides - def rootfactory(request): - raise NotFound('from root factory') - self.registry.registerUtility(rootfactory, IRootFactory) - class IContext(Interface): - pass - context = DummyContext() - directlyProvides(context, IContext) - environ = self._makeEnviron() - router = self._makeOne() - start_response = DummyStartResponse() - why = exc_raised(NotFound, router, environ, start_response) - self.failUnless('from root factory' in why[0]) - - def test_root_factory_raises_forbidden(self): - from repoze.bfg.interfaces import IRootFactory - from repoze.bfg.exceptions import Forbidden - from zope.interface import Interface - from zope.interface import directlyProvides - def rootfactory(request): - raise Forbidden('from root factory') - self.registry.registerUtility(rootfactory, IRootFactory) - class IContext(Interface): - pass - context = DummyContext() - directlyProvides(context, IContext) - environ = self._makeEnviron() - router = self._makeOne() - start_response = DummyStartResponse() - why = exc_raised(Forbidden, router, environ, start_response) - self.failUnless('from root factory' in why[0]) - - def test_root_factory_exception_propagating(self): - from repoze.bfg.interfaces import IRootFactory - from zope.interface import Interface - from zope.interface import directlyProvides - def rootfactory(request): - raise RuntimeError() - self.registry.registerUtility(rootfactory, IRootFactory) - class IContext(Interface): - pass - context = DummyContext() - directlyProvides(context, IContext) - environ = self._makeEnviron() - router = self._makeOne() - start_response = DummyStartResponse() - self.assertRaises(RuntimeError, router, environ, start_response) - - def test_traverser_exception_propagating(self): - environ = self._makeEnviron() - context = DummyContext() - self._registerTraverserFactory(context, raise_error=RuntimeError()) - router = self._makeOne() - start_response = DummyStartResponse() - self.assertRaises(RuntimeError, router, environ, start_response) - - def test_call_view_exception_propagating(self): - from zope.interface import Interface - from zope.interface import directlyProvides - class IContext(Interface): - pass - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IRequestFactory - def rfactory(environ): - return request - self.registry.registerUtility(rfactory, IRequestFactory) - from repoze.bfg.request import Request - request = Request.blank('/') - context = DummyContext() - directlyProvides(context, IContext) - self._registerTraverserFactory(context, subpath=['']) - response = DummyResponse() - view = DummyView(response, raise_exception=RuntimeError) - environ = self._makeEnviron() - self._registerView(view, '', IViewClassifier, IRequest, IContext) - router = self._makeOne() - start_response = DummyStartResponse() - self.assertRaises(RuntimeError, router, environ, start_response) - # ``exception`` must be attached to request even if a suitable - # exception view cannot be found - self.assertEqual(request.exception.__class__, RuntimeError) - - def test_call_view_raises_exception_view(self): - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IExceptionViewClassifier - from repoze.bfg.interfaces import IRequest - response = DummyResponse() - exception_response = DummyResponse() - exception_response.app_iter = ["Hello, world"] - view = DummyView(response, raise_exception=RuntimeError) - exception_view = DummyView(exception_response) - environ = self._makeEnviron() - self._registerView(view, '', IViewClassifier, IRequest, None) - self._registerView(exception_view, '', IExceptionViewClassifier, - IRequest, RuntimeError) - router = self._makeOne() - start_response = DummyStartResponse() - result = router(environ, start_response) - self.assertEqual(result, ["Hello, world"]) - self.assertEqual(view.request.exception.__class__, RuntimeError) - - def test_call_view_raises_super_exception_sub_exception_view(self): - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IExceptionViewClassifier - from repoze.bfg.interfaces import IRequest - class SuperException(Exception): - pass - class SubException(SuperException): - pass - response = DummyResponse() - exception_response = DummyResponse() - exception_response.app_iter = ["Hello, world"] - view = DummyView(response, raise_exception=SuperException) - exception_view = DummyView(exception_response) - environ = self._makeEnviron() - self._registerView(view, '', IViewClassifier, IRequest, None) - self._registerView(exception_view, '', IExceptionViewClassifier, - IRequest, SubException) - router = self._makeOne() - start_response = DummyStartResponse() - self.assertRaises(SuperException, router, environ, start_response) - - def test_call_view_raises_sub_exception_super_exception_view(self): - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IExceptionViewClassifier - from repoze.bfg.interfaces import IRequest - class SuperException(Exception): - pass - class SubException(SuperException): - pass - response = DummyResponse() - exception_response = DummyResponse() - exception_response.app_iter = ["Hello, world"] - view = DummyView(response, raise_exception=SubException) - exception_view = DummyView(exception_response) - environ = self._makeEnviron() - self._registerView(view, '', IViewClassifier, IRequest, None) - self._registerView(exception_view, '', IExceptionViewClassifier, - IRequest, SuperException) - router = self._makeOne() - start_response = DummyStartResponse() - result = router(environ, start_response) - self.assertEqual(result, ["Hello, world"]) - - def test_call_view_raises_exception_another_exception_view(self): - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IExceptionViewClassifier - from repoze.bfg.interfaces import IRequest - class MyException(Exception): - pass - class AnotherException(Exception): - pass - response = DummyResponse() - exception_response = DummyResponse() - exception_response.app_iter = ["Hello, world"] - view = DummyView(response, raise_exception=MyException) - exception_view = DummyView(exception_response) - environ = self._makeEnviron() - self._registerView(view, '', IViewClassifier, IRequest, None) - self._registerView(exception_view, '', IExceptionViewClassifier, - IRequest, AnotherException) - router = self._makeOne() - start_response = DummyStartResponse() - self.assertRaises(MyException, router, environ, start_response) - - def test_root_factory_raises_exception_view(self): - from repoze.bfg.interfaces import IRootFactory - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IExceptionViewClassifier - def rootfactory(request): - raise RuntimeError() - self.registry.registerUtility(rootfactory, IRootFactory) - exception_response = DummyResponse() - exception_response.app_iter = ["Hello, world"] - exception_view = DummyView(exception_response) - self._registerView(exception_view, '', IExceptionViewClassifier, - IRequest, RuntimeError) - environ = self._makeEnviron() - router = self._makeOne() - start_response = DummyStartResponse() - app_iter = router(environ, start_response) - self.assertEqual(app_iter, ["Hello, world"]) - - def test_traverser_raises_exception_view(self): - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IExceptionViewClassifier - environ = self._makeEnviron() - context = DummyContext() - self._registerTraverserFactory(context, raise_error=RuntimeError()) - exception_response = DummyResponse() - exception_response.app_iter = ["Hello, world"] - exception_view = DummyView(exception_response) - self._registerView(exception_view, '', IExceptionViewClassifier, - IRequest, RuntimeError) - router = self._makeOne() - start_response = DummyStartResponse() - result = router(environ, start_response) - self.assertEqual(result, ["Hello, world"]) - - def test_exception_view_returns_non_response(self): - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IExceptionViewClassifier - environ = self._makeEnviron() - response = DummyResponse() - view = DummyView(response, raise_exception=RuntimeError) - self._registerView(view, '', IViewClassifier, IRequest, None) - exception_view = DummyView(None) - self._registerView(exception_view, '', IExceptionViewClassifier, - IRequest, RuntimeError) - router = self._makeOne() - start_response = DummyStartResponse() - self.assertRaises(ValueError, router, environ, start_response) - - def test_call_route_raises_route_exception_view(self): - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IExceptionViewClassifier - req_iface = self._registerRouteRequest('foo') - self._connectRoute('foo', 'archives/:action/:article', None) - view = DummyView(DummyResponse(), raise_exception=RuntimeError) - self._registerView(view, '', IViewClassifier, req_iface, None) - response = DummyResponse() - response.app_iter = ["Hello, world"] - exception_view = DummyView(response) - self._registerView(exception_view, '', IExceptionViewClassifier, - req_iface, RuntimeError) - environ = self._makeEnviron(PATH_INFO='/archives/action1/article1') - start_response = DummyStartResponse() - router = self._makeOne() - result = router(environ, start_response) - self.assertEqual(result, ["Hello, world"]) - - def test_call_view_raises_exception_route_view(self): - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IExceptionViewClassifier - from repoze.bfg.interfaces import IRequest - req_iface = self._registerRouteRequest('foo') - self._connectRoute('foo', 'archives/:action/:article', None) - view = DummyView(DummyResponse(), raise_exception=RuntimeError) - self._registerView(view, '', IViewClassifier, IRequest, None) - response = DummyResponse() - response.app_iter = ["Hello, world"] - exception_view = DummyView(response) - self._registerView(exception_view, '', IExceptionViewClassifier, - req_iface, RuntimeError) - environ = self._makeEnviron() - start_response = DummyStartResponse() - router = self._makeOne() - self.assertRaises(RuntimeError, router, environ, start_response) - - def test_call_route_raises_exception_view(self): - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IExceptionViewClassifier - from repoze.bfg.interfaces import IRequest - req_iface = self._registerRouteRequest('foo') - self._connectRoute('foo', 'archives/:action/:article', None) - view = DummyView(DummyResponse(), raise_exception=RuntimeError) - self._registerView(view, '', IViewClassifier, req_iface, None) - response = DummyResponse() - response.app_iter = ["Hello, world"] - exception_view = DummyView(response) - self._registerView(exception_view, '', IExceptionViewClassifier, - IRequest, RuntimeError) - environ = self._makeEnviron(PATH_INFO='/archives/action1/article1') - start_response = DummyStartResponse() - router = self._makeOne() - result = router(environ, start_response) - self.assertEqual(result, ["Hello, world"]) - - def test_call_route_raises_super_exception_sub_exception_view(self): - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IExceptionViewClassifier - from repoze.bfg.interfaces import IRequest - class SuperException(Exception): - pass - class SubException(SuperException): - pass - req_iface = self._registerRouteRequest('foo') - self._connectRoute('foo', 'archives/:action/:article', None) - view = DummyView(DummyResponse(), raise_exception=SuperException) - self._registerView(view, '', IViewClassifier, req_iface, None) - response = DummyResponse() - response.app_iter = ["Hello, world"] - exception_view = DummyView(response) - self._registerView(exception_view, '', IExceptionViewClassifier, - IRequest, SubException) - environ = self._makeEnviron(PATH_INFO='/archives/action1/article1') - start_response = DummyStartResponse() - router = self._makeOne() - self.assertRaises(SuperException, router, environ, start_response) - - def test_call_route_raises_sub_exception_super_exception_view(self): - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IExceptionViewClassifier - from repoze.bfg.interfaces import IRequest - class SuperException(Exception): - pass - class SubException(SuperException): - pass - req_iface = self._registerRouteRequest('foo') - self._connectRoute('foo', 'archives/:action/:article', None) - view = DummyView(DummyResponse(), raise_exception=SubException) - self._registerView(view, '', IViewClassifier, req_iface, None) - response = DummyResponse() - response.app_iter = ["Hello, world"] - exception_view = DummyView(response) - self._registerView(exception_view, '', IExceptionViewClassifier, - IRequest, SuperException) - environ = self._makeEnviron(PATH_INFO='/archives/action1/article1') - start_response = DummyStartResponse() - router = self._makeOne() - result = router(environ, start_response) - self.assertEqual(result, ["Hello, world"]) - - def test_call_route_raises_exception_another_exception_view(self): - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IExceptionViewClassifier - from repoze.bfg.interfaces import IRequest - class MyException(Exception): - pass - class AnotherException(Exception): - pass - req_iface = self._registerRouteRequest('foo') - self._connectRoute('foo', 'archives/:action/:article', None) - view = DummyView(DummyResponse(), raise_exception=MyException) - self._registerView(view, '', IViewClassifier, req_iface, None) - response = DummyResponse() - response.app_iter = ["Hello, world"] - exception_view = DummyView(response) - self._registerView(exception_view, '', IExceptionViewClassifier, - IRequest, AnotherException) - environ = self._makeEnviron(PATH_INFO='/archives/action1/article1') - start_response = DummyStartResponse() - router = self._makeOne() - self.assertRaises(MyException, router, environ, start_response) - - def test_call_route_raises_exception_view_specializing(self): - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IExceptionViewClassifier - from repoze.bfg.interfaces import IRequest - req_iface = self._registerRouteRequest('foo') - self._connectRoute('foo', 'archives/:action/:article', None) - view = DummyView(DummyResponse(), raise_exception=RuntimeError) - self._registerView(view, '', IViewClassifier, req_iface, None) - response = DummyResponse() - response.app_iter = ["Hello, world"] - exception_view = DummyView(response) - self._registerView(exception_view, '', IExceptionViewClassifier, - IRequest, RuntimeError) - response_spec = DummyResponse() - response_spec.app_iter = ["Hello, special world"] - exception_view_spec = DummyView(response_spec) - self._registerView(exception_view_spec, '', IExceptionViewClassifier, - req_iface, RuntimeError) - environ = self._makeEnviron(PATH_INFO='/archives/action1/article1') - start_response = DummyStartResponse() - router = self._makeOne() - result = router(environ, start_response) - self.assertEqual(result, ["Hello, special world"]) - - def test_call_route_raises_exception_view_another_route(self): - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IExceptionViewClassifier - req_iface = self._registerRouteRequest('foo') - another_req_iface = self._registerRouteRequest('bar') - self._connectRoute('foo', 'archives/:action/:article', None) - view = DummyView(DummyResponse(), raise_exception=RuntimeError) - self._registerView(view, '', IViewClassifier, req_iface, None) - response = DummyResponse() - response.app_iter = ["Hello, world"] - exception_view = DummyView(response) - self._registerView(exception_view, '', IExceptionViewClassifier, - another_req_iface, RuntimeError) - environ = self._makeEnviron(PATH_INFO='/archives/action1/article1') - start_response = DummyStartResponse() - router = self._makeOne() - self.assertRaises(RuntimeError, router, environ, start_response) - - def test_call_view_raises_exception_view_route(self): - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IExceptionViewClassifier - req_iface = self._registerRouteRequest('foo') - response = DummyResponse() - exception_response = DummyResponse() - exception_response.app_iter = ["Hello, world"] - view = DummyView(response, raise_exception=RuntimeError) - exception_view = DummyView(exception_response) - environ = self._makeEnviron() - self._registerView(view, '', IViewClassifier, IRequest, None) - self._registerView(exception_view, '', IExceptionViewClassifier, - req_iface, RuntimeError) - router = self._makeOne() - start_response = DummyStartResponse() - self.assertRaises(RuntimeError, router, environ, start_response) - -class DummyContext: - pass - -class DummyView: - def __init__(self, response, raise_exception=None): - self.response = response - self.raise_exception = raise_exception - - def __call__(self, context, request): - self.context = context - self.request = request - if not self.raise_exception is None: - raise self.raise_exception - return self.response - -class DummyRootFactory: - def __init__(self, root): - self.root = root - - def __call__(self, environ): - return self.root - -class DummyStartResponse: - status = () - headers = () - def __call__(self, status, headers): - self.status = status - self.headers = headers - -class DummyResponse: - headerlist = () - app_iter = () - def __init__(self, status='200 OK'): - self.status = status - -class DummyThreadLocalManager: - def __init__(self): - self.pushed = [] - self.popped = [] - - def push(self, val): - self.pushed.append(val) - - def pop(self): - self.popped.append(True) - -class DummyAuthenticationPolicy: - pass - -class DummyLogger: - def __init__(self): - self.messages = [] - def info(self, msg): - self.messages.append(msg) - warn = info - debug = info - -def exc_raised(exc, func, *arg, **kw): - try: - func(*arg, **kw) - except exc, e: - return e - else: - raise AssertionError('%s not raised' % exc) # pragma: no cover - - diff --git a/repoze/bfg/tests/test_scripting.py b/repoze/bfg/tests/test_scripting.py deleted file mode 100644 index 2663c4a0f..000000000 --- a/repoze/bfg/tests/test_scripting.py +++ /dev/null @@ -1,81 +0,0 @@ -import unittest - -class TestGetRoot(unittest.TestCase): - def _callFUT(self, app, request=None): - from repoze.bfg.paster import get_root - return get_root(app, request) - - def test_it_norequest(self): - app = DummyApp() - root, closer = self._callFUT(app) - self.assertEqual(len(app.threadlocal_manager.pushed), 1) - pushed = app.threadlocal_manager.pushed[0] - self.assertEqual(pushed['registry'], dummy_registry) - self.assertEqual(pushed['request'].registry, app.registry) - self.assertEqual(len(app.threadlocal_manager.popped), 0) - closer() - self.assertEqual(len(app.threadlocal_manager.popped), 1) - - def test_it_withrequest(self): - app = DummyApp() - request = DummyRequest({}) - root, closer = self._callFUT(app, request) - self.assertEqual(len(app.threadlocal_manager.pushed), 1) - pushed = app.threadlocal_manager.pushed[0] - self.assertEqual(pushed['registry'], dummy_registry) - self.assertEqual(pushed['request'], request) - self.assertEqual(len(app.threadlocal_manager.popped), 0) - closer() - self.assertEqual(len(app.threadlocal_manager.popped), 1) - - def test_it_requestfactory_overridden(self): - app = DummyApp() - request = Dummy() - class DummyFactory(object): - @classmethod - def blank(cls, path): - return request - registry = DummyRegistry(DummyFactory) - app.registry = registry - root, closer = self._callFUT(app) - self.assertEqual(len(app.threadlocal_manager.pushed), 1) - pushed = app.threadlocal_manager.pushed[0] - self.assertEqual(pushed['request'], request) - -class Dummy: - pass - -dummy_root = Dummy() - -class DummyRegistry(object): - def __init__(self, result=None): - self.result = result - - def queryUtility(self, iface, default=None): - return self.result or default - -dummy_registry = DummyRegistry() - -class DummyApp: - def __init__(self): - self.registry = dummy_registry - self.threadlocal_manager = DummyThreadLocalManager() - - def root_factory(self, environ): - return dummy_root - -class DummyThreadLocalManager: - def __init__(self): - self.pushed = [] - self.popped = [] - - def push(self, item): - self.pushed.append(item) - - def pop(self): - self.popped.append(True) - -class DummyRequest: - def __init__(self, environ): - self.environ = environ - diff --git a/repoze/bfg/tests/test_security.py b/repoze/bfg/tests/test_security.py deleted file mode 100644 index 13a0e2d9b..000000000 --- a/repoze/bfg/tests/test_security.py +++ /dev/null @@ -1,395 +0,0 @@ -import unittest - -from repoze.bfg.testing import cleanUp - - -class TestAllPermissionsList(unittest.TestCase): - def setUp(self): - cleanUp() - - def tearDown(self): - cleanUp() - - def _getTargetClass(self): - from repoze.bfg.security import AllPermissionsList - return AllPermissionsList - - def _makeOne(self): - return self._getTargetClass()() - - def test_it(self): - thing = self._makeOne() - self.failUnless(thing.__eq__(thing)) - self.assertEqual(thing.__iter__(), ()) - self.failUnless('anything' in thing) - - def test_singleton(self): - from repoze.bfg.security import ALL_PERMISSIONS - self.assertEqual(ALL_PERMISSIONS.__class__, self._getTargetClass()) - -class TestAllowed(unittest.TestCase): - def _getTargetClass(self): - from repoze.bfg.security import Allowed - return Allowed - - def _makeOne(self, *arg, **kw): - klass = self._getTargetClass() - return klass(*arg, **kw) - - def test_it(self): - allowed = self._makeOne('hello') - self.assertEqual(allowed.msg, 'hello') - self.assertEqual(allowed, True) - self.failUnless(allowed) - self.assertEqual(str(allowed), 'hello') - self.failUnless('<Allowed instance at ' in repr(allowed)) - self.failUnless("with msg 'hello'>" in repr(allowed)) - -class TestDenied(unittest.TestCase): - def _getTargetClass(self): - from repoze.bfg.security import Denied - return Denied - - def _makeOne(self, *arg, **kw): - klass = self._getTargetClass() - return klass(*arg, **kw) - - def test_it(self): - denied = self._makeOne('hello') - self.assertEqual(denied.msg, 'hello') - self.assertEqual(denied, False) - self.failIf(denied) - self.assertEqual(str(denied), 'hello') - self.failUnless('<Denied instance at ' in repr(denied)) - self.failUnless("with msg 'hello'>" in repr(denied)) - -class TestACLAllowed(unittest.TestCase): - def _getTargetClass(self): - from repoze.bfg.security import ACLAllowed - return ACLAllowed - - def _makeOne(self, *arg, **kw): - klass = self._getTargetClass() - return klass(*arg, **kw) - - def test_it(self): - msg = ("ACLAllowed permission 'permission' via ACE 'ace' in ACL 'acl' " - "on context 'ctx' for principals 'principals'") - allowed = self._makeOne('ace', 'acl', 'permission', 'principals', 'ctx') - self.failUnless(msg in allowed.msg) - self.assertEqual(allowed, True) - self.failUnless(allowed) - self.assertEqual(str(allowed), msg) - self.failUnless('<ACLAllowed instance at ' in repr(allowed)) - self.failUnless("with msg %r>" % msg in repr(allowed)) - -class TestACLDenied(unittest.TestCase): - def _getTargetClass(self): - from repoze.bfg.security import ACLDenied - return ACLDenied - - def _makeOne(self, *arg, **kw): - klass = self._getTargetClass() - return klass(*arg, **kw) - - def test_it(self): - msg = ("ACLDenied permission 'permission' via ACE 'ace' in ACL 'acl' " - "on context 'ctx' for principals 'principals'") - denied = self._makeOne('ace', 'acl', 'permission', 'principals', 'ctx') - self.failUnless(msg in denied.msg) - self.assertEqual(denied, False) - self.failIf(denied) - self.assertEqual(str(denied), msg) - self.failUnless('<ACLDenied instance at ' in repr(denied)) - self.failUnless("with msg %r>" % msg in repr(denied)) - -class TestViewExecutionPermitted(unittest.TestCase): - def setUp(self): - cleanUp() - - def tearDown(self): - cleanUp() - - def _callFUT(self, *arg, **kw): - from repoze.bfg.security import view_execution_permitted - return view_execution_permitted(*arg, **kw) - - def _registerSecuredView(self, view_name, allow=True): - from repoze.bfg.threadlocal import get_current_registry - from zope.interface import Interface - from repoze.bfg.interfaces import ISecuredView - from repoze.bfg.interfaces import IViewClassifier - class Checker(object): - def __permitted__(self, context, request): - self.context = context - self.request = request - return allow - checker = Checker() - reg = get_current_registry() - reg.registerAdapter(checker, (IViewClassifier, Interface, Interface), - ISecuredView, view_name) - return checker - - def test_no_permission(self): - from repoze.bfg.threadlocal import get_current_registry - from repoze.bfg.interfaces import ISettings - settings = dict(debug_authorization=True) - reg = get_current_registry() - reg.registerUtility(settings, ISettings) - context = DummyContext() - request = DummyRequest({}) - result = self._callFUT(context, request, '') - msg = result.msg - self.failUnless("Allowed: view name '' in context" in msg) - self.failUnless('(no permission defined)' in msg) - self.assertEqual(result, True) - - def test_with_permission(self): - from zope.interface import Interface - from zope.interface import directlyProvides - from repoze.bfg.interfaces import IRequest - class IContext(Interface): - pass - context = DummyContext() - directlyProvides(context, IContext) - self._registerSecuredView('', True) - request = DummyRequest({}) - directlyProvides(request, IRequest) - result = self._callFUT(context, request, '') - self.failUnless(result is True) - -class TestHasPermission(unittest.TestCase): - def setUp(self): - cleanUp() - - def tearDown(self): - cleanUp() - - def _callFUT(self, *arg): - from repoze.bfg.security import has_permission - return has_permission(*arg) - - def test_no_authentication_policy(self): - request = _makeRequest() - result = self._callFUT('view', None, request) - self.assertEqual(result, True) - self.assertEqual(result.msg, 'No authentication policy in use.') - - def test_authentication_policy_no_authorization_policy(self): - request = _makeRequest() - _registerAuthenticationPolicy(request.registry, None) - self.assertRaises(ValueError, self._callFUT, 'view', None, request) - - def test_authn_and_authz_policies_registered(self): - request = _makeRequest() - _registerAuthenticationPolicy(request.registry, None) - _registerAuthorizationPolicy(request.registry, 'yo') - self.assertEqual(self._callFUT('view', None, request), 'yo') - - def test_no_registry_on_request(self): - from repoze.bfg.threadlocal import get_current_registry - request = DummyRequest({}) - registry = get_current_registry() - _registerAuthenticationPolicy(registry, None) - _registerAuthorizationPolicy(registry, 'yo') - self.assertEqual(self._callFUT('view', None, request), 'yo') - -class TestAuthenticatedUserId(unittest.TestCase): - def setUp(self): - cleanUp() - - def tearDown(self): - cleanUp() - - def _callFUT(self, request): - from repoze.bfg.security import authenticated_userid - return authenticated_userid(request) - - def test_no_authentication_policy(self): - request = _makeRequest() - result = self._callFUT(request) - self.assertEqual(result, None) - - def test_with_authentication_policy(self): - request = _makeRequest() - _registerAuthenticationPolicy(request.registry, 'yo') - result = self._callFUT(request) - self.assertEqual(result, 'yo') - - def test_with_authentication_policy_no_reg_on_request(self): - from repoze.bfg.threadlocal import get_current_registry - request = DummyRequest({}) - registry = get_current_registry() - _registerAuthenticationPolicy(registry, 'yo') - result = self._callFUT(request) - self.assertEqual(result, 'yo') - -class TestEffectivePrincipals(unittest.TestCase): - def setUp(self): - cleanUp() - - def tearDown(self): - cleanUp() - - def _callFUT(self, request): - from repoze.bfg.security import effective_principals - return effective_principals(request) - - def test_no_authentication_policy(self): - request = _makeRequest() - result = self._callFUT(request) - self.assertEqual(result, []) - - def test_with_authentication_policy(self): - request = _makeRequest() - _registerAuthenticationPolicy(request.registry, 'yo') - result = self._callFUT(request) - self.assertEqual(result, 'yo') - - def test_with_authentication_policy_no_reg_on_request(self): - from repoze.bfg.threadlocal import get_current_registry - registry = get_current_registry() - request = DummyRequest({}) - _registerAuthenticationPolicy(registry, 'yo') - result = self._callFUT(request) - self.assertEqual(result, 'yo') - -class TestPrincipalsAllowedByPermission(unittest.TestCase): - def setUp(self): - cleanUp() - - def tearDown(self): - cleanUp() - - def _callFUT(self, *arg): - from repoze.bfg.security import principals_allowed_by_permission - return principals_allowed_by_permission(*arg) - - def test_no_authorization_policy(self): - from repoze.bfg.security import Everyone - context = DummyContext() - result = self._callFUT(context, 'view') - self.assertEqual(result, [Everyone]) - - def test_with_authorization_policy(self): - from repoze.bfg.threadlocal import get_current_registry - registry = get_current_registry() - _registerAuthorizationPolicy(registry, 'yo') - context = DummyContext() - result = self._callFUT(context, 'view') - self.assertEqual(result, 'yo') - -class TestRemember(unittest.TestCase): - def setUp(self): - cleanUp() - - def tearDown(self): - cleanUp() - - def _callFUT(self, *arg): - from repoze.bfg.security import remember - return remember(*arg) - - def test_no_authentication_policy(self): - request = _makeRequest() - result = self._callFUT(request, 'me') - self.assertEqual(result, []) - - def test_with_authentication_policy(self): - request = _makeRequest() - registry = request.registry - _registerAuthenticationPolicy(registry, 'yo') - result = self._callFUT(request, 'me') - self.assertEqual(result, 'yo') - - def test_with_authentication_policy_no_reg_on_request(self): - from repoze.bfg.threadlocal import get_current_registry - registry = get_current_registry() - request = DummyRequest({}) - _registerAuthenticationPolicy(registry, 'yo') - result = self._callFUT(request, 'me') - self.assertEqual(result, 'yo') - -class TestForget(unittest.TestCase): - def setUp(self): - cleanUp() - - def tearDown(self): - cleanUp() - - def _callFUT(self, *arg): - from repoze.bfg.security import forget - return forget(*arg) - - def test_no_authentication_policy(self): - request = _makeRequest() - result = self._callFUT(request) - self.assertEqual(result, []) - - def test_with_authentication_policy(self): - request = _makeRequest() - _registerAuthenticationPolicy(request.registry, 'yo') - result = self._callFUT(request) - self.assertEqual(result, 'yo') - - def test_with_authentication_policy_no_reg_on_request(self): - from repoze.bfg.threadlocal import get_current_registry - registry = get_current_registry() - request = DummyRequest({}) - _registerAuthenticationPolicy(registry, 'yo') - result = self._callFUT(request) - self.assertEqual(result, 'yo') - -class DummyContext: - def __init__(self, *arg, **kw): - self.__dict__.update(kw) - -class DummyRequest: - def __init__(self, environ): - self.environ = environ - -class DummyAuthenticationPolicy: - def __init__(self, result): - self.result = result - - def effective_principals(self, request): - return self.result - - def authenticated_userid(self, request): - return self.result - - def remember(self, request, principal, **kw): - return self.result - - def forget(self, request): - return self.result - -class DummyAuthorizationPolicy: - def __init__(self, result): - self.result = result - - def permits(self, context, principals, permission): - return self.result - - def principals_allowed_by_permission(self, context, permission): - return self.result - -def _registerAuthenticationPolicy(reg, result): - from repoze.bfg.interfaces import IAuthenticationPolicy - policy = DummyAuthenticationPolicy(result) - reg.registerUtility(policy, IAuthenticationPolicy) - return policy - -def _registerAuthorizationPolicy(reg, result): - from repoze.bfg.interfaces import IAuthorizationPolicy - policy = DummyAuthorizationPolicy(result) - reg.registerUtility(policy, IAuthorizationPolicy) - return policy - -def _makeRequest(): - from repoze.bfg.registry import Registry - request = DummyRequest({}) - request.registry = Registry() - return request - - diff --git a/repoze/bfg/tests/test_settings.py b/repoze/bfg/tests/test_settings.py deleted file mode 100644 index be73f9dce..000000000 --- a/repoze/bfg/tests/test_settings.py +++ /dev/null @@ -1,203 +0,0 @@ -import unittest - -class TestSettings(unittest.TestCase): - def _getTargetClass(self): - from repoze.bfg.settings import Settings - return Settings - - def _makeOne(self, d=None, environ=None): - if environ is None: - environ = {} - klass = self._getTargetClass() - return klass(d, _environ_=environ) - - def test_getattr(self): - settings = self._makeOne({'reload_templates':False}) - self.assertEqual(settings.reload_templates, False) - - def test_getattr_raises_attribute_error(self): - settings = self._makeOne() - self.assertRaises(AttributeError, settings.__getattr__, 'mykey') - - def test_noargs(self): - settings = self._makeOne() - self.assertEqual(settings['debug_authorization'], False) - self.assertEqual(settings['debug_notfound'], False) - self.assertEqual(settings['reload_templates'], False) - self.assertEqual(settings['reload_resources'], False) - self.assertEqual(settings['configure_zcml'], '') - - def test_reload_templates(self): - settings = self._makeOne({}) - self.assertEqual(settings['reload_templates'], False) - result = self._makeOne({'reload_templates':'false'}) - self.assertEqual(result['reload_templates'], False) - result = self._makeOne({'reload_templates':'t'}) - self.assertEqual(result['reload_templates'], True) - result = self._makeOne({'reload_templates':'1'}) - self.assertEqual(result['reload_templates'], True) - result = self._makeOne({}, {'BFG_RELOAD_TEMPLATES':'1'}) - self.assertEqual(result['reload_templates'], True) - result = self._makeOne({'reload_templates':'false'}, - {'BFG_RELOAD_TEMPLATES':'1'}) - self.assertEqual(result['reload_templates'], True) - - def test_reload_resources(self): - result = self._makeOne({}) - self.assertEqual(result['reload_resources'], False) - result = self._makeOne({'reload_resources':'false'}) - self.assertEqual(result['reload_resources'], False) - result = self._makeOne({'reload_resources':'t'}) - self.assertEqual(result['reload_resources'], True) - result = self._makeOne({'reload_resources':'1'}) - self.assertEqual(result['reload_resources'], True) - result = self._makeOne({}, {'BFG_RELOAD_RESOURCES':'1'}) - self.assertEqual(result['reload_resources'], True) - result = self._makeOne({'reload_resources':'false'}, - {'BFG_RELOAD_RESOURCES':'1'}) - self.assertEqual(result['reload_resources'], True) - - def test_reload_all(self): - result = self._makeOne({}) - self.assertEqual(result['reload_templates'], False) - self.assertEqual(result['reload_resources'], False) - result = self._makeOne({'reload_all':'false'}) - self.assertEqual(result['reload_templates'], False) - self.assertEqual(result['reload_resources'], False) - result = self._makeOne({'reload_all':'t'}) - self.assertEqual(result['reload_templates'], True) - self.assertEqual(result['reload_resources'], True) - result = self._makeOne({'reload_all':'1'}) - self.assertEqual(result['reload_templates'], True) - self.assertEqual(result['reload_resources'], True) - result = self._makeOne({}, {'BFG_RELOAD_ALL':'1'}) - self.assertEqual(result['reload_templates'], True) - self.assertEqual(result['reload_resources'], True) - result = self._makeOne({'reload_all':'false'}, - {'BFG_RELOAD_ALL':'1'}) - self.assertEqual(result['reload_templates'], True) - self.assertEqual(result['reload_resources'], True) - - def test_debug_authorization(self): - result = self._makeOne({}) - self.assertEqual(result['debug_authorization'], False) - result = self._makeOne({'debug_authorization':'false'}) - self.assertEqual(result['debug_authorization'], False) - result = self._makeOne({'debug_authorization':'t'}) - self.assertEqual(result['debug_authorization'], True) - result = self._makeOne({'debug_authorization':'1'}) - self.assertEqual(result['debug_authorization'], True) - result = self._makeOne({}, {'BFG_DEBUG_AUTHORIZATION':'1'}) - self.assertEqual(result['debug_authorization'], True) - result = self._makeOne({'debug_authorization':'false'}, - {'BFG_DEBUG_AUTHORIZATION':'1'}) - self.assertEqual(result['debug_authorization'], True) - - def test_debug_notfound(self): - result = self._makeOne({}) - self.assertEqual(result['debug_notfound'], False) - result = self._makeOne({'debug_notfound':'false'}) - self.assertEqual(result['debug_notfound'], False) - result = self._makeOne({'debug_notfound':'t'}) - self.assertEqual(result['debug_notfound'], True) - result = self._makeOne({'debug_notfound':'1'}) - self.assertEqual(result['debug_notfound'], True) - result = self._makeOne({}, {'BFG_DEBUG_NOTFOUND':'1'}) - self.assertEqual(result['debug_notfound'], True) - result = self._makeOne({'debug_notfound':'false'}, - {'BFG_DEBUG_NOTFOUND':'1'}) - self.assertEqual(result['debug_notfound'], True) - - def test_debug_templates(self): - result = self._makeOne({}) - self.assertEqual(result['debug_templates'], False) - result = self._makeOne({'debug_templates':'false'}) - self.assertEqual(result['debug_templates'], False) - result = self._makeOne({'debug_templates':'t'}) - self.assertEqual(result['debug_templates'], True) - result = self._makeOne({'debug_templates':'1'}) - self.assertEqual(result['debug_templates'], True) - result = self._makeOne({}, {'BFG_DEBUG_TEMPLATES':'1'}) - self.assertEqual(result['debug_templates'], True) - result = self._makeOne({'debug_templates':'false'}, - {'BFG_DEBUG_TEMPLATES':'1'}) - self.assertEqual(result['debug_templates'], True) - - def test_debug_all(self): - result = self._makeOne({}) - self.assertEqual(result['debug_notfound'], False) - self.assertEqual(result['debug_authorization'], False) - self.assertEqual(result['debug_templates'], False) - result = self._makeOne({'debug_all':'false'}) - self.assertEqual(result['debug_notfound'], False) - self.assertEqual(result['debug_authorization'], False) - self.assertEqual(result['debug_templates'], False) - result = self._makeOne({'debug_all':'t'}) - self.assertEqual(result['debug_notfound'], True) - self.assertEqual(result['debug_authorization'], True) - self.assertEqual(result['debug_templates'], True) - result = self._makeOne({'debug_all':'1'}) - self.assertEqual(result['debug_notfound'], True) - self.assertEqual(result['debug_authorization'], True) - self.assertEqual(result['debug_templates'], True) - result = self._makeOne({}, {'BFG_DEBUG_ALL':'1'}) - self.assertEqual(result['debug_notfound'], True) - self.assertEqual(result['debug_authorization'], True) - self.assertEqual(result['debug_templates'], True) - result = self._makeOne({'debug_all':'false'}, - {'BFG_DEBUG_ALL':'1'}) - self.assertEqual(result['debug_notfound'], True) - self.assertEqual(result['debug_authorization'], True) - self.assertEqual(result['debug_templates'], True) - - def test_configure_zcml(self): - result = self._makeOne({}) - self.assertEqual(result['configure_zcml'], '') - result = self._makeOne({'configure_zcml':'abc'}) - self.assertEqual(result['configure_zcml'], 'abc') - result = self._makeOne({}, {'BFG_CONFIGURE_ZCML':'abc'}) - self.assertEqual(result['configure_zcml'], 'abc') - result = self._makeOne({'configure_zcml':'def'}, - {'BFG_CONFIGURE_ZCML':'abc'}) - self.assertEqual(result['configure_zcml'], 'abc') - - def test_default_locale_name(self): - result = self._makeOne({}) - self.assertEqual(result['default_locale_name'], 'en') - result = self._makeOne({'default_locale_name':'abc'}) - self.assertEqual(result['default_locale_name'], 'abc') - result = self._makeOne({}, {'BFG_DEFAULT_LOCALE_NAME':'abc'}) - self.assertEqual(result['default_locale_name'], 'abc') - result = self._makeOne({'default_locale_name':'def'}, - {'BFG_DEFAULT_LOCALE_NAME':'abc'}) - self.assertEqual(result['default_locale_name'], 'abc') - - def test_originals_kept(self): - result = self._makeOne({'a':'i am so a'}) - self.assertEqual(result['a'], 'i am so a') - - -class TestGetSettings(unittest.TestCase): - def setUp(self): - from repoze.bfg.configuration import Configurator - from repoze.bfg.registry import Registry - registry = Registry('testing') - self.config = Configurator(registry=registry) - self.config.begin() - - def tearDown(self): - self.config.end() - - def _callFUT(self): - from repoze.bfg.settings import get_settings - return get_settings() - - def test_it_nosettings(self): - self.assertEqual(self._callFUT(), None) - - def test_it_withsettings(self): - from repoze.bfg.interfaces import ISettings - settings = {'a':1} - self.config.registry.registerUtility(settings, ISettings) - self.assertEqual(self._callFUT(), settings) - diff --git a/repoze/bfg/tests/test_static.py b/repoze/bfg/tests/test_static.py deleted file mode 100644 index 449860883..000000000 --- a/repoze/bfg/tests/test_static.py +++ /dev/null @@ -1,343 +0,0 @@ -import unittest -from repoze.bfg.testing import cleanUp - -class TestPackageURLParser(unittest.TestCase): - def _getTargetClass(self): - from repoze.bfg.static import PackageURLParser - return PackageURLParser - - def _makeOne(self, *arg, **kw): - return self._getTargetClass()(*arg, **kw) - - - def _makeEnviron(self, **kw): - environ = { - 'wsgi.url_scheme':'http', - 'wsgi.version':(1,0), - 'SERVER_NAME':'example.com', - 'SERVER_PORT':'6543', - 'PATH_INFO':'/', - 'SCRIPT_NAME':'', - 'REQUEST_METHOD':'GET', - } - environ.update(kw) - return environ - - def test_ctor_allargs(self): - inst = self._makeOne('package', 'resource/name', root_resource='root', - cache_max_age=100) - self.assertEqual(inst.package_name, 'package') - self.assertEqual(inst.resource_name, 'resource/name') - self.assertEqual(inst.root_resource, 'root') - self.assertEqual(inst.cache_max_age, 100) - - def test_ctor_defaultargs(self): - inst = self._makeOne('package', 'resource/name') - self.assertEqual(inst.package_name, 'package') - self.assertEqual(inst.resource_name, 'resource/name') - self.assertEqual(inst.root_resource, 'resource/name') - self.assertEqual(inst.cache_max_age, None) - - def test_call_adds_slash_path_info_empty(self): - environ = self._makeEnviron(PATH_INFO='') - inst = self._makeOne('repoze.bfg.tests', 'fixtures/static') - sr = DummyStartResponse() - response = inst(environ, sr) - body = response[0] - self.failUnless('301 Moved Permanently' in body) - self.failUnless('http://example.com:6543/' in body) - - def test_path_info_slash_means_index_html(self): - environ = self._makeEnviron() - inst = self._makeOne('repoze.bfg.tests', 'fixtures/static') - sr = DummyStartResponse() - response = inst(environ, sr) - body = response[0] - self.failUnless('<html>static</html>' in body) - - def test_resource_out_of_bounds(self): - environ = self._makeEnviron() - inst = self._makeOne('repoze.bfg.tests', 'fixtures/static') - inst.root_resource = 'abcdef' - sr = DummyStartResponse() - response = inst(environ, sr) - body = response[0] - self.failUnless('404 Not Found' in body) - self.failUnless('http://example.com:6543/' in body) - - def test_resource_doesnt_exist(self): - environ = self._makeEnviron(PATH_INFO='/notthere') - inst = self._makeOne('repoze.bfg.tests', 'fixtures/static') - sr = DummyStartResponse() - response = inst(environ, sr) - body = response[0] - self.failUnless('404 Not Found' in body) - self.failUnless('http://example.com:6543/' in body) - - def test_resource_isdir(self): - environ = self._makeEnviron(PATH_INFO='/subdir/') - inst = self._makeOne('repoze.bfg.tests', 'fixtures/static') - sr = DummyStartResponse() - response = inst(environ, sr) - body = response[0] - self.failUnless('<html>subdir</html>' in body) - - def test_resource_is_file(self): - environ = self._makeEnviron(PATH_INFO='/index.html') - inst = self._makeOne('repoze.bfg.tests', 'fixtures/static') - sr = DummyStartResponse() - response = inst(environ, sr) - body = response[0] - self.failUnless('<html>static</html>' in body) - - def test_resource_is_file_with_cache_max_age(self): - environ = self._makeEnviron(PATH_INFO='/index.html') - inst = self._makeOne('repoze.bfg.tests', 'fixtures/static', - cache_max_age=600) - sr = DummyStartResponse() - response = inst(environ, sr) - body = response[0] - self.failUnless('<html>static</html>' in body) - self.assertEqual(len(sr.headerlist), 8) - header_names = [ x[0] for x in sr.headerlist ] - header_names.sort() - self.assertEqual(header_names, - ['Accept-Ranges', 'Cache-Control', - 'Content-Length', 'Content-Range', - 'Content-Type', 'ETag', 'Expires', 'Last-Modified']) - - def test_resource_is_file_with_no_cache_max_age(self): - environ = self._makeEnviron(PATH_INFO='/index.html') - inst = self._makeOne('repoze.bfg.tests', 'fixtures/static') - sr = DummyStartResponse() - response = inst(environ, sr) - body = response[0] - self.failUnless('<html>static</html>' in body) - self.assertEqual(len(sr.headerlist), 6) - header_names = [ x[0] for x in sr.headerlist ] - header_names.sort() - self.assertEqual(header_names, - ['Accept-Ranges', 'Content-Length', 'Content-Range', - 'Content-Type', 'ETag', 'Last-Modified']) - - def test_if_none_match(self): - class DummyEq(object): - def __eq__(self, other): - return True - dummy_eq = DummyEq() - environ = self._makeEnviron(HTTP_IF_NONE_MATCH=dummy_eq) - inst = self._makeOne('repoze.bfg.tests', 'fixtures/static') - sr = DummyStartResponse() - response = inst(environ, sr) - self.assertEqual(len(sr.headerlist), 1) - self.assertEqual(sr.status, '304 Not Modified') - self.assertEqual(sr.headerlist[0][0], 'ETag') - self.assertEqual(response[0], '') - - def test_repr(self): - inst = self._makeOne('repoze.bfg.tests', 'fixtures/static') - self.failUnless( - repr(inst).startswith( - '<PackageURLParser repoze.bfg.tests:fixtures/static at')) - - def test_not_found(self): - inst = self._makeOne('repoze.bfg.tests', 'fixtures/static') - environ = self._makeEnviron() - sr = DummyStartResponse() - response = inst.not_found(environ, sr, 'debug_message') - body = response[0] - self.failUnless('404 Not Found' in body) - self.assertEqual(sr.status, '404 Not Found') - -class TestStaticView(unittest.TestCase): - def setUp(self): - cleanUp() - - def tearDown(self): - cleanUp() - - def _getTargetClass(self): - from repoze.bfg.view import static - return static - - def _makeOne(self, path, package_name=None): - return self._getTargetClass()(path, package_name=package_name) - - def _makeEnviron(self, **extras): - environ = { - 'wsgi.url_scheme':'http', - 'wsgi.version':(1,0), - 'SERVER_NAME':'localhost', - 'SERVER_PORT':'8080', - 'REQUEST_METHOD':'GET', - } - environ.update(extras) - return environ - - def test_abspath(self): - import os - path = os.path.dirname(__file__) - view = self._makeOne(path) - context = DummyContext() - request = DummyRequest() - request.subpath = ['__init__.py'] - request.environ = self._makeEnviron() - response = view(context, request) - self.assertEqual(request.copied, True) - self.assertEqual(response.directory, path) - - def test_relpath(self): - path = 'fixtures' - view = self._makeOne(path) - context = DummyContext() - request = DummyRequest() - request.subpath = ['__init__.py'] - request.environ = self._makeEnviron() - response = view(context, request) - self.assertEqual(request.copied, True) - self.assertEqual(response.root_resource, 'fixtures') - self.assertEqual(response.resource_name, 'fixtures') - self.assertEqual(response.package_name, 'repoze.bfg.tests') - self.assertEqual(response.cache_max_age, 3600) - - def test_relpath_withpackage(self): - view = self._makeOne('another:fixtures') - context = DummyContext() - request = DummyRequest() - request.subpath = ['__init__.py'] - request.environ = self._makeEnviron() - response = view(context, request) - self.assertEqual(request.copied, True) - self.assertEqual(response.root_resource, 'fixtures') - self.assertEqual(response.resource_name, 'fixtures') - self.assertEqual(response.package_name, 'another') - self.assertEqual(response.cache_max_age, 3600) - - def test_relpath_withpackage_name(self): - view = self._makeOne('fixtures', package_name='another') - context = DummyContext() - request = DummyRequest() - request.subpath = ['__init__.py'] - request.environ = self._makeEnviron() - response = view(context, request) - self.assertEqual(request.copied, True) - self.assertEqual(response.root_resource, 'fixtures') - self.assertEqual(response.resource_name, 'fixtures') - self.assertEqual(response.package_name, 'another') - self.assertEqual(response.cache_max_age, 3600) - -class TestStaticURLInfo(unittest.TestCase): - def _getTargetClass(self): - from repoze.bfg.static import StaticURLInfo - return StaticURLInfo - - def _makeOne(self, config): - return self._getTargetClass()(config) - - def test_verifyClass(self): - from repoze.bfg.interfaces import IStaticURLInfo - from zope.interface.verify import verifyClass - verifyClass(IStaticURLInfo, self._getTargetClass()) - - def test_verifyObject(self): - from repoze.bfg.interfaces import IStaticURLInfo - from zope.interface.verify import verifyObject - verifyObject(IStaticURLInfo, self._makeOne(None)) - - def test_ctor(self): - info = self._makeOne(None) - self.assertEqual(info.registrations, []) - self.assertEqual(info.config, None) - - def test_generate_missing(self): - inst = self._makeOne(None) - request = DummyRequest() - self.assertRaises(ValueError, inst.generate, 'path', request) - - def test_generate_slash_in_name1(self): - inst = self._makeOne(None) - inst.registrations = [('http://example.com/foo/', 'package:path/',True)] - request = DummyRequest() - result = inst.generate('package:path/abc', request) - self.assertEqual(result, 'http://example.com/foo/abc') - - def test_generate_slash_in_name2(self): - inst = self._makeOne(None) - inst.registrations = [('http://example.com/foo/', 'package:path/',True)] - request = DummyRequest() - result = inst.generate('package:path/', request) - self.assertEqual(result, 'http://example.com/foo/') - - def test_generate_route_url(self): - inst = self._makeOne(None) - inst.registrations = [('viewname/', 'package:path/', False)] - def route_url(n, r, **kw): - self.assertEqual(n, 'viewname/') - self.assertEqual(r, request) - self.assertEqual(kw, {'subpath':'abc', 'a':1}) - return 'url' - request = DummyRequest() - inst.route_url = route_url - result = inst.generate('package:path/abc', request, a=1) - self.assertEqual(result, 'url') - - def test_add_already_exists(self): - inst = self._makeOne(None) - inst.registrations = [('http://example.com/', 'package:path/', True)] - inst.add('http://example.com', 'anotherpackage:path') - expected = [('http://example.com/', 'anotherpackage:path/', True)] - self.assertEqual(inst.registrations, expected) - - def test_add_url_withendslash(self): - inst = self._makeOne(None) - inst.add('http://example.com/', 'anotherpackage:path') - expected = [('http://example.com/', 'anotherpackage:path/', True)] - self.assertEqual(inst.registrations, expected) - - def test_add_url_noendslash(self): - inst = self._makeOne(None) - inst.add('http://example.com', 'anotherpackage:path') - expected = [('http://example.com/', 'anotherpackage:path/', True)] - self.assertEqual(inst.registrations, expected) - - def test_add_viewname(self): - from repoze.bfg.static import static_view - class Config: - def add_route(self, *arg, **kw): - self.arg = arg - self.kw = kw - config = Config() - inst = self._makeOne(config) - inst.add('view', 'anotherpackage:path', cache_max_age=1) - expected = [('view/', 'anotherpackage:path/', False)] - self.assertEqual(inst.registrations, expected) - self.assertEqual(config.arg, ('view/', 'view/*subpath')) - self.assertEqual(config.kw['_info'], None) - self.assertEqual(config.kw['view_for'], self._getTargetClass()) - self.assertEqual(config.kw['factory'](), inst) - self.assertEqual(config.kw['view'].__class__, static_view) - self.assertEqual(config.kw['view'].app.cache_max_age, 1) - self.assertEqual(inst.registrations, expected) - -class DummyStartResponse: - def __call__(self, status, headerlist, exc_info=None): - self.status = status - self.headerlist = headerlist - self.exc_info = exc_info - -class DummyContext: - pass - -class DummyRequest: - def __init__(self, environ=None): - if environ is None: - environ = {} - self.environ = environ - - def get_response(self, application): - return application - - def copy(self): - self.copied = True - return self - diff --git a/repoze/bfg/tests/test_testing.py b/repoze/bfg/tests/test_testing.py deleted file mode 100644 index b900a44a4..000000000 --- a/repoze/bfg/tests/test_testing.py +++ /dev/null @@ -1,749 +0,0 @@ - -import unittest - -class TestBase(unittest.TestCase): - def setUp(self): - from repoze.bfg.threadlocal import manager - from repoze.bfg.registry import Registry - manager.clear() - registry = Registry('testing') - self.registry = registry - manager.push({'registry':registry, 'request':None}) - from zope.deprecation import __show__ - __show__.off() - - def tearDown(self): - from repoze.bfg.threadlocal import manager - manager.clear() - from zope.deprecation import __show__ - __show__.on() - -class Test_registerDummySecurityPolicy(TestBase): - def test_registerDummySecurityPolicy(self): - from repoze.bfg import testing - testing.registerDummySecurityPolicy('user', ('group1', 'group2'), - permissive=False) - from repoze.bfg.interfaces import IAuthenticationPolicy - from repoze.bfg.interfaces import IAuthorizationPolicy - ut = self.registry.getUtility(IAuthenticationPolicy) - from repoze.bfg.testing import DummySecurityPolicy - self.failUnless(isinstance(ut, DummySecurityPolicy)) - ut = self.registry.getUtility(IAuthorizationPolicy) - self.assertEqual(ut.userid, 'user') - self.assertEqual(ut.groupids, ('group1', 'group2')) - self.assertEqual(ut.permissive, False) - -class Test_registerModels(TestBase): - def test_registerModels(self): - ob1 = object() - ob2 = object() - models = {'/ob1':ob1, '/ob2':ob2} - from repoze.bfg import testing - testing.registerModels(models) - from repoze.bfg.interfaces import ITraverser - adapter = self.registry.getAdapter(None, ITraverser) - result = adapter({'PATH_INFO':'/ob1'}) - self.assertEqual(result['context'], ob1) - self.assertEqual(result['view_name'], '') - self.assertEqual(result['subpath'], ()) - self.assertEqual(result['traversed'], (u'ob1',)) - self.assertEqual(result['virtual_root'], ob1) - self.assertEqual(result['virtual_root_path'], ()) - result = adapter({'PATH_INFO':'/ob2'}) - self.assertEqual(result['context'], ob2) - self.assertEqual(result['view_name'], '') - self.assertEqual(result['subpath'], ()) - self.assertEqual(result['traversed'], (u'ob2',)) - self.assertEqual(result['virtual_root'], ob2) - self.assertEqual(result['virtual_root_path'], ()) - self.assertRaises(KeyError, adapter, {'PATH_INFO':'/ob3'}) - from repoze.bfg.traversal import find_model - self.assertEqual(find_model(None, '/ob1'), ob1) - -class Test_registerTemplateRenderer(TestBase): - def test_registerTemplateRenderer(self): - from repoze.bfg import testing - renderer = testing.registerTemplateRenderer('templates/foo') - from repoze.bfg.testing import DummyTemplateRenderer - self.failUnless(isinstance(renderer, DummyTemplateRenderer)) - from repoze.bfg.renderers import render_to_response - render_to_response('templates/foo', dict(foo=1, bar=2)) - renderer.assert_(foo=1) - renderer.assert_(bar=2) - - def test_registerTemplateRenderer_explicitrenderer(self): - from repoze.bfg import testing - def renderer(kw, system): - self.assertEqual(kw, {'foo':1, 'bar':2}) - renderer = testing.registerTemplateRenderer('templates/foo', renderer) - from repoze.bfg.renderers import render_to_response - render_to_response('templates/foo', dict(foo=1, bar=2)) - -class Test_registerEventListener(TestBase): - def test_registerEventListener_single(self): - from repoze.bfg import testing - L = testing.registerEventListener(IDummy) - event = DummyEvent() - self.registry.notify(event) - self.assertEqual(len(L), 1) - self.assertEqual(L[0], event) - self.registry.notify(object()) - self.assertEqual(len(L), 1) - - def test_registerEventListener_multiple(self): - from repoze.bfg import testing - L = testing.registerEventListener((Interface, IDummy)) - event = DummyEvent() - event.object = 'foo' - # the below is the equivalent of z.c.event.objectEventNotify(event) - self.registry.subscribers((event.object, event), None) - self.assertEqual(len(L), 2) - self.assertEqual(L[0], 'foo') - self.assertEqual(L[1], event) - - def test_registerEventListener_defaults(self): - from repoze.bfg import testing - L = testing.registerEventListener() - event = object() - self.registry.notify(event) - self.assertEqual(L[-1], event) - event2 = object() - self.registry.notify(event2) - self.assertEqual(L[-1], event2) - -class Test_registerView(TestBase): - def test_registerView_defaults(self): - from repoze.bfg import testing - view = testing.registerView('moo.html') - import types - self.failUnless(isinstance(view, types.FunctionType)) - from repoze.bfg.view import render_view_to_response - request = DummyRequest() - request.registry = self.registry - response = render_view_to_response(None, request, 'moo.html') - self.assertEqual(view(None, None).body, response.body) - - def test_registerView_withresult(self): - from repoze.bfg import testing - view = testing.registerView('moo.html', 'yo') - import types - self.failUnless(isinstance(view, types.FunctionType)) - from repoze.bfg.view import render_view_to_response - request = DummyRequest() - request.registry = self.registry - response = render_view_to_response(None, request, 'moo.html') - self.assertEqual(response.body, 'yo') - - def test_registerView_custom(self): - from repoze.bfg import testing - def view(context, request): - from webob import Response - return Response('123') - view = testing.registerView('moo.html', view=view) - import types - self.failUnless(isinstance(view, types.FunctionType)) - from repoze.bfg.view import render_view_to_response - request = DummyRequest() - request.registry = self.registry - response = render_view_to_response(None, request, 'moo.html') - self.assertEqual(response.body, '123') - - def test_registerView_with_permission_denying(self): - from repoze.bfg import testing - from repoze.bfg.exceptions import Forbidden - def view(context, request): - """ """ - view = testing.registerView('moo.html', view=view, permission='bar') - testing.registerDummySecurityPolicy(permissive=False) - import types - self.failUnless(isinstance(view, types.FunctionType)) - from repoze.bfg.view import render_view_to_response - request = DummyRequest() - request.registry = self.registry - self.assertRaises(Forbidden, render_view_to_response, - None, request, 'moo.html') - - def test_registerView_with_permission_denying2(self): - from repoze.bfg import testing - from repoze.bfg.security import view_execution_permitted - def view(context, request): - """ """ - view = testing.registerView('moo.html', view=view, permission='bar') - testing.registerDummySecurityPolicy(permissive=False) - import types - self.failUnless(isinstance(view, types.FunctionType)) - result = view_execution_permitted(None, None, 'moo.html') - self.assertEqual(result, False) - - def test_registerView_with_permission_allowing(self): - from repoze.bfg import testing - def view(context, request): - from webob import Response - return Response('123') - view = testing.registerView('moo.html', view=view, permission='bar') - testing.registerDummySecurityPolicy(permissive=True) - import types - self.failUnless(isinstance(view, types.FunctionType)) - from repoze.bfg.view import render_view_to_response - request = DummyRequest() - request.registry = self.registry - result = render_view_to_response(None, request, 'moo.html') - self.assertEqual(result.app_iter, ['123']) - - def test_registerViewPermission_defaults(self): - from zope.interface import Interface - from repoze.bfg.interfaces import IViewPermission - from repoze.bfg import testing - testing.registerViewPermission('moo.html') - result = self.registry.getMultiAdapter( - (Interface, Interface), IViewPermission, 'moo.html') - self.assertEqual(result, True) - - def test_registerViewPermission_denying(self): - from zope.interface import Interface - from repoze.bfg.interfaces import IViewPermission - from repoze.bfg import testing - testing.registerViewPermission('moo.html', result=False) - result = self.registry.getMultiAdapter( - (Interface, Interface), IViewPermission, 'moo.html') - self.assertEqual(result, False) - - def test_registerViewPermission_custom(self): - from zope.interface import Interface - from repoze.bfg.interfaces import IViewPermission - def viewperm(context, request): - return True - from repoze.bfg import testing - testing.registerViewPermission('moo.html', viewpermission=viewperm) - result = self.registry.getMultiAdapter( - (Interface, Interface), IViewPermission, 'moo.html') - self.assertEqual(result, True) - -class Test_registerAdapter(TestBase): - def test_registerAdapter(self): - from zope.interface import Interface - class provides(Interface): - pass - class Provider: - pass - class for_(Interface): - pass - from repoze.bfg import testing - testing.registerAdapter(Provider, (for_, for_), provides, name='foo') - adapter = self.registry.adapters.lookup( - (for_, for_), provides, name='foo') - self.assertEqual(adapter, Provider) - - def test_registerAdapter_notlist(self): - from zope.interface import Interface - class provides(Interface): - pass - class Provider: - pass - class for_(Interface): - pass - from repoze.bfg import testing - testing.registerAdapter(Provider, for_, provides, name='foo') - adapter = self.registry.adapters.lookup( - (for_,), provides, name='foo') - self.assertEqual(adapter, Provider) - -class Test_registerUtility(TestBase): - def test_registerUtility(self): - from zope.interface import implements - from zope.interface import Interface - class iface(Interface): - pass - class impl: - implements(iface) - def __call__(self): - return 'foo' - utility = impl() - from repoze.bfg import testing - testing.registerUtility(utility, iface, name='mudge') - self.assertEqual(self.registry.getUtility(iface, name='mudge')(), 'foo') - -class Test_registerSubscriber(TestBase): - def test_it(self): - from repoze.bfg import testing - L = [] - def subscriber(event): - L.append(event) - testing.registerSubscriber(subscriber, iface=IDummy) - event = DummyEvent() - self.registry.notify(event) - self.assertEqual(len(L), 1) - self.assertEqual(L[0], event) - self.registry.notify(object()) - self.assertEqual(len(L), 1) - -class Test_registerRoute(TestBase): - def test_registerRoute(self): - from repoze.bfg.url import route_url - from repoze.bfg.interfaces import IRoutesMapper - from repoze.bfg.testing import registerRoute - registerRoute(':pagename', 'home', DummyFactory) - mapper = self.registry.getUtility(IRoutesMapper) - self.assertEqual(len(mapper.routelist), 1) - request = DummyRequest() - self.assertEqual(route_url('home', request, pagename='abc'), - 'http://example.com/abc') - -class Test_registerRoutesMapper(TestBase): - def test_registerRoutesMapper(self): - from repoze.bfg.interfaces import IRoutesMapper - from repoze.bfg.testing import registerRoutesMapper - result = registerRoutesMapper() - mapper = self.registry.getUtility(IRoutesMapper) - self.assertEqual(result, mapper) - -class Test_registerSettings(TestBase): - def test_registerSettings(self): - from repoze.bfg.interfaces import ISettings - from repoze.bfg.testing import registerSettings - registerSettings({'a':1, 'b':2}) - settings = self.registry.getUtility(ISettings) - self.assertEqual(settings['a'], 1) - self.assertEqual(settings['b'], 2) - registerSettings(b=3, c=4) - settings = self.registry.getUtility(ISettings) - self.assertEqual(settings['a'], 1) - self.assertEqual(settings['b'], 3) - self.assertEqual(settings['c'], 4) - -class TestDummyRootFactory(unittest.TestCase): - def _makeOne(self, environ): - from repoze.bfg.testing import DummyRootFactory - return DummyRootFactory(environ) - - def test_it(self): - environ = {'bfg.routes.matchdict':{'a':1}} - factory = self._makeOne(environ) - self.assertEqual(factory.a, 1) - -class TestDummySecurityPolicy(unittest.TestCase): - def _getTargetClass(self): - from repoze.bfg.testing import DummySecurityPolicy - return DummySecurityPolicy - - def _makeOne(self, userid=None, groupids=(), permissive=True): - klass = self._getTargetClass() - return klass(userid, groupids, permissive) - - def test_authenticated_userid(self): - policy = self._makeOne('user') - self.assertEqual(policy.authenticated_userid(None), 'user') - - def test_effective_principals_userid(self): - policy = self._makeOne('user', ('group1',)) - from repoze.bfg.security import Everyone - from repoze.bfg.security import Authenticated - self.assertEqual(policy.effective_principals(None), - [Everyone, Authenticated, 'user', 'group1']) - - def test_effective_principals_nouserid(self): - policy = self._makeOne() - from repoze.bfg.security import Everyone - self.assertEqual(policy.effective_principals(None), [Everyone]) - - def test_permits(self): - policy = self._makeOne() - self.assertEqual(policy.permits(None, None, None), True) - - def test_principals_allowed_by_permission(self): - policy = self._makeOne('user', ('group1',)) - from repoze.bfg.security import Everyone - from repoze.bfg.security import Authenticated - result = policy.principals_allowed_by_permission(None, None) - self.assertEqual(result, [Everyone, Authenticated, 'user', 'group1']) - - def test_forget(self): - policy = self._makeOne() - self.assertEqual(policy.forget(None), []) - - def test_remember(self): - policy = self._makeOne() - self.assertEqual(policy.remember(None, None), []) - - - -class TestDummyModel(unittest.TestCase): - def _getTargetClass(self): - from repoze.bfg.testing import DummyModel - return DummyModel - - def _makeOne(self, name=None, parent=None, **kw): - klass = self._getTargetClass() - return klass(name, parent, **kw) - - def test__setitem__and__getitem__and__delitem__and__contains__and_get(self): - class Dummy: - pass - dummy = Dummy() - model = self._makeOne() - model['abc'] = dummy - self.assertEqual(dummy.__name__, 'abc') - self.assertEqual(dummy.__parent__, model) - self.assertEqual(model['abc'], dummy) - self.assertEqual(model.get('abc'), dummy) - self.assertRaises(KeyError, model.__getitem__, 'none') - self.failUnless('abc' in model) - del model['abc'] - self.failIf('abc' in model) - self.assertEqual(model.get('abc', 'foo'), 'foo') - self.assertEqual(model.get('abc'), None) - - def test_extra_params(self): - model = self._makeOne(foo=1) - self.assertEqual(model.foo, 1) - - def test_clone(self): - model = self._makeOne('name', 'parent', foo=1, bar=2) - clone = model.clone('name2', 'parent2', bar=1) - self.assertEqual(clone.bar, 1) - self.assertEqual(clone.__name__, 'name2') - self.assertEqual(clone.__parent__, 'parent2') - self.assertEqual(clone.foo, 1) - - def test_keys_items_values_len(self): - class Dummy: - pass - model = self._makeOne() - model['abc'] = Dummy() - model['def'] = Dummy() - self.assertEqual(model.values(), model.subs.values()) - self.assertEqual(model.items(), model.subs.items()) - self.assertEqual(model.keys(), model.subs.keys()) - self.assertEqual(len(model), 2) - - def test_nonzero(self): - model = self._makeOne() - self.assertEqual(model.__nonzero__(), True) - - def test_ctor_with__provides__(self): - model = self._makeOne(__provides__=IDummy) - self.failUnless(IDummy.providedBy(model)) - -class TestDummyRequest(unittest.TestCase): - def _getTargetClass(self): - from repoze.bfg.testing import DummyRequest - return DummyRequest - - def _makeOne(self, *arg, **kw): - return self._getTargetClass()(*arg, **kw) - - def test_params(self): - request = self._makeOne(params = {'say':'Hello'}, - environ = {'PATH_INFO':'/foo'}, - headers = {'X-Foo':'YUP'}, - ) - self.assertEqual(request.params['say'], 'Hello') - self.assertEqual(request.GET['say'], 'Hello') - self.assertEqual(request.POST['say'], 'Hello') - self.assertEqual(request.headers['X-Foo'], 'YUP') - self.assertEqual(request.environ['PATH_INFO'], '/foo') - - def test_defaults(self): - from repoze.bfg.threadlocal import get_current_registry - request = self._makeOne() - self.assertEqual(request.method, 'GET') - self.assertEqual(request.application_url, 'http://example.com') - self.assertEqual(request.host_url, 'http://example.com') - self.assertEqual(request.path_url, 'http://example.com') - self.assertEqual(request.url, 'http://example.com') - self.assertEqual(request.host, 'example.com:80') - self.assertEqual(request.content_length, 0) - self.assertEqual(request.environ.get('PATH_INFO'), None) - self.assertEqual(request.headers.get('X-Foo'), None) - self.assertEqual(request.params.get('foo'), None) - self.assertEqual(request.GET.get('foo'), None) - self.assertEqual(request.POST.get('foo'), None) - self.assertEqual(request.cookies.get('type'), None) - self.assertEqual(request.path, '/') - self.assertEqual(request.path_info, '/') - self.assertEqual(request.script_name, '') - self.assertEqual(request.path_qs, '') - self.assertEqual(request.view_name, '') - self.assertEqual(request.subpath, ()) - self.assertEqual(request.context, None) - self.assertEqual(request.root, None) - self.assertEqual(request.virtual_root, None) - self.assertEqual(request.virtual_root_path, ()) - self.assertEqual(request.registry, get_current_registry()) - - def test_params_explicit(self): - request = self._makeOne(params = {'foo':'bar'}) - self.assertEqual(request.params['foo'], 'bar') - self.assertEqual(request.GET['foo'], 'bar') - self.assertEqual(request.POST['foo'], 'bar') - - def test_environ_explicit(self): - request = self._makeOne(environ = {'PATH_INFO':'/foo'}) - self.assertEqual(request.environ['PATH_INFO'], '/foo') - - def test_headers_explicit(self): - request = self._makeOne(headers = {'X-Foo':'YUP'}) - self.assertEqual(request.headers['X-Foo'], 'YUP') - - def test_path_explicit(self): - request = self._makeOne(path = '/abc') - self.assertEqual(request.path, '/abc') - - def test_cookies_explicit(self): - request = self._makeOne(cookies = {'type': 'gingersnap'}) - self.assertEqual(request.cookies['type'], 'gingersnap') - - def test_post_explicit(self): - POST = {'foo': 'bar', 'baz': 'qux'} - request = self._makeOne(post=POST) - self.assertEqual(request.method, 'POST') - self.assertEqual(request.POST, POST) - # N.B.: Unlike a normal request, passing 'post' should *not* put - # explict POST data into params: doing so masks a possible - # XSS bug in the app. Tests for apps which don't care about - # the distinction should just use 'params'. - self.assertEqual(request.params, {}) - - def test_post_empty_shadows_params(self): - request = self._makeOne(params={'foo': 'bar'}, post={}) - self.assertEqual(request.method, 'POST') - self.assertEqual(request.params.get('foo'), 'bar') - self.assertEqual(request.POST.get('foo'), None) - - def test_kwargs(self): - request = self._makeOne(water = 1) - self.assertEqual(request.water, 1) - - def test_add_response_callback(self): - request = self._makeOne() - request.add_response_callback(1) - self.assertEqual(request.response_callbacks, [1]) - - -class TestDummyTemplateRenderer(unittest.TestCase): - def _getTargetClass(self, ): - from repoze.bfg.testing import DummyTemplateRenderer - return DummyTemplateRenderer - - def _makeOne(self, string_response=''): - return self._getTargetClass()(string_response=string_response) - - def test_implementation(self): - renderer = self._makeOne() - impl = renderer.implementation() - impl(a=1, b=2) - self.assertEqual(renderer._implementation._received['a'], 1) - self.assertEqual(renderer._implementation._received['b'], 2) - - def test_getattr(self): - renderer = self._makeOne() - renderer({'a':1}) - self.assertEqual(renderer.a, 1) - self.assertRaises(AttributeError, renderer.__getattr__, 'b') - - def test_assert_(self): - renderer = self._makeOne() - renderer({'a':1, 'b':2}) - self.assertRaises(AssertionError, renderer.assert_, c=1) - self.assertRaises(AssertionError, renderer.assert_, b=3) - self.failUnless(renderer.assert_(a=1, b=2)) - - def test_nondefault_string_response(self): - renderer = self._makeOne('abc') - result = renderer({'a':1, 'b':2}) - self.assertEqual(result, 'abc') - -class Test_setUp(unittest.TestCase): - def _callFUT(self, **kw): - from repoze.bfg.testing import setUp - return setUp(**kw) - - def test_it_defaults(self): - from repoze.bfg.threadlocal import manager - from repoze.bfg.threadlocal import get_current_registry - from repoze.bfg.registry import Registry - from zope.component import getSiteManager - old = True - manager.push(old) - try: - config = self._callFUT() - current = manager.get() - self.failIf(current is old) - self.assertEqual(config.registry, current['registry']) - self.assertEqual(current['registry'].__class__, Registry) - self.assertEqual(current['request'], None) - finally: - result = getSiteManager.sethook(None) - self.assertEqual(result, get_current_registry) - getSiteManager.reset() - manager.clear() - - def test_it_with_registry(self): - from zope.component import getSiteManager - from repoze.bfg.threadlocal import manager - registry = object() - try: - self._callFUT(registry=registry) - current = manager.get() - self.assertEqual(current['registry'], registry) - finally: - getSiteManager.reset() - manager.clear() - - def test_it_with_request(self): - from zope.component import getSiteManager - from repoze.bfg.threadlocal import manager - request = object() - try: - self._callFUT(request=request) - current = manager.get() - self.assertEqual(current['request'], request) - finally: - getSiteManager.reset() - manager.clear() - - def test_it_with_hook_zca_false(self): - from zope.component import getSiteManager - from repoze.bfg.threadlocal import manager - registry = object() - try: - self._callFUT(registry=registry, hook_zca=False) - sm = getSiteManager() - self.failIf(sm is registry) - finally: - getSiteManager.reset() - manager.clear() - -class Test_cleanUp(Test_setUp): - def _callFUT(self, *arg, **kw): - from repoze.bfg.testing import cleanUp - return cleanUp(*arg, **kw) - -class Test_tearDown(unittest.TestCase): - def _callFUT(self, **kw): - from repoze.bfg.testing import tearDown - return tearDown(**kw) - - def test_defaults(self): - from repoze.bfg.threadlocal import manager - from zope.component import getSiteManager - registry = DummyRegistry() - old = {'registry':registry} - hook = lambda *arg: None - try: - getSiteManager.sethook(hook) - manager.push(old) - self._callFUT() - current = manager.get() - self.assertNotEqual(current, old) - self.assertEqual(registry.inited, 2) - finally: - result = getSiteManager.sethook(None) - self.assertNotEqual(result, hook) - getSiteManager.reset() - manager.clear() - - def test_registry_cannot_be_inited(self): - from repoze.bfg.threadlocal import manager - registry = DummyRegistry() - def raiseit(name): - raise TypeError - registry.__init__ = raiseit - old = {'registry':registry} - try: - manager.push(old) - self._callFUT() # doesn't blow up - current = manager.get() - self.assertNotEqual(current, old) - self.assertEqual(registry.inited, 1) - finally: - manager.clear() - - def test_unhook_zc_false(self): - from repoze.bfg.threadlocal import manager - from zope.component import getSiteManager - hook = lambda *arg: None - try: - getSiteManager.sethook(hook) - self._callFUT(unhook_zca=False) - finally: - result = getSiteManager.sethook(None) - self.assertEqual(result, hook) - getSiteManager.reset() - manager.clear() - -class TestDummyRendererFactory(unittest.TestCase): - def _makeOne(self, name, factory): - from repoze.bfg.testing import DummyRendererFactory - return DummyRendererFactory(name, factory) - - def test_add_no_colon(self): - f = self._makeOne('name', None) - f.add('spec', 'renderer') - self.assertEqual(f.renderers['spec'], 'renderer') - - def test_add_with_colon(self): - f = self._makeOne('name', None) - f.add('spec:spec2', 'renderer') - self.assertEqual(f.renderers['spec:spec2'], 'renderer') - self.assertEqual(f.renderers['spec2'], 'renderer') - - def test_call(self): - f = self._makeOne('name', None) - f.renderers['spec'] = 'renderer' - self.assertEqual(f('spec'), 'renderer') - - def test_call2(self): - f = self._makeOne('name', None) - f.renderers['spec'] = 'renderer' - self.assertEqual(f('spec:spec'), 'renderer') - - def test_call3(self): - def factory(spec): - return 'renderer' - f = self._makeOne('name', factory) - self.assertEqual(f('spec'), 'renderer') - - def test_call_miss(self): - f = self._makeOne('name', None) - self.assertRaises(KeyError, f, 'spec') - -class TestMockTemplate(unittest.TestCase): - def _makeOne(self, response): - from repoze.bfg.testing import MockTemplate - return MockTemplate(response) - - def test_getattr(self): - template = self._makeOne(None) - self.assertEqual(template.foo, template) - - def test_getitem(self): - template = self._makeOne(None) - self.assertEqual(template['foo'], template) - - def test_call(self): - template = self._makeOne('123') - self.assertEqual(template(), '123') - -from zope.interface import Interface -from zope.interface import implements - -class IDummy(Interface): - pass - -class DummyEvent: - implements(IDummy) - -class DummyRequest: - application_url = 'http://example.com' - -class DummyFactory: - def __init__(self, environ): - """ """ - -class DummyRegistry(object): - inited = 0 - __name__ = 'name' - def __init__(self, name=''): - self.inited = self.inited + 1 - diff --git a/repoze/bfg/tests/test_threadlocal.py b/repoze/bfg/tests/test_threadlocal.py deleted file mode 100644 index 6bb18c4ff..000000000 --- a/repoze/bfg/tests/test_threadlocal.py +++ /dev/null @@ -1,95 +0,0 @@ -from repoze.bfg import testing -import unittest - -class TestThreadLocalManager(unittest.TestCase): - def setUp(self): - testing.setUp() - - def tearDown(self): - testing.tearDown() - - def _getTargetClass(self): - from repoze.bfg.threadlocal import ThreadLocalManager - return ThreadLocalManager - - def _makeOne(self, default=lambda *x: 1): - return self._getTargetClass()(default) - - def test_init(self): - local = self._makeOne() - self.assertEqual(local.stack, []) - self.assertEqual(local.get(), 1) - - def test_default(self): - def thedefault(): - return '123' - local = self._makeOne(thedefault) - self.assertEqual(local.stack, []) - self.assertEqual(local.get(), '123') - - def test_push_and_pop(self): - local = self._makeOne() - local.push(True) - self.assertEqual(local.get(), True) - self.assertEqual(local.pop(), True) - self.assertEqual(local.pop(), None) - self.assertEqual(local.get(), 1) - - def test_set_get_and_clear(self): - local = self._makeOne() - local.set(None) - self.assertEqual(local.stack, [None]) - self.assertEqual(local.get(), None) - local.clear() - self.assertEqual(local.get(), 1) - local.clear() - self.assertEqual(local.get(), 1) - - -class TestGetCurrentRequest(unittest.TestCase): - def _callFUT(self): - from repoze.bfg.threadlocal import get_current_request - return get_current_request() - - def test_it_None(self): - request = self._callFUT() - self.assertEqual(request, None) - - def test_it(self): - from repoze.bfg.threadlocal import manager - request = object() - try: - manager.push({'request':request}) - self.assertEqual(self._callFUT(), request) - finally: - manager.pop() - self.assertEqual(self._callFUT(), None) - -class GetCurrentRegistryTests(unittest.TestCase): - def setUp(self): - testing.setUp() - - def tearDown(self): - testing.tearDown() - - def _callFUT(self): - from repoze.bfg.threadlocal import get_current_registry - return get_current_registry() - - def test_it(self): - from repoze.bfg.threadlocal import manager - try: - manager.push({'registry':123}) - self.assertEqual(self._callFUT(), 123) - finally: - manager.pop() - -class GetCurrentRegistryWithoutTestingRegistry(unittest.TestCase): - def _callFUT(self): - from repoze.bfg.threadlocal import get_current_registry - return get_current_registry() - - def test_it(self): - from repoze.bfg.registry import global_registry - self.assertEqual(self._callFUT(), global_registry) - diff --git a/repoze/bfg/tests/test_traversal.py b/repoze/bfg/tests/test_traversal.py deleted file mode 100644 index 1cae0a05f..000000000 --- a/repoze/bfg/tests/test_traversal.py +++ /dev/null @@ -1,1033 +0,0 @@ -import unittest - -from repoze.bfg.testing import cleanUp - -class TraversalPathTests(unittest.TestCase): - def _callFUT(self, path): - from repoze.bfg.traversal import traversal_path - return traversal_path(path) - - def test_path_startswith_endswith(self): - self.assertEqual(self._callFUT('/foo/'), (u'foo',)) - - def test_empty_elements(self): - self.assertEqual(self._callFUT('foo///'), (u'foo',)) - - def test_onedot(self): - self.assertEqual(self._callFUT('foo/./bar'), (u'foo', u'bar')) - - def test_twodots(self): - self.assertEqual(self._callFUT('foo/../bar'), (u'bar',)) - - def test_element_urllquoted(self): - self.assertEqual(self._callFUT('/foo/space%20thing/bar'), - (u'foo', u'space thing', u'bar')) - - def test_segments_are_unicode(self): - result = self._callFUT('/foo/bar') - self.assertEqual(type(result[0]), unicode) - self.assertEqual(type(result[1]), unicode) - - def test_same_value_returned_if_cached(self): - result1 = self._callFUT('/foo/bar') - result2 = self._callFUT('/foo/bar') - self.assertEqual(result1, (u'foo', u'bar')) - self.assertEqual(result2, (u'foo', u'bar')) - - def test_utf8(self): - import urllib - la = 'La Pe\xc3\xb1a' - encoded = urllib.quote(la) - decoded = unicode(la, 'utf-8') - path = '/'.join([encoded, encoded]) - self.assertEqual(self._callFUT(path), (decoded, decoded)) - - def test_utf16(self): - from repoze.bfg.exceptions import URLDecodeError - import urllib - la = unicode('La Pe\xc3\xb1a', 'utf-8').encode('utf-16') - encoded = urllib.quote(la) - path = '/'.join([encoded, encoded]) - self.assertRaises(URLDecodeError, self._callFUT, path) - - def test_unicode_highorder_chars(self): - path = u'/%E6%B5%81%E8%A1%8C%E8%B6%8B%E5%8A%BF' - self.assertEqual(self._callFUT(path), (u'\u6d41\u884c\u8d8b\u52bf',)) - - def test_unicode_simple(self): - path = u'/abc' - self.assertEqual(self._callFUT(path), (u'abc',)) - - def test_unicode_undecodeable_to_ascii(self): - path = unicode('/La Pe\xc3\xb1a', 'utf-8') - self.assertRaises(UnicodeEncodeError, self._callFUT, path) - -class ModelGraphTraverserTests(unittest.TestCase): - def setUp(self): - cleanUp() - - def tearDown(self): - cleanUp() - - def _getTargetClass(self): - from repoze.bfg.traversal import ModelGraphTraverser - return ModelGraphTraverser - - def _makeOne(self, *arg, **kw): - klass = self._getTargetClass() - return klass(*arg, **kw) - - def _getEnviron(self, **kw): - environ = {} - environ.update(kw) - return environ - - def test_class_conforms_to_ITraverser(self): - from zope.interface.verify import verifyClass - from repoze.bfg.interfaces import ITraverser - verifyClass(ITraverser, self._getTargetClass()) - - def test_instance_conforms_to_ITraverser(self): - from zope.interface.verify import verifyObject - from repoze.bfg.interfaces import ITraverser - context = DummyContext() - verifyObject(ITraverser, self._makeOne(context)) - - def test_call_with_no_pathinfo(self): - policy = self._makeOne(None) - environ = self._getEnviron() - result = policy(environ) - self.assertEqual(result['context'], None) - self.assertEqual(result['view_name'], '') - self.assertEqual(result['subpath'], ()) - self.assertEqual(result['traversed'], ()) - self.assertEqual(result['root'], policy.root) - self.assertEqual(result['virtual_root'], policy.root) - self.assertEqual(result['virtual_root_path'], ()) - - def test_call_pathel_with_no_getitem(self): - policy = self._makeOne(None) - environ = self._getEnviron(PATH_INFO='/foo/bar') - result = policy(environ) - self.assertEqual(result['context'], None) - self.assertEqual(result['view_name'], 'foo') - self.assertEqual(result['subpath'], ('bar',)) - self.assertEqual(result['traversed'], ()) - self.assertEqual(result['root'], policy.root) - self.assertEqual(result['virtual_root'], policy.root) - self.assertEqual(result['virtual_root_path'], ()) - - def test_call_withconn_getitem_emptypath_nosubpath(self): - root = DummyContext() - policy = self._makeOne(root) - environ = self._getEnviron(PATH_INFO='') - result = policy(environ) - self.assertEqual(result['context'], root) - self.assertEqual(result['view_name'], '') - self.assertEqual(result['subpath'], ()) - self.assertEqual(result['traversed'], ()) - self.assertEqual(result['root'], root) - self.assertEqual(result['virtual_root'], root) - self.assertEqual(result['virtual_root_path'], ()) - - def test_call_withconn_getitem_withpath_nosubpath(self): - foo = DummyContext() - root = DummyContext(foo) - policy = self._makeOne(root) - environ = self._getEnviron(PATH_INFO='/foo/bar') - result = policy(environ) - self.assertEqual(result['context'], foo) - self.assertEqual(result['view_name'], 'bar') - self.assertEqual(result['subpath'], ()) - self.assertEqual(result['traversed'], (u'foo',)) - self.assertEqual(result['root'], root) - self.assertEqual(result['virtual_root'], root) - self.assertEqual(result['virtual_root_path'], ()) - - def test_call_withconn_getitem_withpath_withsubpath(self): - foo = DummyContext() - root = DummyContext(foo) - policy = self._makeOne(root) - environ = self._getEnviron(PATH_INFO='/foo/bar/baz/buz') - result = policy(environ) - self.assertEqual(result['context'], foo) - self.assertEqual(result['view_name'], 'bar') - self.assertEqual(result['subpath'], ('baz', 'buz')) - self.assertEqual(result['traversed'], (u'foo',)) - self.assertEqual(result['root'], root) - self.assertEqual(result['virtual_root'], root) - self.assertEqual(result['virtual_root_path'], ()) - - def test_call_with_explicit_viewname(self): - foo = DummyContext() - root = DummyContext(foo) - policy = self._makeOne(root) - environ = self._getEnviron(PATH_INFO='/@@foo') - result = policy(environ) - self.assertEqual(result['context'], root) - self.assertEqual(result['view_name'], 'foo') - self.assertEqual(result['subpath'], ()) - self.assertEqual(result['traversed'], ()) - self.assertEqual(result['root'], root) - self.assertEqual(result['virtual_root'], root) - self.assertEqual(result['virtual_root_path'], ()) - - def test_call_with_vh_root(self): - environ = self._getEnviron(PATH_INFO='/baz', - HTTP_X_VHM_ROOT='/foo/bar') - baz = DummyContext(None, 'baz') - bar = DummyContext(baz, 'bar') - foo = DummyContext(bar, 'foo') - root = DummyContext(foo, 'root') - policy = self._makeOne(root) - result = policy(environ) - self.assertEqual(result['context'], baz) - self.assertEqual(result['view_name'], '') - self.assertEqual(result['subpath'], ()) - self.assertEqual(result['traversed'], (u'foo', u'bar', u'baz')) - self.assertEqual(result['root'], root) - self.assertEqual(result['virtual_root'], bar) - self.assertEqual(result['virtual_root_path'], (u'foo', u'bar')) - - def test_call_with_vh_root2(self): - environ = self._getEnviron(PATH_INFO='/bar/baz', - HTTP_X_VHM_ROOT='/foo') - baz = DummyContext(None, 'baz') - bar = DummyContext(baz, 'bar') - foo = DummyContext(bar, 'foo') - root = DummyContext(foo, 'root') - policy = self._makeOne(root) - result = policy(environ) - self.assertEqual(result['context'], baz) - self.assertEqual(result['view_name'], '') - self.assertEqual(result['subpath'], ()) - self.assertEqual(result['traversed'], (u'foo', u'bar', u'baz')) - self.assertEqual(result['root'], root) - self.assertEqual(result['virtual_root'], foo) - self.assertEqual(result['virtual_root_path'], (u'foo',)) - - def test_call_with_vh_root3(self): - environ = self._getEnviron(PATH_INFO='/foo/bar/baz', - HTTP_X_VHM_ROOT='/') - baz = DummyContext() - bar = DummyContext(baz) - foo = DummyContext(bar) - root = DummyContext(foo) - policy = self._makeOne(root) - result = policy(environ) - self.assertEqual(result['context'], baz) - self.assertEqual(result['view_name'], '') - self.assertEqual(result['subpath'], ()) - self.assertEqual(result['traversed'], (u'foo', u'bar', u'baz')) - self.assertEqual(result['root'], root) - self.assertEqual(result['virtual_root'], root) - self.assertEqual(result['virtual_root_path'], ()) - - def test_call_with_vh_root4(self): - environ = self._getEnviron(PATH_INFO='/', - HTTP_X_VHM_ROOT='/foo/bar/baz') - baz = DummyContext(None, 'baz') - bar = DummyContext(baz, 'bar') - foo = DummyContext(bar, 'foo') - root = DummyContext(foo, 'root') - policy = self._makeOne(root) - result = policy(environ) - self.assertEqual(result['context'], baz) - self.assertEqual(result['view_name'], '') - self.assertEqual(result['subpath'], ()) - self.assertEqual(result['traversed'], (u'foo', u'bar', u'baz')) - self.assertEqual(result['root'], root) - self.assertEqual(result['virtual_root'], baz) - self.assertEqual(result['virtual_root_path'], (u'foo', u'bar', u'baz')) - - def test_call_with_vh_root_path_root(self): - policy = self._makeOne(None) - environ = self._getEnviron(HTTP_X_VHM_ROOT='/', - PATH_INFO='/') - result = policy(environ) - self.assertEqual(result['context'], None) - self.assertEqual(result['view_name'], '') - self.assertEqual(result['subpath'], ()) - self.assertEqual(result['traversed'], ()) - self.assertEqual(result['root'], policy.root) - self.assertEqual(result['virtual_root'], policy.root) - self.assertEqual(result['virtual_root_path'], ()) - - def test_non_utf8_path_segment_unicode_path_segments_fails(self): - foo = DummyContext() - root = DummyContext(foo) - policy = self._makeOne(root) - segment = unicode('LaPe\xc3\xb1a', 'utf-8').encode('utf-16') - environ = self._getEnviron(PATH_INFO='/%s' % segment) - from repoze.bfg.exceptions import URLDecodeError - self.assertRaises(URLDecodeError, policy, environ) - - def test_non_utf8_path_segment_settings_unicode_path_segments_fails(self): - foo = DummyContext() - root = DummyContext(foo) - policy = self._makeOne(root) - segment = unicode('LaPe\xc3\xb1a', 'utf-8').encode('utf-16') - environ = self._getEnviron(PATH_INFO='/%s' % segment) - from repoze.bfg.exceptions import URLDecodeError - self.assertRaises(URLDecodeError, policy, environ) - - def test_withroute_nothingfancy(self): - model = DummyContext() - traverser = self._makeOne(model) - environ = {'bfg.routes.matchdict': {}} - result = traverser(environ) - self.assertEqual(result['context'], model) - self.assertEqual(result['view_name'], '') - self.assertEqual(result['subpath'], ()) - self.assertEqual(result['traversed'], ()) - self.assertEqual(result['root'], model) - self.assertEqual(result['virtual_root'], model) - self.assertEqual(result['virtual_root_path'], ()) - - def test_withroute_with_subpath_string(self): - model = DummyContext() - traverser = self._makeOne(model) - environ = {'bfg.routes.matchdict': {'subpath':'/a/b/c'}} - result = traverser(environ) - self.assertEqual(result['context'], model) - self.assertEqual(result['view_name'], '') - self.assertEqual(result['subpath'], ('a', 'b','c')) - self.assertEqual(result['traversed'], ()) - self.assertEqual(result['root'], model) - self.assertEqual(result['virtual_root'], model) - self.assertEqual(result['virtual_root_path'], ()) - - def test_withroute_with_subpath_tuple(self): - model = DummyContext() - traverser = self._makeOne(model) - environ = {'bfg.routes.matchdict': {'subpath':('a', 'b', 'c')}} - result = traverser(environ) - self.assertEqual(result['context'], model) - self.assertEqual(result['view_name'], '') - self.assertEqual(result['subpath'], ('a', 'b','c')) - self.assertEqual(result['traversed'], ()) - self.assertEqual(result['root'], model) - self.assertEqual(result['virtual_root'], model) - self.assertEqual(result['virtual_root_path'], ()) - - def test_withroute_and_traverse_string(self): - model = DummyContext() - traverser = self._makeOne(model) - environ = {'bfg.routes.matchdict': {'traverse':'foo/bar'}} - result = traverser(environ) - self.assertEqual(result['context'], model) - self.assertEqual(result['view_name'], 'foo') - self.assertEqual(result['subpath'], ('bar',)) - self.assertEqual(result['traversed'], ()) - self.assertEqual(result['root'], model) - self.assertEqual(result['virtual_root'], model) - self.assertEqual(result['virtual_root_path'], ()) - - def test_withroute_and_traverse_tuple(self): - model = DummyContext() - traverser = self._makeOne(model) - environ = {'bfg.routes.matchdict': {'traverse':('foo', 'bar')}} - result = traverser(environ) - self.assertEqual(result['context'], model) - self.assertEqual(result['view_name'], 'foo') - self.assertEqual(result['subpath'], ('bar',)) - self.assertEqual(result['traversed'], ()) - self.assertEqual(result['root'], model) - self.assertEqual(result['virtual_root'], model) - self.assertEqual(result['virtual_root_path'], ()) - -class FindInterfaceTests(unittest.TestCase): - def _callFUT(self, context, iface): - from repoze.bfg.traversal import find_interface - return find_interface(context, iface) - - def test_it_interface(self): - baz = DummyContext() - bar = DummyContext(baz) - foo = DummyContext(bar) - root = DummyContext(foo) - root.__parent__ = None - root.__name__ = 'root' - foo.__parent__ = root - foo.__name__ = 'foo' - bar.__parent__ = foo - bar.__name__ = 'bar' - baz.__parent__ = bar - baz.__name__ = 'baz' - from zope.interface import directlyProvides - from zope.interface import Interface - class IFoo(Interface): - pass - directlyProvides(root, IFoo) - result = self._callFUT(baz, IFoo) - self.assertEqual(result.__name__, 'root') - - def test_it_class(self): - class DummyRoot(object): - def __init__(self, child): - self.child = child - baz = DummyContext() - bar = DummyContext(baz) - foo = DummyContext(bar) - root = DummyRoot(foo) - root.__parent__ = None - root.__name__ = 'root' - foo.__parent__ = root - foo.__name__ = 'foo' - bar.__parent__ = foo - bar.__name__ = 'bar' - baz.__parent__ = bar - baz.__name__ = 'baz' - result = self._callFUT(baz, DummyRoot) - self.assertEqual(result.__name__, 'root') - -class FindRootTests(unittest.TestCase): - def _callFUT(self, context): - from repoze.bfg.traversal import find_root - return find_root(context) - - def test_it(self): - dummy = DummyContext() - baz = DummyContext() - baz.__parent__ = dummy - baz.__name__ = 'baz' - dummy.__parent__ = None - dummy.__name__ = None - result = self._callFUT(baz) - self.assertEqual(result, dummy) - -class FindModelTests(unittest.TestCase): - def _callFUT(self, context, name): - from repoze.bfg.traversal import find_model - return find_model(context, name) - - def _registerTraverser(self, traverser): - from repoze.bfg.threadlocal import get_current_registry - reg = get_current_registry() - from repoze.bfg.interfaces import ITraverser - from zope.interface import Interface - reg.registerAdapter(traverser, (Interface,), ITraverser) - - def test_list(self): - model = DummyContext() - traverser = make_traverser({'context':model, 'view_name':''}) - self._registerTraverser(traverser) - result = self._callFUT(model, ['']) - self.assertEqual(result, model) - self.assertEqual(model.request.environ['PATH_INFO'], '/') - - def test_generator(self): - model = DummyContext() - traverser = make_traverser({'context':model, 'view_name':''}) - self._registerTraverser(traverser) - def foo(): - yield '' - result = self._callFUT(model, foo()) - self.assertEqual(result, model) - self.assertEqual(model.request.environ['PATH_INFO'], '/') - - def test_self_string_found(self): - model = DummyContext() - traverser = make_traverser({'context':model, 'view_name':''}) - self._registerTraverser(traverser) - result = self._callFUT(model, '') - self.assertEqual(result, model) - self.assertEqual(model.request.environ['PATH_INFO'], '') - - def test_self_tuple_found(self): - model = DummyContext() - traverser = make_traverser({'context':model, 'view_name':''}) - self._registerTraverser(traverser) - result = self._callFUT(model, ()) - self.assertEqual(result, model) - self.assertEqual(model.request.environ['PATH_INFO'], '') - - def test_relative_string_found(self): - model = DummyContext() - baz = DummyContext() - traverser = make_traverser({'context':baz, 'view_name':''}) - self._registerTraverser(traverser) - result = self._callFUT(model, 'baz') - self.assertEqual(result, baz) - self.assertEqual(model.request.environ['PATH_INFO'], 'baz') - - def test_relative_tuple_found(self): - model = DummyContext() - baz = DummyContext() - traverser = make_traverser({'context':baz, 'view_name':''}) - self._registerTraverser(traverser) - result = self._callFUT(model, ('baz',)) - self.assertEqual(result, baz) - self.assertEqual(model.request.environ['PATH_INFO'], 'baz') - - def test_relative_string_notfound(self): - model = DummyContext() - baz = DummyContext() - traverser = make_traverser({'context':baz, 'view_name':'bar'}) - self._registerTraverser(traverser) - self.assertRaises(KeyError, self._callFUT, model, 'baz') - self.assertEqual(model.request.environ['PATH_INFO'], 'baz') - - def test_relative_tuple_notfound(self): - model = DummyContext() - baz = DummyContext() - traverser = make_traverser({'context':baz, 'view_name':'bar'}) - self._registerTraverser(traverser) - self.assertRaises(KeyError, self._callFUT, model, ('baz',)) - self.assertEqual(model.request.environ['PATH_INFO'], 'baz') - - def test_absolute_string_found(self): - root = DummyContext() - model = DummyContext() - model.__parent__ = root - model.__name__ = 'baz' - traverser = make_traverser({'context':root, 'view_name':''}) - self._registerTraverser(traverser) - result = self._callFUT(model, '/') - self.assertEqual(result, root) - self.assertEqual(root.wascontext, True) - self.assertEqual(root.request.environ['PATH_INFO'], '/') - - def test_absolute_tuple_found(self): - root = DummyContext() - model = DummyContext() - model.__parent__ = root - model.__name__ = 'baz' - traverser = make_traverser({'context':root, 'view_name':''}) - self._registerTraverser(traverser) - result = self._callFUT(model, ('',)) - self.assertEqual(result, root) - self.assertEqual(root.wascontext, True) - self.assertEqual(root.request.environ['PATH_INFO'], '/') - - def test_absolute_string_notfound(self): - root = DummyContext() - model = DummyContext() - model.__parent__ = root - model.__name__ = 'baz' - traverser = make_traverser({'context':root, 'view_name':'fuz'}) - self._registerTraverser(traverser) - self.assertRaises(KeyError, self._callFUT, model, '/') - self.assertEqual(root.wascontext, True) - self.assertEqual(root.request.environ['PATH_INFO'], '/') - - def test_absolute_tuple_notfound(self): - root = DummyContext() - model = DummyContext() - model.__parent__ = root - model.__name__ = 'baz' - traverser = make_traverser({'context':root, 'view_name':'fuz'}) - self._registerTraverser(traverser) - self.assertRaises(KeyError, self._callFUT, model, ('',)) - self.assertEqual(root.wascontext, True) - self.assertEqual(root.request.environ['PATH_INFO'], '/') - - -class ModelPathTests(unittest.TestCase): - def _callFUT(self, model, *elements): - from repoze.bfg.traversal import model_path - return model_path(model, *elements) - - def test_it(self): - baz = DummyContext() - bar = DummyContext(baz) - foo = DummyContext(bar) - root = DummyContext(foo) - root.__parent__ = None - root.__name__ = None - foo.__parent__ = root - foo.__name__ = 'foo ' - bar.__parent__ = foo - bar.__name__ = 'bar' - baz.__parent__ = bar - baz.__name__ = 'baz' - result = self._callFUT(baz, 'this/theotherthing', 'that') - self.assertEqual(result, '/foo%20/bar/baz/this%2Ftheotherthing/that') - - def test_root_default(self): - root = DummyContext() - root.__parent__ = None - root.__name__ = None - result = self._callFUT(root) - self.assertEqual(result, '/') - - def test_root_default_emptystring(self): - root = DummyContext() - root.__parent__ = None - root.__name__ = '' - result = self._callFUT(root) - self.assertEqual(result, '/') - - def test_root_object_nonnull_name_direct(self): - root = DummyContext() - root.__parent__ = None - root.__name__ = 'flubadub' - result = self._callFUT(root) - self.assertEqual(result, 'flubadub') # insane case - - def test_root_object_nonnull_name_indirect(self): - root = DummyContext() - root.__parent__ = None - root.__name__ = 'flubadub' - other = DummyContext() - other.__parent__ = root - other.__name__ = 'barker' - result = self._callFUT(other) - self.assertEqual(result, 'flubadub/barker') # insane case - - def test_nonroot_default(self): - root = DummyContext() - root.__parent__ = None - root.__name__ = None - other = DummyContext() - other.__parent__ = root - other.__name__ = 'other' - result = self._callFUT(other) - self.assertEqual(result, '/other') - - def test_path_with_None_itermediate_names(self): - root = DummyContext() - root.__parent__ = None - root.__name__ = None - other = DummyContext() - other.__parent__ = root - other.__name__ = None - other2 = DummyContext() - other2.__parent__ = other - other2.__name__ = 'other2' - result = self._callFUT(other2) - self.assertEqual(result, '//other2') - -class ModelPathTupleTests(unittest.TestCase): - def _callFUT(self, model, *elements): - from repoze.bfg.traversal import model_path_tuple - return model_path_tuple(model, *elements) - - def test_it(self): - baz = DummyContext() - bar = DummyContext(baz) - foo = DummyContext(bar) - root = DummyContext(foo) - root.__parent__ = None - root.__name__ = None - foo.__parent__ = root - foo.__name__ = 'foo ' - bar.__parent__ = foo - bar.__name__ = 'bar' - baz.__parent__ = bar - baz.__name__ = 'baz' - result = self._callFUT(baz, 'this/theotherthing', 'that') - self.assertEqual(result, ('','foo ', 'bar', 'baz', 'this/theotherthing', - 'that')) - - def test_root_default(self): - root = DummyContext() - root.__parent__ = None - root.__name__ = None - result = self._callFUT(root) - self.assertEqual(result, ('',)) - - def test_nonroot_default(self): - root = DummyContext() - root.__parent__ = None - root.__name__ = None - other = DummyContext() - other.__parent__ = root - other.__name__ = 'other' - result = self._callFUT(other) - self.assertEqual(result, ('', 'other')) - - def test_path_with_None_itermediate_names(self): - root = DummyContext() - root.__parent__ = None - root.__name__ = None - other = DummyContext() - other.__parent__ = root - other.__name__ = None - other2 = DummyContext() - other2.__parent__ = other - other2.__name__ = 'other2' - result = self._callFUT(other2) - self.assertEqual(result, ('', '', 'other2')) - -class QuotePathSegmentTests(unittest.TestCase): - def _callFUT(self, s): - from repoze.bfg.traversal import quote_path_segment - return quote_path_segment(s) - - def test_unicode(self): - la = unicode('/La Pe\xc3\xb1a', 'utf-8') - result = self._callFUT(la) - self.assertEqual(result, '%2FLa%20Pe%C3%B1a') - - def test_string(self): - s = '/ hello!' - result = self._callFUT(s) - self.assertEqual(result, '%2F%20hello%21') - -class TraversalContextURLTests(unittest.TestCase): - def _makeOne(self, context, url): - return self._getTargetClass()(context, url) - - def _getTargetClass(self): - from repoze.bfg.traversal import TraversalContextURL - return TraversalContextURL - - def _registerTraverser(self, traverser): - from repoze.bfg.threadlocal import get_current_registry - reg = get_current_registry() - from repoze.bfg.interfaces import ITraverser - from zope.interface import Interface - reg.registerAdapter(traverser, (Interface,), ITraverser) - - def test_class_conforms_to_IContextURL(self): - from zope.interface.verify import verifyClass - from repoze.bfg.interfaces import IContextURL - verifyClass(IContextURL, self._getTargetClass()) - - def test_instance_conforms_to_IContextURL(self): - from zope.interface.verify import verifyObject - from repoze.bfg.interfaces import IContextURL - context = DummyContext() - request = DummyRequest() - verifyObject(IContextURL, self._makeOne(context, request)) - - def test_call_withlineage(self): - baz = DummyContext() - bar = DummyContext(baz) - foo = DummyContext(bar) - root = DummyContext(foo) - root.__parent__ = None - root.__name__ = None - foo.__parent__ = root - foo.__name__ = 'foo ' - bar.__parent__ = foo - bar.__name__ = 'bar' - baz.__parent__ = bar - baz.__name__ = 'baz' - request = DummyRequest() - context_url = self._makeOne(baz, request) - result = context_url() - self.assertEqual(result, 'http://example.com:5432/foo%20/bar/baz/') - - def test_call_nolineage(self): - context = DummyContext() - context.__name__ = '' - context.__parent__ = None - request = DummyRequest() - context_url = self._makeOne(context, request) - result = context_url() - self.assertEqual(result, 'http://example.com:5432/') - - def test_call_unicode_mixed_with_bytes_in_model_names(self): - root = DummyContext() - root.__parent__ = None - root.__name__ = None - one = DummyContext() - one.__parent__ = root - one.__name__ = unicode('La Pe\xc3\xb1a', 'utf-8') - two = DummyContext() - two.__parent__ = one - two.__name__ = 'La Pe\xc3\xb1a' - request = DummyRequest() - context_url = self._makeOne(two, request) - result = context_url() - self.assertEqual(result, - 'http://example.com:5432/La%20Pe%C3%B1a/La%20Pe%C3%B1a/') - - def test_call_with_virtual_root_path(self): - from repoze.bfg.interfaces import VH_ROOT_KEY - root = DummyContext() - root.__parent__ = None - root.__name__ = None - one = DummyContext() - one.__parent__ = root - one.__name__ = 'one' - two = DummyContext() - two.__parent__ = one - two.__name__ = 'two' - request = DummyRequest({VH_ROOT_KEY:'/one'}) - context_url = self._makeOne(two, request) - result = context_url() - self.assertEqual(result, 'http://example.com:5432/two/') - - request = DummyRequest({VH_ROOT_KEY:'/one/two'}) - context_url = self._makeOne(two, request) - result = context_url() - self.assertEqual(result, 'http://example.com:5432/') - - def test_virtual_root_no_virtual_root_path(self): - root = DummyContext() - root.__name__ = None - root.__parent__ = None - one = DummyContext() - one.__name__ = 'one' - one.__parent__ = root - request = DummyRequest() - context_url = self._makeOne(one, request) - self.assertEqual(context_url.virtual_root(), root) - - def test_virtual_root_no_virtual_root_path_with_root_on_request(self): - context = DummyContext() - context.__parent__ = None - request = DummyRequest() - request.root = DummyContext() - context_url = self._makeOne(context, request) - self.assertEqual(context_url.virtual_root(), request.root) - - def test_virtual_root_with_virtual_root_path(self): - from repoze.bfg.interfaces import VH_ROOT_KEY - context = DummyContext() - context.__parent__ = None - traversed_to = DummyContext() - environ = {VH_ROOT_KEY:'/one'} - request = DummyRequest(environ) - traverser = make_traverser({'context':traversed_to, 'view_name':''}) - self._registerTraverser(traverser) - context_url = self._makeOne(context, request) - self.assertEqual(context_url.virtual_root(), traversed_to) - self.assertEqual(context.request.environ['PATH_INFO'], '/one') - - def test_empty_names_not_ignored(self): - bar = DummyContext() - empty = DummyContext(bar) - root = DummyContext(empty) - root.__parent__ = None - root.__name__ = None - empty.__parent__ = root - empty.__name__ = '' - bar.__parent__ = empty - bar.__name__ = 'bar' - request = DummyRequest() - context_url = self._makeOne(bar, request) - result = context_url() - self.assertEqual(result, 'http://example.com:5432//bar/') - -class TestVirtualRoot(unittest.TestCase): - def setUp(self): - cleanUp() - - def tearDown(self): - cleanUp() - - def _callFUT(self, model, request): - from repoze.bfg.traversal import virtual_root - return virtual_root(model, request) - - def test_registered(self): - from repoze.bfg.interfaces import IContextURL - from zope.interface import Interface - request = _makeRequest() - request.registry.registerAdapter(DummyContextURL, (Interface,Interface), - IContextURL) - context = DummyContext() - result = self._callFUT(context, request) - self.assertEqual(result, '123') - - def test_default(self): - context = DummyContext() - request = _makeRequest() - request.environ['PATH_INFO'] = '/' - result = self._callFUT(context, request) - self.assertEqual(result, context) - - def test_default_no_registry_on_request(self): - context = DummyContext() - request = _makeRequest() - del request.registry - request.environ['PATH_INFO'] = '/' - result = self._callFUT(context, request) - self.assertEqual(result, context) - -class TraverseTests(unittest.TestCase): - def setUp(self): - cleanUp() - - def tearDown(self): - cleanUp() - - def _callFUT(self, context, name): - from repoze.bfg.traversal import traverse - return traverse(context, name) - - def _registerTraverser(self, traverser): - from repoze.bfg.threadlocal import get_current_registry - reg = get_current_registry() - from repoze.bfg.interfaces import ITraverser - from zope.interface import Interface - reg.registerAdapter(traverser, (Interface,), ITraverser) - - def test_request_has_registry(self): - from repoze.bfg.threadlocal import get_current_registry - model = DummyContext() - traverser = make_traverser({'context':model, 'view_name':''}) - self._registerTraverser(traverser) - self._callFUT(model, ['']) - self.assertEqual(model.request.registry, get_current_registry()) - - def test_list(self): - model = DummyContext() - traverser = make_traverser({'context':model, 'view_name':''}) - self._registerTraverser(traverser) - self._callFUT(model, ['']) - self.assertEqual(model.request.environ['PATH_INFO'], '/') - - def test_generator(self): - model = DummyContext() - traverser = make_traverser({'context':model, 'view_name':''}) - self._registerTraverser(traverser) - def foo(): - yield '' - self._callFUT(model, foo()) - self.assertEqual(model.request.environ['PATH_INFO'], '/') - - def test_self_string_found(self): - model = DummyContext() - traverser = make_traverser({'context':model, 'view_name':''}) - self._registerTraverser(traverser) - self._callFUT(model, '') - self.assertEqual(model.request.environ['PATH_INFO'], '') - - def test_self_tuple_found(self): - model = DummyContext() - traverser = make_traverser({'context':model, 'view_name':''}) - self._registerTraverser(traverser) - self._callFUT(model, ()) - self.assertEqual(model.request.environ['PATH_INFO'], '') - - def test_relative_string_found(self): - model = DummyContext() - baz = DummyContext() - traverser = make_traverser({'context':baz, 'view_name':''}) - self._registerTraverser(traverser) - self._callFUT(model, 'baz') - self.assertEqual(model.request.environ['PATH_INFO'], 'baz') - - def test_relative_tuple_found(self): - model = DummyContext() - baz = DummyContext() - traverser = make_traverser({'context':baz, 'view_name':''}) - self._registerTraverser(traverser) - self._callFUT(model, ('baz',)) - self.assertEqual(model.request.environ['PATH_INFO'], 'baz') - - def test_absolute_string_found(self): - root = DummyContext() - model = DummyContext() - model.__parent__ = root - model.__name__ = 'baz' - traverser = make_traverser({'context':root, 'view_name':''}) - self._registerTraverser(traverser) - self._callFUT(model, '/') - self.assertEqual(root.wascontext, True) - self.assertEqual(root.request.environ['PATH_INFO'], '/') - - def test_absolute_tuple_found(self): - root = DummyContext() - model = DummyContext() - model.__parent__ = root - model.__name__ = 'baz' - traverser = make_traverser({'context':root, 'view_name':''}) - self._registerTraverser(traverser) - self._callFUT(model, ('',)) - self.assertEqual(root.wascontext, True) - self.assertEqual(root.request.environ['PATH_INFO'], '/') - - def test_empty_sequence(self): - root = DummyContext() - model = DummyContext() - model.__parent__ = root - model.__name__ = 'baz' - traverser = make_traverser({'context':root, 'view_name':''}) - self._registerTraverser(traverser) - self._callFUT(model, []) - self.assertEqual(model.wascontext, True) - self.assertEqual(model.request.environ['PATH_INFO'], '') - - def test_default_traverser(self): - model = DummyContext() - result = self._callFUT(model, '') - self.assertEqual(result['view_name'], '') - self.assertEqual(result['context'], model) - - def test_requestfactory_overridden(self): - from repoze.bfg.interfaces import IRequestFactory - from repoze.bfg.request import Request - from repoze.bfg.threadlocal import get_current_registry - reg = get_current_registry() - class MyRequest(Request): - pass - reg.registerUtility(MyRequest, IRequestFactory) - model = DummyContext() - traverser = make_traverser({'context':model, 'view_name':''}) - self._registerTraverser(traverser) - self._callFUT(model, ['']) - self.assertEqual(model.request.__class__, MyRequest) - -class TestDefaultRootFactory(unittest.TestCase): - def _getTargetClass(self): - from repoze.bfg.traversal import DefaultRootFactory - return DefaultRootFactory - - def _makeOne(self, environ): - return self._getTargetClass()(environ) - - def test_no_matchdict(self): - environ = {} - root = self._makeOne(environ) - self.assertEqual(root.__parent__, None) - self.assertEqual(root.__name__, None) - - def test_matchdict(self): - class DummyRequest: - pass - request = DummyRequest() - request.matchdict = {'a':1, 'b':2} - root = self._makeOne(request) - self.assertEqual(root.a, 1) - self.assertEqual(root.b, 2) - - -def make_traverser(result): - class DummyTraverser(object): - def __init__(self, context): - self.context = context - context.wascontext = True - def __call__(self, request): - self.context.request = request - return result - return DummyTraverser - -class DummyContext(object): - __parent__ = None - def __init__(self, next=None, name=None): - self.next = next - self.__name__ = name - - def __getitem__(self, name): - if self.next is None: - raise KeyError, name - return self.next - - def __repr__(self): - return '<DummyContext with name %s at id %s>'%(self.__name__, id(self)) - -class DummyRequest: - application_url = 'http://example.com:5432' # app_url never ends with slash - def __init__(self, environ=None): - if environ is None: - environ = {} - self.environ = environ - -class DummyContextURL: - def __init__(self, context, request): - pass - - def virtual_root(self): - return '123' - -def _makeRequest(environ=None): - from repoze.bfg.registry import Registry - request = DummyRequest() - request.registry = Registry() - return request diff --git a/repoze/bfg/tests/test_url.py b/repoze/bfg/tests/test_url.py deleted file mode 100644 index 1b6f7814c..000000000 --- a/repoze/bfg/tests/test_url.py +++ /dev/null @@ -1,304 +0,0 @@ -import unittest - -from repoze.bfg.testing import cleanUp - -class ModelURLTests(unittest.TestCase): - def setUp(self): - cleanUp() - - def tearDown(self): - cleanUp() - - def _callFUT(self, model, request, *elements, **kw): - from repoze.bfg.url import model_url - return model_url(model, request, *elements, **kw) - - def _registerContextURL(self, reg): - from repoze.bfg.interfaces import IContextURL - from zope.interface import Interface - class DummyContextURL(object): - def __init__(self, context, request): - pass - def __call__(self): - return 'http://example.com/context/' - reg.registerAdapter(DummyContextURL, (Interface, Interface), - IContextURL) - - def test_root_default(self): - request = _makeRequest() - self._registerContextURL(request.registry) - root = DummyContext() - result = self._callFUT(root, request) - self.assertEqual(result, 'http://example.com/context/') - - def test_extra_args(self): - request = _makeRequest() - self._registerContextURL(request.registry) - context = DummyContext() - result = self._callFUT(context, request, 'this/theotherthing', 'that') - self.assertEqual( - result, - 'http://example.com/context/this%2Ftheotherthing/that') - - def test_unicode_in_element_names(self): - request = _makeRequest() - self._registerContextURL(request.registry) - uc = unicode('La Pe\xc3\xb1a', 'utf-8') - context = DummyContext() - result = self._callFUT(context, request, uc) - self.assertEqual(result, - 'http://example.com/context/La%20Pe%C3%B1a') - - def test_element_names_url_quoted(self): - request = _makeRequest() - self._registerContextURL(request.registry) - context = DummyContext() - result = self._callFUT(context, request, 'a b c') - self.assertEqual(result, 'http://example.com/context/a%20b%20c') - - def test_with_query_dict(self): - request = _makeRequest() - self._registerContextURL(request.registry) - context = DummyContext() - uc = unicode('La Pe\xc3\xb1a', 'utf-8') - result = self._callFUT(context, request, 'a', query={'a':uc}) - self.assertEqual(result, - 'http://example.com/context/a?a=La+Pe%C3%B1a') - - def test_with_query_seq(self): - request = _makeRequest() - self._registerContextURL(request.registry) - context = DummyContext() - uc = unicode('La Pe\xc3\xb1a', 'utf-8') - result = self._callFUT(context, request, 'a', query=[('a', 'hi there'), - ('b', uc)]) - self.assertEqual(result, - 'http://example.com/context/a?a=hi+there&b=La+Pe%C3%B1a') - - def test_anchor_is_after_root_when_no_elements(self): - request = _makeRequest() - self._registerContextURL(request.registry) - context = DummyContext() - result = self._callFUT(context, request, anchor='a') - self.assertEqual(result, - 'http://example.com/context/#a') - - def test_anchor_is_after_elements_when_no_qs(self): - request = _makeRequest() - self._registerContextURL(request.registry) - context = DummyContext() - result = self._callFUT(context, request, 'a', anchor='b') - self.assertEqual(result, - 'http://example.com/context/a#b') - - def test_anchor_is_after_qs_when_qs_is_present(self): - request = _makeRequest() - self._registerContextURL(request.registry) - context = DummyContext() - result = self._callFUT(context, request, 'a', - query={'b':'c'}, anchor='d') - self.assertEqual(result, - 'http://example.com/context/a?b=c#d') - - def test_anchor_is_encoded_utf8_if_unicode(self): - request = _makeRequest() - self._registerContextURL(request.registry) - context = DummyContext() - uc = unicode('La Pe\xc3\xb1a', 'utf-8') - result = self._callFUT(context, request, anchor=uc) - self.assertEqual(result, - 'http://example.com/context/#La Pe\xc3\xb1a') - - def test_anchor_is_not_urlencoded(self): - request = _makeRequest() - self._registerContextURL(request.registry) - context = DummyContext() - result = self._callFUT(context, request, anchor=' /#') - self.assertEqual(result, - 'http://example.com/context/# /#') - - def test_no_IContextURL_registered(self): - # falls back to TraversalContextURL - root = DummyContext() - root.__name__ = '' - root.__parent__ = None - request = _makeRequest() - request.environ = {} - result = self._callFUT(root, request) - self.assertEqual(result, 'http://example.com:5432/') - - def test_no_registry_on_request(self): - from repoze.bfg.threadlocal import get_current_registry - reg = get_current_registry() - request = DummyRequest() - self._registerContextURL(reg) - root = DummyContext() - result = self._callFUT(root, request) - self.assertEqual(result, 'http://example.com/context/') - -class TestRouteUrl(unittest.TestCase): - def setUp(self): - cleanUp() - - def tearDown(self): - cleanUp() - - def _callFUT(self, *arg, **kw): - from repoze.bfg.url import route_url - return route_url(*arg, **kw) - - def test_with_elements(self): - from repoze.bfg.interfaces import IRoutesMapper - request = _makeRequest() - mapper = DummyRoutesMapper(route=DummyRoute('/1/2/3')) - request.registry.registerUtility(mapper, IRoutesMapper) - result = self._callFUT('flub', request, 'extra1', 'extra2', - a=1, b=2, c=3, _query={'a':1}, - _anchor=u"foo") - self.assertEqual(result, - 'http://example.com:5432/1/2/3/extra1/extra2?a=1#foo') - - def test_no_elements(self): - from repoze.bfg.interfaces import IRoutesMapper - request = _makeRequest() - mapper = DummyRoutesMapper(route=DummyRoute('/1/2/3')) - request.registry.registerUtility(mapper, IRoutesMapper) - result = self._callFUT('flub', request, a=1, b=2, c=3, _query={'a':1}, - _anchor=u"foo") - self.assertEqual(result, - 'http://example.com:5432/1/2/3?a=1#foo') - - def test_it_generation_error(self): - from repoze.bfg.interfaces import IRoutesMapper - request = _makeRequest() - mapper = DummyRoutesMapper(raise_exc=KeyError) - request.registry.registerUtility(mapper, IRoutesMapper) - mapper.raise_exc = KeyError - self.assertRaises(KeyError, self._callFUT, 'flub', request, a=1) - - def test_generate_doesnt_receive_query_or_anchor(self): - from repoze.bfg.interfaces import IRoutesMapper - route = DummyRoute(result='') - mapper = DummyRoutesMapper(route=route) - from zope.component import getSiteManager - sm = getSiteManager() - sm.registerUtility(mapper, IRoutesMapper) - request = DummyRequest() - result = self._callFUT('flub', request, _query=dict(name='some_name')) - self.assertEqual(route.kw, {}) # shouldnt have anchor/query - self.assertEqual(result, 'http://example.com:5432?name=some_name') - - def test_with_app_url(self): - from repoze.bfg.interfaces import IRoutesMapper - request = _makeRequest() - mapper = DummyRoutesMapper(route=DummyRoute(result='/1/2/3')) - request.registry.registerUtility(mapper, IRoutesMapper) - result = self._callFUT('flub', request, _app_url='http://example2.com') - self.assertEqual(result, 'http://example2.com/1/2/3') - - def test_with_pregenerator(self): - from repoze.bfg.interfaces import IRoutesMapper - request = _makeRequest() - route = DummyRoute(result='/1/2/3') - def pregenerator(request, elements, kw): - return ('a',), {'_app_url':'http://example2.com'} - route.pregenerator = pregenerator - mapper = DummyRoutesMapper(route=route) - request.registry.registerUtility(mapper, IRoutesMapper) - result = self._callFUT('flub', request) - self.assertEqual(result, 'http://example2.com/1/2/3/a') - self.assertEqual(route.kw, {}) # shouldnt have anchor/query - -class TestStaticUrl(unittest.TestCase): - def setUp(self): - cleanUp() - - def tearDown(self): - cleanUp() - - def _callFUT(self, *arg, **kw): - from repoze.bfg.url import static_url - return static_url(*arg, **kw) - - def test_staticurlinfo_notfound(self): - request = _makeRequest() - self.assertRaises(ValueError, self._callFUT, 'static/foo.css', request) - - def test_abspath(self): - request = _makeRequest() - self.assertRaises(ValueError, self._callFUT, '/static/foo.css', request) - - def test_found_rel(self): - from repoze.bfg.interfaces import IStaticURLInfo - request = _makeRequest() - info = DummyStaticURLInfo('abc') - request.registry.registerUtility(info, IStaticURLInfo) - result = self._callFUT('static/foo.css', request) - self.assertEqual(result, 'abc') - self.assertEqual(info.args, - ('repoze.bfg.tests:static/foo.css', request, {}) ) - - def test_found_abs(self): - from repoze.bfg.interfaces import IStaticURLInfo - request = _makeRequest() - info = DummyStaticURLInfo('abc') - request.registry.registerUtility(info, IStaticURLInfo) - result = self._callFUT('repoze.bfg.tests:static/foo.css', request) - self.assertEqual(result, 'abc') - self.assertEqual(info.args, - ('repoze.bfg.tests:static/foo.css', request, {}) ) - - def test_found_abs_no_registry_on_request(self): - from repoze.bfg.threadlocal import get_current_registry - from repoze.bfg.interfaces import IStaticURLInfo - request = DummyRequest() - registry = get_current_registry() - info = DummyStaticURLInfo('abc') - registry.registerUtility(info, IStaticURLInfo) - result = self._callFUT('repoze.bfg.tests:static/foo.css', request) - self.assertEqual(result, 'abc') - self.assertEqual(info.args, - ('repoze.bfg.tests:static/foo.css', request, {}) ) - -class DummyContext(object): - def __init__(self, next=None): - self.next = next - -class DummyRequest: - application_url = 'http://example.com:5432' # app_url never ends with slash - def __init__(self, environ=None): - if environ is None: - environ = {} - self.environ = environ - -class DummyRoutesMapper: - raise_exc = None - def __init__(self, route=None, raise_exc=False): - self.route = route - - def get_route(self, route_name): - return self.route - -class DummyRoute: - pregenerator = None - def __init__(self, result='/1/2/3'): - self.result = result - - def generate(self, kw): - self.kw = kw - return self.result - -def _makeRequest(environ=None): - from repoze.bfg.registry import Registry - request = DummyRequest(environ) - request.registry = Registry() - return request - -class DummyStaticURLInfo: - def __init__(self, result): - self.result = result - - def generate(self, path, request, **kw): - self.args = path, request, kw - return self.result - diff --git a/repoze/bfg/tests/test_urldispatch.py b/repoze/bfg/tests/test_urldispatch.py deleted file mode 100644 index bf43750ea..000000000 --- a/repoze/bfg/tests/test_urldispatch.py +++ /dev/null @@ -1,318 +0,0 @@ -import unittest -from repoze.bfg import testing - -class TestRoute(unittest.TestCase): - def _getTargetClass(self): - from repoze.bfg.urldispatch import Route - return Route - - def _makeOne(self, *arg): - return self._getTargetClass()(*arg) - - def test_provides_IRoute(self): - from repoze.bfg.interfaces import IRoute - from zope.interface.verify import verifyObject - verifyObject(IRoute, self._makeOne('name', 'pattern')) - - def test_ctor(self): - import types - route = self._makeOne('name', ':path', 'factory') - self.assertEqual(route.pattern, ':path') - self.assertEqual(route.path, ':path') - self.assertEqual(route.name, 'name') - self.assertEqual(route.factory, 'factory') - self.failUnless(route.generate.__class__ is types.FunctionType) - self.failUnless(route.match.__class__ is types.FunctionType) - - def test_ctor_defaults(self): - import types - route = self._makeOne('name', ':path') - self.assertEqual(route.pattern, ':path') - self.assertEqual(route.path, ':path') - self.assertEqual(route.name, 'name') - self.assertEqual(route.factory, None) - self.failUnless(route.generate.__class__ is types.FunctionType) - self.failUnless(route.match.__class__ is types.FunctionType) - - def test_match(self): - route = self._makeOne('name', ':path') - self.assertEqual(route.match('/whatever'), {'path':'whatever'}) - - def test_generate(self): - route = self._makeOne('name', ':path') - self.assertEqual(route.generate({'path':'abc'}), '/abc') - -class RoutesMapperTests(unittest.TestCase): - def setUp(self): - testing.setUp() - - def tearDown(self): - testing.tearDown() - - def _getRequest(self, **kw): - from repoze.bfg.threadlocal import get_current_registry - environ = {'SERVER_NAME':'localhost', - 'wsgi.url_scheme':'http'} - environ.update(kw) - request = DummyRequest(environ) - reg = get_current_registry() - request.registry = reg - return request - - def _getTargetClass(self): - from repoze.bfg.urldispatch import RoutesMapper - return RoutesMapper - - def _makeOne(self): - klass = self._getTargetClass() - return klass() - - def test_provides_IRoutesMapper(self): - from repoze.bfg.interfaces import IRoutesMapper - from zope.interface.verify import verifyObject - verifyObject(IRoutesMapper, self._makeOne()) - - def test_no_route_matches(self): - mapper = self._makeOne() - request = self._getRequest(PATH_INFO='/') - result = mapper(request) - self.assertEqual(result['match'], None) - self.assertEqual(result['route'], None) - - def test_connect_name_exists_removes_old(self): - mapper = self._makeOne() - mapper.connect('foo', 'archives/:action/:article') - mapper.connect('foo', 'archives/:action/:article2') - self.assertEqual(len(mapper.routelist), 1) - self.assertEqual(len(mapper.routes), 1) - self.assertEqual(mapper.routes['foo'].pattern, - 'archives/:action/:article2') - self.assertEqual(mapper.routelist[0].pattern, - 'archives/:action/:article2') - - def test___call__route_matches(self): - mapper = self._makeOne() - mapper.connect('foo', 'archives/:action/:article') - request = self._getRequest(PATH_INFO='/archives/action1/article1') - result = mapper(request) - self.assertEqual(result['route'], mapper.routes['foo']) - self.assertEqual(result['match']['action'], 'action1') - self.assertEqual(result['match']['article'], 'article1') - - def test___call__route_matches_with_predicates(self): - mapper = self._makeOne() - mapper.connect('foo', 'archives/:action/:article', - predicates=[lambda *arg: True]) - request = self._getRequest(PATH_INFO='/archives/action1/article1') - result = mapper(request) - self.assertEqual(result['route'], mapper.routes['foo']) - self.assertEqual(result['match']['action'], 'action1') - self.assertEqual(result['match']['article'], 'article1') - - def test___call__route_fails_to_match_with_predicates(self): - mapper = self._makeOne() - mapper.connect('foo', 'archives/:action/article1', - predicates=[lambda *arg: True, lambda *arg: False]) - mapper.connect('bar', 'archives/:action/:article') - request = self._getRequest(PATH_INFO='/archives/action1/article1') - result = mapper(request) - self.assertEqual(result['route'], mapper.routes['bar']) - self.assertEqual(result['match']['action'], 'action1') - self.assertEqual(result['match']['article'], 'article1') - - def test___call__custom_predicate_gets_info(self): - mapper = self._makeOne() - def pred(info, request): - self.assertEqual(info['match'], {'action':u'action1'}) - self.assertEqual(info['route'], mapper.routes['foo']) - return True - mapper.connect('foo', 'archives/:action/article1', predicates=[pred]) - request = self._getRequest(PATH_INFO='/archives/action1/article1') - mapper(request) - - def test_cc_bug(self): - # "unordered" as reported in IRC by author of - # http://labs.creativecommons.org/2010/01/13/cc-engine-and-web-non-frameworks/ - mapper = self._makeOne() - mapper.connect('rdf', 'licenses/:license_code/:license_version/rdf') - mapper.connect('juri', - 'licenses/:license_code/:license_version/:jurisdiction') - - request = self._getRequest(PATH_INFO='/licenses/1/v2/rdf') - result = mapper(request) - self.assertEqual(result['route'], mapper.routes['rdf']) - self.assertEqual(result['match']['license_code'], '1') - self.assertEqual(result['match']['license_version'], 'v2') - - request = self._getRequest(PATH_INFO='/licenses/1/v2/usa') - result = mapper(request) - self.assertEqual(result['route'], mapper.routes['juri']) - self.assertEqual(result['match']['license_code'], '1') - self.assertEqual(result['match']['license_version'], 'v2') - self.assertEqual(result['match']['jurisdiction'], 'usa') - - def test___call__root_route_matches(self): - mapper = self._makeOne() - mapper.connect('root', '') - request = self._getRequest(PATH_INFO='/') - result = mapper(request) - self.assertEqual(result['route'], mapper.routes['root']) - self.assertEqual(result['match'], {}) - - def test___call__root_route_matches2(self): - mapper = self._makeOne() - mapper.connect('root', '/') - request = self._getRequest(PATH_INFO='/') - result = mapper(request) - self.assertEqual(result['route'], mapper.routes['root']) - self.assertEqual(result['match'], {}) - - def test___call__root_route_when_path_info_empty(self): - mapper = self._makeOne() - mapper.connect('root', '/') - request = self._getRequest(PATH_INFO='') - result = mapper(request) - self.assertEqual(result['route'], mapper.routes['root']) - self.assertEqual(result['match'], {}) - - def test___call__no_path_info(self): - mapper = self._makeOne() - mapper.connect('root', '/') - request = self._getRequest() - result = mapper(request) - self.assertEqual(result['route'], mapper.routes['root']) - self.assertEqual(result['match'], {}) - - def test_has_routes(self): - mapper = self._makeOne() - self.assertEqual(mapper.has_routes(), False) - mapper.connect('whatever', 'archives/:action/:article') - self.assertEqual(mapper.has_routes(), True) - - def test_get_routes(self): - from repoze.bfg.urldispatch import Route - mapper = self._makeOne() - self.assertEqual(mapper.get_routes(), []) - mapper.connect('whatever', 'archives/:action/:article') - routes = mapper.get_routes() - self.assertEqual(len(routes), 1) - self.assertEqual(routes[0].__class__, Route) - - def test_get_route_matches(self): - mapper = self._makeOne() - mapper.connect('whatever', 'archives/:action/:article') - result = mapper.get_route('whatever') - self.assertEqual(result.pattern, 'archives/:action/:article') - - def test_get_route_misses(self): - mapper = self._makeOne() - result = mapper.get_route('whatever') - self.assertEqual(result, None) - - def test_generate(self): - mapper = self._makeOne() - def generator(kw): - return 123 - route = DummyRoute(generator) - mapper.routes['abc'] = route - self.assertEqual(mapper.generate('abc', {}), 123) - -class TestCompileRoute(unittest.TestCase): - def _callFUT(self, pattern): - from repoze.bfg.urldispatch import _compile_route - return _compile_route(pattern) - - def test_no_star(self): - matcher, generator = self._callFUT('/foo/:baz/biz/:buz/bar') - self.assertEqual(matcher('/foo/baz/biz/buz/bar'), - {'baz':'baz', 'buz':'buz'}) - self.assertEqual(matcher('foo/baz/biz/buz/bar'), None) - self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar') - - def test_with_star(self): - matcher, generator = self._callFUT('/foo/:baz/biz/:buz/bar*traverse') - self.assertEqual(matcher('/foo/baz/biz/buz/bar'), - {'baz':'baz', 'buz':'buz', 'traverse':()}) - self.assertEqual(matcher('/foo/baz/biz/buz/bar/everything/else/here'), - {'baz':'baz', 'buz':'buz', - 'traverse':('everything', 'else', 'here')}) - self.assertEqual(matcher('foo/baz/biz/buz/bar'), None) - self.assertEqual(generator( - {'baz':1, 'buz':2, 'traverse':u'/a/b'}), '/foo/1/biz/2/bar/a/b') - - def test_no_beginning_slash(self): - matcher, generator = self._callFUT('foo/:baz/biz/:buz/bar') - self.assertEqual(matcher('/foo/baz/biz/buz/bar'), - {'baz':'baz', 'buz':'buz'}) - self.assertEqual(matcher('foo/baz/biz/buz/bar'), None) - self.assertEqual(generator({'baz':1, 'buz':2}), '/foo/1/biz/2/bar') - - def test_url_decode_error(self): - from repoze.bfg.exceptions import URLDecodeError - matcher, generator = self._callFUT('/:foo') - self.assertRaises(URLDecodeError, matcher, '/%FF%FE%8B%00') - -class TestCompileRouteMatchFunctional(unittest.TestCase): - def matches(self, pattern, path, expected): - from repoze.bfg.urldispatch import _compile_route - matcher = _compile_route(pattern)[0] - result = matcher(path) - self.assertEqual(result, expected) - - def generates(self, pattern, dict, result): - from repoze.bfg.urldispatch import _compile_route - self.assertEqual(_compile_route(pattern)[1](dict), result) - - def test_matcher_functional(self): - self.matches('/', '', None) - self.matches('', '', None) - self.matches('/', '/foo', None) - self.matches('/foo/', '/foo', None) - self.matches('/:x', '', None) - self.matches('/:x', '/', None) - self.matches('/abc/:def', '/abc/', None) - self.matches('/abc/:def:baz', '/abc/bleep', None) # bad pattern - self.matches('', '/', {}) - self.matches('/', '/', {}) - self.matches('/:x', '/a', {'x':'a'}) - self.matches('zzz/:x', '/zzz/abc', {'x':'abc'}) - self.matches('zzz/:x*traverse', '/zzz/abc', {'x':'abc', 'traverse':()}) - self.matches('zzz/:x*traverse', '/zzz/abc/def/g', - {'x':'abc', 'traverse':('def', 'g')}) - self.matches('*traverse', '/zzz/abc', {'traverse':('zzz', 'abc')}) - self.matches('*traverse', '/zzz/%20abc', {'traverse':('zzz', ' abc')}) - self.matches(':x', '/La%20Pe%C3%B1a', {'x':u'La Pe\xf1a'}) - self.matches('*traverse', '/La%20Pe%C3%B1a/x', - {'traverse':(u'La Pe\xf1a', 'x')}) - self.matches('/foo/:id.html', '/foo/bar.html', {'id':'bar'}) - - def test_generator_functional(self): - self.generates('', {}, '/') - self.generates('/', {}, '/') - self.generates('/:x', {'x':''}, '/') - self.generates('/:x', {'x':'a'}, '/a') - self.generates('zzz/:x', {'x':'abc'}, '/zzz/abc') - self.generates('zzz/:x*traverse', {'x':'abc', 'traverse':''}, - '/zzz/abc') - self.generates('zzz/:x*traverse', {'x':'abc', 'traverse':'/def/g'}, - '/zzz/abc/def/g') - self.generates('/:x', {'x':unicode('/La Pe\xc3\xb1a', 'utf-8')}, - '/%2FLa%20Pe%C3%B1a') - self.generates('/:x*y', {'x':unicode('/La Pe\xc3\xb1a', 'utf-8'), - 'y':'/rest/of/path'}, - '/%2FLa%20Pe%C3%B1a/rest/of/path') - self.generates('*traverse', {'traverse':('a', u'La Pe\xf1a')}, - '/a/La%20Pe%C3%B1a') - self.generates('/foo/:id.html', {'id':'bar'}, '/foo/bar.html') - -class DummyContext(object): - """ """ - -class DummyRequest(object): - def __init__(self, environ): - self.environ = environ - -class DummyRoute(object): - def __init__(self, generator): - self.generate = generator - diff --git a/repoze/bfg/tests/test_view.py b/repoze/bfg/tests/test_view.py deleted file mode 100644 index e5adc8de1..000000000 --- a/repoze/bfg/tests/test_view.py +++ /dev/null @@ -1,499 +0,0 @@ -import unittest -import sys - -from repoze.bfg.testing import cleanUp - -class BaseTest(object): - def setUp(self): - cleanUp() - - def tearDown(self): - cleanUp() - - def _registerView(self, reg, app, name): - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IViewClassifier - for_ = (IViewClassifier, IRequest, IContext) - from repoze.bfg.interfaces import IView - reg.registerAdapter(app, for_, IView, name) - - def _makeEnviron(self, **extras): - environ = { - 'wsgi.url_scheme':'http', - 'wsgi.version':(1,0), - 'SERVER_NAME':'localhost', - 'SERVER_PORT':'8080', - 'REQUEST_METHOD':'GET', - } - environ.update(extras) - return environ - - def _makeRequest(self, **environ): - from repoze.bfg.interfaces import IRequest - from zope.interface import directlyProvides - from webob import Request - from repoze.bfg.registry import Registry - environ = self._makeEnviron(**environ) - request = Request(environ) - request.registry = Registry() - directlyProvides(request, IRequest) - return request - - def _makeContext(self): - from zope.interface import directlyProvides - context = DummyContext() - directlyProvides(context, IContext) - return context - - -class RenderViewToResponseTests(BaseTest, unittest.TestCase): - def _callFUT(self, *arg, **kw): - from repoze.bfg.view import render_view_to_response - return render_view_to_response(*arg, **kw) - - def test_call_no_view_registered(self): - request = self._makeRequest() - context = self._makeContext() - result = self._callFUT(context, request, name='notregistered') - self.assertEqual(result, None) - - def test_call_no_registry_on_request(self): - request = self._makeRequest() - del request.registry - context = self._makeContext() - result = self._callFUT(context, request, name='notregistered') - self.assertEqual(result, None) - - def test_call_view_registered_secure(self): - request = self._makeRequest() - context = self._makeContext() - response = DummyResponse() - view = make_view(response) - self._registerView(request.registry, view, 'registered') - response = self._callFUT(context, request, name='registered', - secure=True) - self.assertEqual(response.status, '200 OK') - - def test_call_view_registered_insecure_no_call_permissive(self): - context = self._makeContext() - request = self._makeRequest() - response = DummyResponse() - view = make_view(response) - self._registerView(request.registry, view, 'registered') - response = self._callFUT(context, request, name='registered', - secure=False) - self.assertEqual(response.status, '200 OK') - - def test_call_view_registered_insecure_with_call_permissive(self): - context = self._makeContext() - request = self._makeRequest() - response = DummyResponse() - view = make_view(response) - def anotherview(context, request): - return DummyResponse('anotherview') - view.__call_permissive__ = anotherview - self._registerView(request.registry, view, 'registered') - response = self._callFUT(context, request, name='registered', - secure=False) - self.assertEqual(response.status, '200 OK') - self.assertEqual(response.app_iter, ['anotherview']) - -class RenderViewToIterableTests(BaseTest, unittest.TestCase): - def _callFUT(self, *arg, **kw): - from repoze.bfg.view import render_view_to_iterable - return render_view_to_iterable(*arg, **kw) - - def test_call_no_view_registered(self): - request = self._makeRequest() - context = self._makeContext() - result = self._callFUT(context, request, name='notregistered') - self.assertEqual(result, None) - - def test_call_view_registered_secure(self): - request = self._makeRequest() - context = self._makeContext() - response = DummyResponse() - view = make_view(response) - self._registerView(request.registry, view, 'registered') - iterable = self._callFUT(context, request, name='registered', - secure=True) - self.assertEqual(iterable, ()) - - def test_call_view_registered_insecure_no_call_permissive(self): - context = self._makeContext() - request = self._makeRequest() - response = DummyResponse() - view = make_view(response) - self._registerView(request.registry, view, 'registered') - iterable = self._callFUT(context, request, name='registered', - secure=False) - self.assertEqual(iterable, ()) - - def test_call_view_registered_insecure_with_call_permissive(self): - context = self._makeContext() - request = self._makeRequest() - response = DummyResponse() - view = make_view(response) - def anotherview(context, request): - return DummyResponse('anotherview') - view.__call_permissive__ = anotherview - self._registerView(request.registry, view, 'registered') - iterable = self._callFUT(context, request, name='registered', - secure=False) - self.assertEqual(iterable, ['anotherview']) - -class RenderViewTests(BaseTest, unittest.TestCase): - def _callFUT(self, *arg, **kw): - from repoze.bfg.view import render_view - return render_view(*arg, **kw) - - def test_call_no_view_registered(self): - request = self._makeRequest() - context = self._makeContext() - result = self._callFUT(context, request, name='notregistered') - self.assertEqual(result, None) - - def test_call_view_registered_secure(self): - request = self._makeRequest() - context = self._makeContext() - response = DummyResponse() - view = make_view(response) - self._registerView(request.registry, view, 'registered') - s = self._callFUT(context, request, name='registered', secure=True) - self.assertEqual(s, '') - - def test_call_view_registered_insecure_no_call_permissive(self): - context = self._makeContext() - request = self._makeRequest() - response = DummyResponse() - view = make_view(response) - self._registerView(request.registry, view, 'registered') - s = self._callFUT(context, request, name='registered', secure=False) - self.assertEqual(s, '') - - def test_call_view_registered_insecure_with_call_permissive(self): - context = self._makeContext() - request = self._makeRequest() - response = DummyResponse() - view = make_view(response) - def anotherview(context, request): - return DummyResponse('anotherview') - view.__call_permissive__ = anotherview - self._registerView(request.registry, view, 'registered') - s = self._callFUT(context, request, name='registered', secure=False) - self.assertEqual(s, 'anotherview') - -class TestIsResponse(unittest.TestCase): - def _callFUT(self, *arg, **kw): - from repoze.bfg.view import is_response - return is_response(*arg, **kw) - - def test_is(self): - response = DummyResponse() - self.assertEqual(self._callFUT(response), True) - - def test_isnt(self): - response = None - self.assertEqual(self._callFUT(response), False) - - def test_partial_inst(self): - response = DummyResponse() - response.app_iter = None - self.assertEqual(self._callFUT(response), False) - - def test_status_not_string(self): - response = DummyResponse() - response.status = None - self.assertEqual(self._callFUT(response), False) - -class TestBFGViewDecorator(unittest.TestCase): - def setUp(self): - cleanUp() - - def tearDown(self): - cleanUp() - - def _getTargetClass(self): - from repoze.bfg.view import bfg_view - return bfg_view - - def _makeOne(self, *arg, **kw): - return self._getTargetClass()(*arg, **kw) - - def test_create_defaults(self): - decorator = self._makeOne() - self.assertEqual(decorator.name, '') - self.assertEqual(decorator.request_type, None) - self.assertEqual(decorator.context, None) - self.assertEqual(decorator.permission, None) - - def test_create_nondefaults(self): - decorator = self._makeOne(name=None, request_type=None, for_=None, - permission='foo') - self.assertEqual(decorator.name, None) - self.assertEqual(decorator.request_type, None) - self.assertEqual(decorator.context, None) - self.assertEqual(decorator.permission, 'foo') - - def test_call_function(self): - decorator = self._makeOne() - venusian = DummyVenusian() - decorator.venusian = venusian - def foo(): pass - wrapped = decorator(foo) - self.failUnless(wrapped is foo) - settings = call_venusian(venusian) - self.assertEqual(len(settings), 1) - self.assertEqual(settings[0]['permission'], None) - self.assertEqual(settings[0]['context'], None) - self.assertEqual(settings[0]['request_type'], None) - - def test_call_class(self): - decorator = self._makeOne() - venusian = DummyVenusian() - decorator.venusian = venusian - decorator.venusian.info.scope = 'class' - class foo(object): pass - wrapped = decorator(foo) - self.failUnless(wrapped is foo) - settings = call_venusian(venusian) - self.assertEqual(len(settings), 1) - self.assertEqual(settings[0]['permission'], None) - self.assertEqual(settings[0]['context'], None) - self.assertEqual(settings[0]['request_type'], None) - - def test_stacking(self): - decorator1 = self._makeOne(name='1') - venusian1 = DummyVenusian() - decorator1.venusian = venusian1 - venusian2 = DummyVenusian() - decorator2 = self._makeOne(name='2') - decorator2.venusian = venusian2 - def foo(): pass - wrapped1 = decorator1(foo) - wrapped2 = decorator2(wrapped1) - self.failUnless(wrapped1 is foo) - self.failUnless(wrapped2 is foo) - settings1 = call_venusian(venusian1) - self.assertEqual(len(settings1), 1) - self.assertEqual(settings1[0]['name'], '1') - settings2 = call_venusian(venusian2) - self.assertEqual(len(settings2), 1) - self.assertEqual(settings2[0]['name'], '2') - - def test_call_as_method(self): - decorator = self._makeOne() - venusian = DummyVenusian() - decorator.venusian = venusian - decorator.venusian.info.scope = 'class' - def foo(self): pass - def bar(self): pass - class foo(object): - foomethod = decorator(foo) - barmethod = decorator(bar) - settings = call_venusian(venusian) - self.assertEqual(len(settings), 2) - self.assertEqual(settings[0]['attr'], 'foo') - self.assertEqual(settings[1]['attr'], 'bar') - - def test_with_custom_predicates(self): - decorator = self._makeOne(custom_predicates=(1,)) - venusian = DummyVenusian() - decorator.venusian = venusian - def foo(context, request): pass - decorated = decorator(foo) - self.failUnless(decorated is foo) - settings = call_venusian(venusian) - self.assertEqual(settings[0]['custom_predicates'], (1,)) - - def test_call_with_renderer_nodot(self): - decorator = self._makeOne(renderer='json') - venusian = DummyVenusian() - decorator.venusian = venusian - def foo(): pass - wrapped = decorator(foo) - self.failUnless(wrapped is foo) - settings = call_venusian(venusian) - self.assertEqual(len(settings), 1) - self.assertEqual(settings[0]['renderer'], 'json') - - def test_call_with_renderer_relpath(self): - decorator = self._makeOne(renderer='fixtures/minimal.pt') - venusian = DummyVenusian() - decorator.venusian = venusian - def foo(): pass - wrapped = decorator(foo) - self.failUnless(wrapped is foo) - settings = call_venusian(venusian) - self.assertEqual(len(settings), 1) - self.assertEqual(settings[0]['renderer'], - 'repoze.bfg.tests:fixtures/minimal.pt') - - def test_call_with_renderer_pkgpath(self): - decorator = self._makeOne( - renderer='repoze.bfg.tests:fixtures/minimal.pt') - venusian = DummyVenusian() - decorator.venusian = venusian - def foo(): pass - wrapped = decorator(foo) - self.failUnless(wrapped is foo) - settings = call_venusian(venusian) - self.assertEqual(len(settings), 1) - self.assertEqual(settings[0]['renderer'], - 'repoze.bfg.tests:fixtures/minimal.pt') - -class Test_append_slash_notfound_view(BaseTest, unittest.TestCase): - def _callFUT(self, context, request): - from repoze.bfg.view import append_slash_notfound_view - return append_slash_notfound_view(context, request) - - def _registerMapper(self, reg, match=True): - from repoze.bfg.interfaces import IRoutesMapper - class DummyRoute(object): - def __init__(self, val): - self.val = val - def match(self, path): - return self.val - class DummyMapper(object): - def __init__(self): - self.routelist = [ DummyRoute(match) ] - def get_routes(self): - return self.routelist - mapper = DummyMapper() - reg.registerUtility(mapper, IRoutesMapper) - return mapper - - def test_context_is_not_exception(self): - request = self._makeRequest(PATH_INFO='/abc') - request.exception = ExceptionResponse() - context = DummyContext() - response = self._callFUT(context, request) - self.assertEqual(response.status, '404 Not Found') - self.assertEqual(response.app_iter, ['Not Found']) - - def test_no_mapper(self): - request = self._makeRequest(PATH_INFO='/abc') - context = ExceptionResponse() - response = self._callFUT(context, request) - self.assertEqual(response.status, '404 Not Found') - - def test_no_path(self): - request = self._makeRequest() - context = ExceptionResponse() - self._registerMapper(request.registry, True) - response = self._callFUT(context, request) - self.assertEqual(response.status, '404 Not Found') - - def test_mapper_path_already_slash_ending(self): - request = self._makeRequest(PATH_INFO='/abc/') - context = ExceptionResponse() - self._registerMapper(request.registry, True) - response = self._callFUT(context, request) - self.assertEqual(response.status, '404 Not Found') - - def test_matches(self): - request = self._makeRequest(PATH_INFO='/abc') - context = ExceptionResponse() - self._registerMapper(request.registry, True) - response = self._callFUT(context, request) - self.assertEqual(response.status, '302 Found') - self.assertEqual(response.location, '/abc/') - -class TestAppendSlashNotFoundViewFactory(BaseTest, unittest.TestCase): - def _makeOne(self, notfound_view): - from repoze.bfg.view import AppendSlashNotFoundViewFactory - return AppendSlashNotFoundViewFactory(notfound_view) - - def test_custom_notfound_view(self): - request = self._makeRequest(PATH_INFO='/abc') - context = ExceptionResponse() - def custom_notfound(context, request): - return 'OK' - view = self._makeOne(custom_notfound) - response = view(context, request) - self.assertEqual(response, 'OK') - -class Test_default_exceptionresponse_view(unittest.TestCase): - def _callFUT(self, context, request): - from repoze.bfg.view import default_exceptionresponse_view - return default_exceptionresponse_view(context, request) - - def test_is_exception(self): - context = Exception() - result = self._callFUT(context, None) - self.failUnless(result is context) - - def test_is_not_exception_no_request_exception(self): - context = object() - request = DummyRequest() - result = self._callFUT(context, request) - self.failUnless(result is context) - - def test_is_not_exception_request_exception(self): - context = object() - request = DummyRequest() - request.exception = 'abc' - result = self._callFUT(context, request) - self.assertEqual(result, 'abc') - -class ExceptionResponse(Exception): - status = '404 Not Found' - app_iter = ['Not Found'] - headerlist = [] - -class DummyContext: - pass - -def make_view(response): - def view(context, request): - return response - return view - -class DummyRequest: - exception = None - -class DummyResponse: - status = '200 OK' - headerlist = () - def __init__(self, body=None): - if body is None: - self.app_iter = () - else: - self.app_iter = [body] - -from zope.interface import Interface -class IContext(Interface): - pass - -class DummyVenusianInfo(object): - scope = 'notaclass' - module = sys.modules['repoze.bfg.tests'] - -class DummyVenusian(object): - def __init__(self, info=None): - if info is None: - info = DummyVenusianInfo() - self.info = info - self.attachments = [] - - def attach(self, wrapped, callback, category=None): - self.attachments.append((wrapped, callback, category)) - return self.info - -class DummyConfig(object): - def __init__(self): - self.settings = [] - - def add_view(self, **kw): - self.settings.append(kw) - -class DummyVenusianContext(object): - def __init__(self): - self.config = DummyConfig() - -def call_venusian(venusian): - context = DummyVenusianContext() - for wrapped, callback, category in venusian.attachments: - callback(context, None, None) - return context.config.settings - diff --git a/repoze/bfg/tests/test_wsgi.py b/repoze/bfg/tests/test_wsgi.py deleted file mode 100644 index 5d3ec1faa..000000000 --- a/repoze/bfg/tests/test_wsgi.py +++ /dev/null @@ -1,112 +0,0 @@ -import unittest - -class WSGIAppTests(unittest.TestCase): - def _callFUT(self, app): - from repoze.bfg.wsgi import wsgiapp - return wsgiapp(app) - - def test_decorator(self): - context = DummyContext() - request = DummyRequest() - decorator = self._callFUT(dummyapp) - response = decorator(context, request) - self.assertEqual(response, dummyapp) - -class WSGIApp2Tests(unittest.TestCase): - def _callFUT(self, app): - from repoze.bfg.wsgi import wsgiapp2 - return wsgiapp2(app) - - def test_decorator_with_subpath_and_view_name(self): - context = DummyContext() - request = DummyRequest() - request.traversed = ['a', 'b'] - request.virtual_root_path = ['a'] - request.subpath = ['subpath'] - request.view_name = 'view_name' - request.environ = {'SCRIPT_NAME':'/foo'} - decorator = self._callFUT(dummyapp) - response = decorator(context, request) - self.assertEqual(response, dummyapp) - self.assertEqual(request.environ['PATH_INFO'], '/subpath') - self.assertEqual(request.environ['SCRIPT_NAME'], '/foo/b/view_name') - - def test_decorator_with_subpath_no_view_name(self): - context = DummyContext() - request = DummyRequest() - request.traversed = ['a', 'b'] - request.virtual_root_path = ['a'] - request.subpath = ['subpath'] - request.view_name = '' - request.environ = {'SCRIPT_NAME':'/foo'} - decorator = self._callFUT(dummyapp) - response = decorator(context, request) - self.assertEqual(response, dummyapp) - self.assertEqual(request.environ['PATH_INFO'], '/subpath') - self.assertEqual(request.environ['SCRIPT_NAME'], '/foo/b') - - def test_decorator_no_subpath_with_view_name(self): - context = DummyContext() - request = DummyRequest() - request.traversed = ['a', 'b'] - request.virtual_root_path = ['a'] - request.subpath = [] - request.view_name = 'view_name' - request.environ = {'SCRIPT_NAME':'/foo'} - decorator = self._callFUT(dummyapp) - response = decorator(context, request) - self.assertEqual(response, dummyapp) - self.assertEqual(request.environ['PATH_INFO'], '/') - self.assertEqual(request.environ['SCRIPT_NAME'], '/foo/b/view_name') - - def test_decorator_traversed_empty_with_view_name(self): - context = DummyContext() - request = DummyRequest() - request.traversed = [] - request.virtual_root_path = [] - request.subpath = [] - request.view_name = 'view_name' - request.environ = {'SCRIPT_NAME':'/foo'} - decorator = self._callFUT(dummyapp) - response = decorator(context, request) - self.assertEqual(response, dummyapp) - self.assertEqual(request.environ['PATH_INFO'], '/') - self.assertEqual(request.environ['SCRIPT_NAME'], '/foo/view_name') - - def test_decorator_traversed_empty_no_view_name(self): - context = DummyContext() - request = DummyRequest() - request.traversed = [] - request.virtual_root_path = [] - request.subpath = [] - request.view_name = '' - request.environ = {'SCRIPT_NAME':'/foo'} - decorator = self._callFUT(dummyapp) - response = decorator(context, request) - self.assertEqual(response, dummyapp) - self.assertEqual(request.environ['PATH_INFO'], '/') - self.assertEqual(request.environ['SCRIPT_NAME'], '/foo') - - def test_decorator_traversed_empty_no_view_name_no_script_name(self): - context = DummyContext() - request = DummyRequest() - request.traversed = [] - request.virtual_root_path = [] - request.subpath = [] - request.view_name = '' - request.environ = {'SCRIPT_NAME':''} - decorator = self._callFUT(dummyapp) - response = decorator(context, request) - self.assertEqual(response, dummyapp) - self.assertEqual(request.environ['PATH_INFO'], '/') - self.assertEqual(request.environ['SCRIPT_NAME'], '') - -def dummyapp(environ, start_response): - """ """ - -class DummyContext: - pass - -class DummyRequest: - def get_response(self, application): - return application diff --git a/repoze/bfg/tests/test_zcml.py b/repoze/bfg/tests/test_zcml.py deleted file mode 100644 index 131122d7b..000000000 --- a/repoze/bfg/tests/test_zcml.py +++ /dev/null @@ -1,1283 +0,0 @@ -import logging - -logging.basicConfig() - -import unittest - -from repoze.bfg import testing - -from zope.interface import Interface -from zope.interface import implements - -class TestViewDirective(unittest.TestCase): - def setUp(self): - testing.setUp() - - def tearDown(self): - testing.tearDown() - - def _callFUT(self, *arg, **kw): - from repoze.bfg.zcml import view - return view(*arg, **kw) - - def test_request_type_ashttpmethod(self): - from repoze.bfg.threadlocal import get_current_registry - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IRequest - context = DummyContext() - view = lambda *arg: None - self._callFUT(context, 'repoze.view', IDummy, view=view, - request_type='GET') - actions = context.actions - self.assertEqual(len(actions), 1) - action = actions[0] - discrim = ('view', IDummy, '', None, IView, None, None, 'GET', None, - None, False, None, None, None) - self.assertEqual(action['discriminator'], discrim) - register = action['callable'] - register() - reg = get_current_registry() - wrapper = reg.adapters.lookup( - (IViewClassifier, IRequest, IDummy), IView, name='') - request = DummyRequest() - request.method = 'GET' - self.assertEqual(wrapper.__predicated__(None, request), True) - request.method = 'POST' - self.assertEqual(wrapper.__predicated__(None, request), False) - - def test_request_type_asinterfacestring(self): - from zope.interface import directlyProvides - from repoze.bfg.threadlocal import get_current_registry - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IRequest - context = DummyContext(IDummy) - view = lambda *arg: 'OK' - self._callFUT(context, 'repoze.view', IDummy, view=view, - request_type='whatever') - actions = context.actions - self.assertEqual(len(actions), 1) - discrim = ('view', IDummy, '', IDummy, IView, None, None, None, None, - None, False, None, None, None) - self.assertEqual(actions[0]['discriminator'], discrim) - register = actions[0]['callable'] - register() - reg = get_current_registry() - regview = reg.adapters.lookup( - (IViewClassifier, IRequest, IDummy), IView, name='') - self.assertNotEqual(view, regview) - request = DummyRequest() - directlyProvides(request, IDummy) - result = regview(None, request) - self.assertEqual(result, 'OK') - self.failIf(hasattr(view, '__call_permissive__')) - - def test_request_type_asnoninterfacestring(self): - from repoze.bfg.exceptions import ConfigurationError - context = DummyContext('notaninterface') - view = lambda *arg: 'OK' - self.assertRaises(ConfigurationError, - self._callFUT, - context, 'repoze.view', IDummy, view=view, - request_type='whatever') - - def test_with_dotted_renderer(self): - from repoze.bfg.threadlocal import get_current_registry - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IRendererFactory - from repoze.bfg.interfaces import IRequest - context = DummyContext() - reg = get_current_registry() - def factory(path): - def foo(*arg): - return 'OK' - return foo - reg.registerUtility(factory, IRendererFactory, name='.pt') - view = lambda *arg: None - self._callFUT(context, 'repoze.view', IDummy, view=view, - renderer='foo/template.pt') - actions = context.actions - self.assertEqual(len(actions), 1) - discrim = ('view', IDummy, '', None, IView, None, None, None, None, - None, False, None, None, None) - self.assertEqual(actions[0]['discriminator'], discrim) - register = actions[0]['callable'] - register() - regview = reg.adapters.lookup( - (IViewClassifier, IRequest, IDummy), IView, name='') - self.assertEqual(regview(None, None).body, 'OK') - - def test_with_custom_predicates(self): - from repoze.bfg.threadlocal import get_current_registry - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IRequest - context = DummyContext() - reg = get_current_registry() - view = lambda *arg: 'OK' - def pred1(context, request): - return True - def pred2(context, request): - return True - preds = (pred1, pred2) - self._callFUT(context, 'repoze.view', IDummy, view=view, - custom_predicates=preds) - actions = context.actions - self.assertEqual(len(actions), 1) - discrim = ('view', IDummy, '', None, IView, None, None, None, None, - None, False, None, None, None) - discrim = discrim + tuple(sorted(preds)) - self.assertEqual(actions[0]['discriminator'], discrim) - register = actions[0]['callable'] - register() - regview = reg.adapters.lookup( - (IViewClassifier, IRequest, IDummy), IView, name='') - self.assertEqual(regview(None, None), 'OK') - - def test_context_trumps_for(self): - from repoze.bfg.threadlocal import get_current_registry - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IRequest - context = DummyContext() - reg = get_current_registry() - view = lambda *arg: 'OK' - class Foo: - pass - self._callFUT(context, 'repoze.view', for_=Foo, view=view, - context=IDummy) - actions = context.actions - self.assertEqual(len(actions), 1) - discrim = ('view', IDummy, '', None, IView, None, None, None, None, - None, False, None, None, None) - self.assertEqual(actions[0]['discriminator'], discrim) - register = actions[0]['callable'] - register() - regview = reg.adapters.lookup( - (IViewClassifier, IRequest, IDummy), IView, name='') - self.assertEqual(regview(None, None), 'OK') - - def test_with_for(self): - from repoze.bfg.threadlocal import get_current_registry - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IRequest - context = DummyContext() - reg = get_current_registry() - view = lambda *arg: 'OK' - class Foo: - pass - self._callFUT(context, 'repoze.view', for_=IDummy, view=view) - actions = context.actions - self.assertEqual(len(actions), 1) - discrim = ('view', IDummy, '', None, IView, None, None, None, None, - None, False, None, None, None) - self.assertEqual(actions[0]['discriminator'], discrim) - register = actions[0]['callable'] - register() - regview = reg.adapters.lookup( - (IViewClassifier, IRequest, IDummy), IView, name='') - self.assertEqual(regview(None, None), 'OK') - -class TestNotFoundDirective(unittest.TestCase): - def setUp(self): - testing.setUp() - - def tearDown(self): - testing.tearDown() - - def _callFUT(self, context, view, **kw): - from repoze.bfg.zcml import notfound - return notfound(context, view, **kw) - - def test_it(self): - from zope.interface import implementedBy - from repoze.bfg.threadlocal import get_current_registry - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.exceptions import NotFound - - context = DummyContext() - def view(request): - return 'OK' - self._callFUT(context, view) - actions = context.actions - self.assertEqual(len(actions), 1) - - discrim = ('view', NotFound, '', None, IView, None, None, None, None, - None, False, None, None, None) - regadapt = actions[0] - self.assertEqual(regadapt['discriminator'], discrim) - register = regadapt['callable'] - register() - reg = get_current_registry() - derived_view = reg.adapters.lookup( - (IViewClassifier, IRequest, implementedBy(NotFound)), - IView, default=None) - - self.assertNotEqual(derived_view, None) - self.assertEqual(derived_view(None, None), 'OK') - self.assertEqual(derived_view.__name__, 'bwcompat_view') - - def test_it_with_dotted_renderer(self): - from zope.interface import implementedBy - from repoze.bfg.threadlocal import get_current_registry - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.exceptions import NotFound - from repoze.bfg.configuration import Configurator - context = DummyContext() - reg = get_current_registry() - config = Configurator(reg) - def dummy_renderer_factory(*arg, **kw): - return lambda *arg, **kw: 'OK' - config.add_renderer('.pt', dummy_renderer_factory) - def view(request): - return {} - self._callFUT(context, view, renderer='fake.pt') - actions = context.actions - regadapt = actions[0] - register = regadapt['callable'] - register() - derived_view = reg.adapters.lookup( - (IViewClassifier, IRequest, implementedBy(NotFound)), - IView, default=None) - self.assertNotEqual(derived_view, None) - self.assertEqual(derived_view(None, None).body, 'OK') - self.assertEqual(derived_view.__name__, 'bwcompat_view') - -class TestForbiddenDirective(unittest.TestCase): - def setUp(self): - testing.setUp() - - def tearDown(self): - testing.tearDown() - - def _callFUT(self, context, view, **kw): - from repoze.bfg.zcml import forbidden - return forbidden(context, view, **kw) - - def test_it(self): - from zope.interface import implementedBy - from repoze.bfg.threadlocal import get_current_registry - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.exceptions import Forbidden - context = DummyContext() - def view(request): - return 'OK' - self._callFUT(context, view) - actions = context.actions - - self.assertEqual(len(actions), 1) - - discrim = ('view', Forbidden, '', None, IView, None, None, None, None, - None, False, None, None, None) - regadapt = actions[0] - self.assertEqual(regadapt['discriminator'], discrim) - register = regadapt['callable'] - register() - reg = get_current_registry() - derived_view = reg.adapters.lookup( - (IViewClassifier, IRequest, implementedBy(Forbidden)), - IView, default=None) - - self.assertNotEqual(derived_view, None) - self.assertEqual(derived_view(None, None), 'OK') - self.assertEqual(derived_view.__name__, 'bwcompat_view') - - def test_it_with_dotted_renderer(self): - from zope.interface import implementedBy - from repoze.bfg.threadlocal import get_current_registry - from repoze.bfg.interfaces import IRequest - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.exceptions import Forbidden - from repoze.bfg.configuration import Configurator - context = DummyContext() - reg = get_current_registry() - config = Configurator(reg) - def dummy_renderer_factory(*arg, **kw): - return lambda *arg, **kw: 'OK' - config.add_renderer('.pt', dummy_renderer_factory) - def view(request): - return {} - self._callFUT(context, view, renderer='fake.pt') - actions = context.actions - regadapt = actions[0] - register = regadapt['callable'] - register() - derived_view = reg.adapters.lookup( - (IViewClassifier, IRequest, implementedBy(Forbidden)), - IView, default=None) - self.assertNotEqual(derived_view, None) - self.assertEqual(derived_view(None, None).body, 'OK') - self.assertEqual(derived_view.__name__, 'bwcompat_view') - -class TestRepozeWho1AuthenticationPolicyDirective(unittest.TestCase): - def setUp(self): - testing.setUp() - - def tearDown(self): - testing.tearDown() - - def _callFUT(self, context, **kw): - from repoze.bfg.zcml import repozewho1authenticationpolicy - return repozewho1authenticationpolicy(context, **kw) - - def test_it_defaults(self): - from repoze.bfg.threadlocal import get_current_registry - reg = get_current_registry() - from repoze.bfg.interfaces import IAuthenticationPolicy - context = DummyContext() - self._callFUT(context) - actions = context.actions - self.assertEqual(len(actions), 1) - regadapt = actions[0] - self.assertEqual(regadapt['discriminator'], IAuthenticationPolicy) - self.assertEqual(regadapt['callable'], None) - self.assertEqual(regadapt['args'], ()) - policy = reg.getUtility(IAuthenticationPolicy) - self.assertEqual(policy.callback, None) - self.assertEqual(policy.identifier_name, 'auth_tkt') - - def test_it(self): - from repoze.bfg.threadlocal import get_current_registry - reg = get_current_registry() - from repoze.bfg.interfaces import IAuthenticationPolicy - context = DummyContext() - def callback(identity, request): - """ """ - self._callFUT(context, identifier_name='something', callback=callback) - actions = context.actions - self.assertEqual(len(actions), 1) - regadapt = actions[0] - self.assertEqual(regadapt['discriminator'], IAuthenticationPolicy) - self.assertEqual(regadapt['callable'], None) - self.assertEqual(regadapt['args'], ()) - policy = reg.getUtility(IAuthenticationPolicy) - self.assertEqual(policy.callback, callback) - self.assertEqual(policy.identifier_name, 'something') - -class TestRemoteUserAuthenticationPolicyDirective(unittest.TestCase): - def setUp(self): - testing.setUp() - - def tearDown(self): - testing.tearDown() - - def _callFUT(self, context, **kw): - from repoze.bfg.zcml import remoteuserauthenticationpolicy - return remoteuserauthenticationpolicy(context, **kw) - - def test_defaults(self): - from repoze.bfg.interfaces import IAuthenticationPolicy - from repoze.bfg.threadlocal import get_current_registry - reg = get_current_registry() - context = DummyContext() - def callback(identity, request): - """ """ - self._callFUT(context) - actions = context.actions - self.assertEqual(len(actions), 1) - regadapt = actions[0] - self.assertEqual(regadapt['discriminator'], IAuthenticationPolicy) - self.assertEqual(regadapt['callable'], None) - self.assertEqual(regadapt['args'], ()) - policy = reg.getUtility(IAuthenticationPolicy) - self.assertEqual(policy.environ_key, 'REMOTE_USER') - self.assertEqual(policy.callback, None) - - def test_it(self): - from repoze.bfg.interfaces import IAuthenticationPolicy - from repoze.bfg.threadlocal import get_current_registry - context = DummyContext() - def callback(identity, request): - """ """ - self._callFUT(context, environ_key='BLAH', callback=callback) - actions = context.actions - self.assertEqual(len(actions), 1) - regadapt = actions[0] - self.assertEqual(regadapt['discriminator'], IAuthenticationPolicy) - self.assertEqual(regadapt['callable'], None) - self.assertEqual(regadapt['args'], ()) - reg = get_current_registry() - policy = reg.getUtility(IAuthenticationPolicy) - self.assertEqual(policy.environ_key, 'BLAH') - self.assertEqual(policy.callback, callback) - -class TestAuthTktAuthenticationPolicyDirective(unittest.TestCase): - def setUp(self): - testing.setUp() - - def tearDown(self): - testing.tearDown() - - def _callFUT(self, context, secret, **kw): - from repoze.bfg.zcml import authtktauthenticationpolicy - return authtktauthenticationpolicy(context, secret, **kw) - - def test_it_defaults(self): - from repoze.bfg.interfaces import IAuthenticationPolicy - from repoze.bfg.threadlocal import get_current_registry - reg = get_current_registry() - context = DummyContext() - self._callFUT(context, 'sosecret') - actions = context.actions - self.assertEqual(len(actions), 1) - regadapt = actions[0] - self.assertEqual(regadapt['discriminator'], IAuthenticationPolicy) - self.assertEqual(regadapt['callable'], None) - self.assertEqual(regadapt['args'], ()) - policy = reg.getUtility(IAuthenticationPolicy) - self.assertEqual(policy.cookie.secret, 'sosecret') - self.assertEqual(policy.callback, None) - - def test_it_noconfigerror(self): - from repoze.bfg.interfaces import IAuthenticationPolicy - from repoze.bfg.threadlocal import get_current_registry - reg = get_current_registry() - context = DummyContext() - def callback(identity, request): - """ """ - self._callFUT(context, 'sosecret', callback=callback, - cookie_name='repoze.bfg.auth_tkt', - secure=True, include_ip=True, timeout=100, - reissue_time=60, http_only=True, path="/sub/") - actions = context.actions - self.assertEqual(len(actions), 1) - regadapt = actions[0] - self.assertEqual(regadapt['discriminator'], IAuthenticationPolicy) - self.assertEqual(regadapt['callable'], None) - self.assertEqual(regadapt['args'], ()) - policy = reg.getUtility(IAuthenticationPolicy) - self.assertEqual(policy.cookie.path, '/sub/') - self.assertEqual(policy.cookie.http_only, True) - self.assertEqual(policy.cookie.secret, 'sosecret') - self.assertEqual(policy.callback, callback) - - def test_it_configerror(self): - from repoze.bfg.exceptions import ConfigurationError - context = DummyContext() - def callback(identity, request): - """ """ - self.assertRaises(ConfigurationError, - self._callFUT, - context, 'sosecret', callback=callback, - cookie_name='repoze.bfg.auth_tkt', - secure=True, include_ip=True, timeout=100, - reissue_time=500, http_only=True, - path="/cgi-bin/bfg.cgi/") - -class TestACLAuthorizationPolicyDirective(unittest.TestCase): - def setUp(self): - testing.setUp() - - def tearDown(self): - testing.tearDown() - - def _callFUT(self, context, **kw): - from repoze.bfg.zcml import aclauthorizationpolicy - return aclauthorizationpolicy(context, **kw) - - def test_it(self): - from repoze.bfg.threadlocal import get_current_registry - from repoze.bfg.authorization import ACLAuthorizationPolicy - from repoze.bfg.interfaces import IAuthorizationPolicy - reg = get_current_registry() - context = DummyContext() - def callback(identity, request): - """ """ - self._callFUT(context) - actions = context.actions - self.assertEqual(len(actions), 1) - regadapt = actions[0] - self.assertEqual(regadapt['discriminator'], IAuthorizationPolicy) - self.assertEqual(regadapt['callable'], None) - self.assertEqual(regadapt['args'], ()) - policy = reg.getUtility(IAuthorizationPolicy) - self.assertEqual(policy.__class__, ACLAuthorizationPolicy) - -class TestRouteDirective(unittest.TestCase): - def setUp(self): - testing.setUp() - - def tearDown(self): - testing.tearDown() - - def _callFUT(self, *arg, **kw): - from repoze.bfg.zcml import route - return route(*arg, **kw) - - def _assertRoute(self, name, pattern, num_predicates=0): - from repoze.bfg.threadlocal import get_current_registry - from repoze.bfg.interfaces import IRoutesMapper - reg = get_current_registry() - mapper = reg.getUtility(IRoutesMapper) - routes = mapper.get_routes() - route = routes[0] - self.assertEqual(len(routes), 1) - self.assertEqual(route.name, name) - self.assertEqual(route.pattern, pattern) - self.assertEqual(len(routes[0].predicates), num_predicates) - return route - - def test_with_view(self): - from repoze.bfg.threadlocal import get_current_registry - from zope.interface import Interface - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IRouteRequest - context = DummyContext() - view = lambda *arg: 'OK' - self._callFUT(context, 'name', 'pattern', view=view) - actions = context.actions - self.assertEqual(len(actions), 2) - - route_action = actions[0] - route_action['callable']() - route_discriminator = route_action['discriminator'] - self.assertEqual(route_discriminator, - ('route', 'name', False, None, None, None, None,None)) - self._assertRoute('name', 'pattern') - - view_action = actions[1] - reg = get_current_registry() - request_type = reg.getUtility(IRouteRequest, 'name') - view_discriminator = view_action['discriminator'] - discrim = ('view', None, '', None, IView, 'name', None) - self.assertEqual(view_discriminator, discrim) - wrapped = reg.adapters.lookup( - (IViewClassifier, request_type, Interface), IView, name='') - self.failUnless(wrapped) - - def test_with_view_and_view_context(self): - from repoze.bfg.threadlocal import get_current_registry - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IRouteRequest - context = DummyContext() - view = lambda *arg: 'OK' - self._callFUT(context, 'name', 'pattern', view=view, - view_context=IDummy) - actions = context.actions - self.assertEqual(len(actions), 2) - - route_action = actions[0] - route_action['callable']() - route_discriminator = route_action['discriminator'] - self.assertEqual(route_discriminator, - ('route', 'name', False, None, None, None, None,None)) - self._assertRoute('name', 'pattern') - - view_action = actions[1] - reg = get_current_registry() - request_type = reg.getUtility(IRouteRequest, 'name') - view_discriminator = view_action['discriminator'] - discrim = ('view', IDummy, '', None, IView, 'name', None) - self.assertEqual(view_discriminator, discrim) - wrapped = reg.adapters.lookup( - (IViewClassifier, request_type, IDummy), IView, name='') - self.failUnless(wrapped) - - def test_with_view_context_trumps_view_for(self): - from repoze.bfg.threadlocal import get_current_registry - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IRouteRequest - context = DummyContext() - view = lambda *arg: 'OK' - class Foo: - pass - self._callFUT(context, 'name', 'pattern', view=view, - view_context=IDummy, view_for=Foo) - actions = context.actions - self.assertEqual(len(actions), 2) - - route_action = actions[0] - route_action['callable']() - route_discriminator = route_action['discriminator'] - self.assertEqual(route_discriminator, - ('route', 'name', False, None, None, None, None,None)) - self._assertRoute('name', 'pattern') - - view_action = actions[1] - reg = get_current_registry() - request_type = reg.getUtility(IRouteRequest, 'name') - view_discriminator = view_action['discriminator'] - discrim = ('view', IDummy, '', None, IView, 'name', None) - self.assertEqual(view_discriminator, discrim) - wrapped = reg.adapters.lookup( - (IViewClassifier, request_type, IDummy), IView, name='') - self.failUnless(wrapped) - - def test_with_dotted_renderer(self): - - from repoze.bfg.threadlocal import get_current_registry - from zope.interface import Interface - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IRouteRequest - from repoze.bfg.interfaces import IRendererFactory - reg = get_current_registry() - def renderer(path): - return lambda *arg: 'OK' - reg.registerUtility(renderer, IRendererFactory, name='.pt') - - context = DummyContext() - view = lambda *arg: 'OK' - self._callFUT(context, 'name', 'pattern', view=view, - renderer='fixtureapp/templates/foo.pt') - actions = context.actions - self.assertEqual(len(actions), 2) - - route_action = actions[0] - route_action['callable']() - route_discriminator = route_action['discriminator'] - self.assertEqual(route_discriminator, - ('route', 'name', False, None, None, None, None,None)) - self._assertRoute('name', 'pattern') - - view_action = actions[1] - request_type = reg.getUtility(IRouteRequest, 'name') - view_discriminator = view_action['discriminator'] - discrim = ('view', None, '', None, IView, 'name', None) - self.assertEqual(view_discriminator, discrim) - wrapped = reg.adapters.lookup( - (IViewClassifier, request_type, Interface), IView, name='') - self.failUnless(wrapped) - request = DummyRequest() - result = wrapped(None, request) - self.assertEqual(result.body, 'OK') - - def test_with_custom_predicates(self): - def pred1(context, request): pass - def pred2(context, request): pass - preds = tuple(sorted([pred1, pred2])) - - context = DummyContext() - self._callFUT(context, 'name', 'pattern', - custom_predicates=(pred1, pred2)) - actions = context.actions - self.assertEqual(len(actions), 1) - - route_action = actions[0] - route_action['callable']() - route_discriminator = route_action['discriminator'] - self.assertEqual( - route_discriminator, - ('route', 'name', False, None, None, None, None,None) + preds) - self._assertRoute('name', 'pattern', 2) - - def test_with_path_argument_no_pattern(self): - context = DummyContext() - self._callFUT(context, 'name', path='pattern') - actions = context.actions - self.assertEqual(len(actions), 1) - - route_action = actions[0] - route_action['callable']() - route_discriminator = route_action['discriminator'] - self.assertEqual(route_discriminator, - ('route', 'name', False, None, None, None, None,None)) - self._assertRoute('name', 'pattern') - - def test_with_path_argument_and_pattern(self): - context = DummyContext() - self._callFUT(context, 'name', pattern='pattern', path='path') - actions = context.actions - self.assertEqual(len(actions), 1) - - route_action = actions[0] - route_action['callable']() - route_discriminator = route_action['discriminator'] - self.assertEqual(route_discriminator, - ('route', 'name', False, None, None, None, None,None)) - self._assertRoute('name', 'pattern') - - - def test_with_neither_path_nor_pattern(self): - from repoze.bfg.exceptions import ConfigurationError - context = DummyContext() - self.assertRaises(ConfigurationError, self._callFUT, context, 'name') - -class TestStaticDirective(unittest.TestCase): - def setUp(self): - testing.setUp() - - def tearDown(self): - testing.tearDown() - - def _callFUT(self, *arg, **kw): - from repoze.bfg.zcml import static - return static(*arg, **kw) - - def test_it_with_slash(self): - from repoze.bfg.static import PackageURLParser - from repoze.bfg.threadlocal import get_current_registry - from zope.interface import implementedBy - from repoze.bfg.static import StaticURLInfo - from repoze.bfg.interfaces import IView - from repoze.bfg.interfaces import IViewClassifier - from repoze.bfg.interfaces import IRouteRequest - from repoze.bfg.interfaces import IRoutesMapper - context = DummyContext() - self._callFUT(context, 'name', 'fixtures/static') - actions = context.actions - self.assertEqual(len(actions), 2) - - reg = get_current_registry() - - route_action = actions[0] - discriminator = route_action['discriminator'] - self.assertEqual(discriminator, ('static', 'name')) - route_action['callable'](*route_action['args'], **route_action['kw']) - mapper = reg.getUtility(IRoutesMapper) - routes = mapper.get_routes() - self.assertEqual(len(routes), 1) - self.assertEqual(routes[0].pattern, 'name/*subpath') - self.assertEqual(routes[0].name, 'name/') - - view_action = actions[1] - discriminator = view_action['discriminator'] - self.assertEqual(discriminator[:3], ('view', StaticURLInfo, '')) - self.assertEqual(discriminator[4], IView) - iface = implementedBy(StaticURLInfo) - request_type = reg.getUtility(IRouteRequest, 'name/') - view = reg.adapters.lookup( - (IViewClassifier, request_type, iface), IView, name='') - request = DummyRequest() - self.assertEqual(view(None, request).__class__, PackageURLParser) - -class TestResourceDirective(unittest.TestCase): - def setUp(self): - testing.setUp() - - def tearDown(self): - testing.tearDown() - - def _callFUT(self, *arg, **kw): - from repoze.bfg.zcml import resource - return resource(*arg, **kw) - - def test_it(self): - from repoze.bfg.configuration import Configurator - context = DummyContext() - self._callFUT(context, 'a', 'b') - actions = context.actions - self.assertEqual(len(actions), 1) - action = actions[0] - self.assertEqual(action['callable'].im_func, - Configurator.override_resource.im_func) - self.assertEqual(action['discriminator'], None) - self.assertEqual(action['args'], ('a', 'b', None)) - - -class TestRendererDirective(unittest.TestCase): - def setUp(self): - testing.setUp() - - def tearDown(self): - testing.tearDown() - - def _callFUT(self, *arg, **kw): - from repoze.bfg.zcml import renderer - return renderer(*arg, **kw) - - def test_it(self): - from repoze.bfg.threadlocal import get_current_registry - from repoze.bfg.interfaces import IRendererFactory - context = DummyContext() - renderer = lambda *arg, **kw: None - self._callFUT(context, renderer, 'r') - actions = context.actions - self.assertEqual(len(actions), 1) - action = actions[0] - self.assertEqual(action['discriminator'], (IRendererFactory, 'r')) - reg = get_current_registry() - self.failUnless(reg.getUtility(IRendererFactory, 'r'), renderer) - -class TestZCMLConfigure(unittest.TestCase): - i = 0 - def _callFUT(self, path, package): - from repoze.bfg.zcml import zcml_configure - return zcml_configure(path, package) - - def setUp(self): - testing.setUp() - self.tempdir = None - import sys - import os - import tempfile - from repoze.bfg.path import package_path - from repoze.bfg.tests import fixtureapp as package - import shutil - tempdir = tempfile.mkdtemp() - modname = 'myfixture%s' % self.i - self.i += 1 - self.packagepath = os.path.join(tempdir, modname) - fixturedir = package_path(package) - shutil.copytree(fixturedir, self.packagepath) - sys.path.insert(0, tempdir) - self.module = __import__(modname) - self.tempdir = tempdir - - def tearDown(self): - testing.tearDown() - import sys - import shutil - if self.module is not None: - del sys.modules[self.module.__name__] - if self.tempdir is not None: - sys.path.pop(0) - shutil.rmtree(self.tempdir) - - def test_zcml_configure(self): - actions = self._callFUT('configure.zcml', self.module) - self.failUnless(actions) - self.failUnless(isinstance(actions, list)) - - def test_zcml_configure_nonexistent_configure_dot_zcml(self): - import os - os.remove(os.path.join(self.packagepath, 'configure.zcml')) - self.assertRaises(IOError, self._callFUT, 'configure.zcml', - self.module) - -class TestZCMLScanDirective(unittest.TestCase): - def setUp(self): - testing.setUp() - - def tearDown(self): - testing.tearDown() - - def _callFUT(self, context, package): - from repoze.bfg.zcml import scan - return scan(context, package) - - def test_it(self): - from repoze.bfg.configuration import Configurator - dummy_module = DummyModule() - context = DummyContext() - self._callFUT(context, dummy_module) - actions = context.actions - self.assertEqual(len(actions), 1) - action = actions[0] - self.assertEqual(action['callable'].im_func, Configurator.scan.im_func) - self.assertEqual(action['discriminator'], None) - self.assertEqual(action['args'], (dummy_module, None, None)) - -class TestAdapterDirective(unittest.TestCase): - def setUp(self): - testing.setUp() - - def tearDown(self): - testing.tearDown() - - def _callFUT(self, *arg, **kw): - from repoze.bfg.zcml import adapter - return adapter(*arg, **kw) - - def test_for_is_None_no_adaptedBy(self): - context = DummyContext() - factory = DummyFactory() - self.assertRaises(TypeError, self._callFUT, context, [factory], - provides=None, for_=None) - - def test_for_is_None_adaptedBy_still_None(self): - context = DummyContext() - factory = DummyFactory() - factory.__component_adapts__ = None - self.assertRaises(TypeError, self._callFUT, context, [factory], - provides=None, for_=None) - - def test_for_is_None_adaptedBy_set(self): - from repoze.bfg.registry import Registry - context = DummyContext() - factory = DummyFactory() - factory.__component_adapts__ = (IDummy,) - self._callFUT(context, [factory], provides=IFactory, for_=None) - self.assertEqual(len(context.actions), 1) - regadapt = context.actions[0] - self.assertEqual(regadapt['discriminator'], - ('adapter', (IDummy,), IFactory, '')) - self.assertEqual(regadapt['callable'].im_func, - Registry.registerAdapter.im_func) - self.assertEqual(regadapt['args'], - (factory, (IDummy,), IFactory, '', None)) - - def test_provides_missing(self): - context = DummyContext() - factory = DummyFactory() - self.assertRaises(TypeError, self._callFUT, context, [factory], - provides=None, for_=(IDummy,)) - - def test_provides_obtained_via_implementedBy(self): - from repoze.bfg.registry import Registry - context = DummyContext() - self._callFUT(context, [DummyFactory], for_=(IDummy,)) - regadapt = context.actions[0] - self.assertEqual(regadapt['discriminator'], - ('adapter', (IDummy,), IFactory, '')) - self.assertEqual(regadapt['callable'].im_func, - Registry.registerAdapter.im_func) - self.assertEqual(regadapt['args'], - (DummyFactory, (IDummy,), IFactory, '', None)) - - def test_multiple_factories_multiple_for(self): - context = DummyContext() - factory = DummyFactory() - self.assertRaises(ValueError, self._callFUT, context, - [factory, factory], - provides=IFactory, - for_=(IDummy, IDummy)) - - def test_no_factories_multiple_for(self): - context = DummyContext() - self.assertRaises(ValueError, self._callFUT, context, - factory=[], - provides=IFactory, - for_=(IDummy, IDummy)) - - def test_rolled_up_factories(self): - from repoze.bfg.registry import Registry - context = DummyContext() - factory = DummyFactory() - self._callFUT(context, - [factory, factory], - provides=IFactory, - for_=(IDummy,)) - regadapt = context.actions[0] - self.assertEqual(regadapt['discriminator'], - ('adapter', (IDummy,), IFactory, '')) - self.assertEqual(regadapt['callable'].im_func, - Registry.registerAdapter.im_func) - self.assertEqual(regadapt['args'][0].__module__, 'repoze.bfg.zcml') - -class TestSubscriberDirective(unittest.TestCase): - def setUp(self): - testing.setUp() - - def tearDown(self): - testing.tearDown() - - def _callFUT(self, *arg, **kw): - from repoze.bfg.zcml import subscriber - return subscriber(*arg, **kw) - - def test_no_factory_no_handler(self): - context = DummyContext() - self.assertRaises(TypeError, - self._callFUT, context, for_=None, factory=None, - handler=None, - provides=None) - - def test_handler_with_provides(self): - context = DummyContext() - self.assertRaises(TypeError, - self._callFUT, context, for_=None, factory=None, - handler=1, provides=1) - - def test_handler_and_factory(self): - context = DummyContext() - self.assertRaises(TypeError, - self._callFUT, context, for_=None, factory=1, - handler=1, provides=None) - - def test_no_provides_with_factory(self): - context = DummyContext() - self.assertRaises(TypeError, - self._callFUT, context, for_=None, factory=1, - handler=None, provides=None) - - def test_adapted_by_as_for_is_None(self): - context = DummyContext() - factory = DummyFactory() - factory.__component_adapts__ = None - self.assertRaises(TypeError, self._callFUT, context, for_=None, - factory=factory, handler=None, provides=IFactory) - - def test_register_with_factory(self): - from repoze.bfg.registry import Registry - context = DummyContext() - factory = DummyFactory() - self._callFUT(context, for_=(IDummy,), - factory=factory, handler=None, provides=IFactory) - self.assertEqual(len(context.actions), 1) - subadapt = context.actions[0] - self.assertEqual(subadapt['discriminator'], None) - self.assertEqual(subadapt['callable'].im_func, - Registry.registerSubscriptionAdapter.im_func) - self.assertEqual(subadapt['args'], - (factory, (IDummy,), IFactory, None, None) ) - - def test_register_with_handler(self): - from repoze.bfg.configuration import Configurator - context = DummyContext() - factory = DummyFactory() - self._callFUT(context, for_=(IDummy,), - factory=None, handler=factory) - self.assertEqual(len(context.actions), 1) - subadapt = context.actions[0] - self.assertEqual(subadapt['discriminator'], None) - self.assertEqual(subadapt['callable'].im_func, - Configurator.add_subscriber.im_func) - self.assertEqual(subadapt['args'], (factory, (IDummy,), None) ) - -class TestUtilityDirective(unittest.TestCase): - def setUp(self): - testing.setUp() - - def tearDown(self): - testing.tearDown() - - def _callFUT(self, *arg, **kw): - from repoze.bfg.zcml import utility - return utility(*arg, **kw) - - def test_factory_and_component(self): - context = DummyContext() - self.assertRaises(TypeError, self._callFUT, - context, factory=1, component=1) - - def test_missing_provides(self): - context = DummyContext() - self.assertRaises(TypeError, self._callFUT, context, provides=None) - - def test_provides_from_factory_implements(self): - from repoze.bfg.registry import Registry - context = DummyContext() - self._callFUT(context, factory=DummyFactory) - self.assertEqual(len(context.actions), 1) - utility = context.actions[0] - self.assertEqual(utility['discriminator'], ('utility', IFactory, '')) - self.assertEqual(utility['callable'].im_func, - Registry.registerUtility.im_func) - self.assertEqual(utility['args'], (None, IFactory, '', None)) - self.assertEqual(utility['kw'], {'factory':DummyFactory}) - - def test_provides_from_component_provides(self): - from repoze.bfg.registry import Registry - context = DummyContext() - component = DummyFactory() - self._callFUT(context, component=component) - self.assertEqual(len(context.actions), 1) - utility = context.actions[0] - self.assertEqual(utility['discriminator'], ('utility', IFactory, '')) - self.assertEqual(utility['callable'].im_func, - Registry.registerUtility.im_func) - self.assertEqual(utility['args'], (component, IFactory, '', None)) - self.assertEqual(utility['kw'], {}) - -class TestTranslationDirDirective(unittest.TestCase): - def setUp(self): - testing.setUp() - - def tearDown(self): - testing.tearDown() - - def _callFUT(self, *arg, **kw): - from repoze.bfg.zcml import translationdir - return translationdir(*arg, **kw) - - def test_it(self): - from repoze.bfg.configuration import Configurator - context = DummyContext() - tdir = 'repoze.bfg.tests.localeapp:locale' - self._callFUT(context, tdir) - actions = context.actions - self.assertEqual(len(actions), 1) - action = context.actions[0] - self.assertEqual(action['discriminator'], ('tdir', tdir)) - self.assertEqual(action['callable'].im_func, - Configurator.add_translation_dirs.im_func) - self.assertEqual(action['args'], (tdir,)) - action['callable'](*action['args']) # doesn't blow up - -class TestLocaleNegotiatorDirective(unittest.TestCase): - def setUp(self): - testing.setUp() - - def tearDown(self): - testing.tearDown() - - def _callFUT(self, *arg, **kw): - from repoze.bfg.zcml import localenegotiator - return localenegotiator(*arg, **kw) - - def test_it(self): - from repoze.bfg.configuration import Configurator - context = DummyContext() - dummy_negotiator = object() - self._callFUT(context, dummy_negotiator) - actions = context.actions - self.assertEqual(len(actions), 1) - action = context.actions[0] - self.assertEqual(action['discriminator'], 'lnegotiator') - self.assertEqual(action['callable'].im_func, - Configurator.set_locale_negotiator.im_func) - self.assertEqual(action['args'], (dummy_negotiator,)) - action['callable'](*action['args']) # doesn't blow up - -class TestDefaultPermissionDirective(unittest.TestCase): - def setUp(self): - testing.setUp() - - def tearDown(self): - testing.tearDown() - - def _callFUT(self, context, name): - from repoze.bfg.zcml import default_permission - return default_permission(context, name) - - def test_it(self): - from repoze.bfg.threadlocal import get_current_registry - from repoze.bfg.interfaces import IDefaultPermission - reg = get_current_registry() - context = DummyContext() - self._callFUT(context, 'view') - actions = context.actions - self.assertEqual(len(actions), 1) - regadapt = actions[0] - self.assertEqual(regadapt['discriminator'], IDefaultPermission) - perm = reg.getUtility(IDefaultPermission) - self.assertEqual(perm, 'view') - -class TestLoadZCML(unittest.TestCase): - def setUp(self): - testing.setUp() - - def tearDown(self): - testing.tearDown() - - def test_it(self): - from zope.configuration import xmlconfig - import repoze.bfg.includes - xmlconfig.file('configure.zcml', package=repoze.bfg.includes) - -class TestRolledUpFactory(unittest.TestCase): - def _callFUT(self, *factories): - from repoze.bfg.zcml import _rolledUpFactory - return _rolledUpFactory(factories) - - def test_it(self): - def foo(ob): - return ob - factory = self._callFUT(foo, foo) - result = factory(True) - self.assertEqual(result, True) - -class Test_path_spec(unittest.TestCase): - def _callFUT(self, context, path): - from repoze.bfg.zcml import path_spec - return path_spec(context, path) - - def test_no_package_attr(self): - context = DummyContext() - path = '/thepath' - result = self._callFUT(context, path) - self.assertEqual(result, path) - - def test_package_attr_None(self): - context = DummyContext() - context.package = None - path = '/thepath' - result = self._callFUT(context, path) - self.assertEqual(result, path) - - def test_package_path_doesnt_start_with_abspath(self): - context = DummyContext() - context.package = DummyPackage('repoze.bfg.tests') - path = '/thepath' - result = self._callFUT(context, path) - self.assertEqual(result, path) - - def test_package_path_starts_with_abspath(self): - import pkg_resources - import os - context = DummyContext() - package = DummyPackage('repoze.bfg.tests') - package_path = pkg_resources.resource_filename('repoze.bfg.tests', '') - template_path = os.path.join(package_path, 'templates/foo.pt') - context.package = package - result = self._callFUT(context, template_path) - self.assertEqual(result, 'repoze.bfg.tests:templates/foo.pt') - - def test_package_name_is___main__(self): - context = DummyContext() - package = DummyPackage('__main__') - context.package = package - result = self._callFUT(context, '/foo.pt') - self.assertEqual(result, '/foo.pt') - - def test_path_is_already_resource_spec(self): - context = DummyContext() - result = self._callFUT(context, 'repoze.bfg.tests:foo.pt') - self.assertEqual(result, 'repoze.bfg.tests:foo.pt') - -class IDummy(Interface): - pass - -class IFactory(Interface): - pass - -class DummyFactory(object): - implements(IFactory) - def __call__(self): - """ """ - -class DummyModule: - __path__ = "foo" - __name__ = "dummy" - __file__ = '' - -class DummyContext: - def __init__(self, resolved=DummyModule): - self.actions = [] - self.info = None - self.resolved = resolved - self.package = None - - def action(self, discriminator, callable=None, args=(), kw={}, order=0): - self.actions.append( - {'discriminator':discriminator, - 'callable':callable, - 'args':args, - 'kw':kw} - ) - - def path(self, path): - return path - - def resolve(self, dottedname): - return self.resolved - -class Dummy: - pass - -class DummyRoute: - pass - -class DummyRequest: - subpath = () - def __init__(self, environ=None): - if environ is None: - environ = {} - self.environ = environ - self.path_info = environ.get('PATH_INFO', None) - - def get_response(self, app): - return app - - def copy(self): - return self - -class DummyPackage(object): - def __init__(self, name): - self.__name__ = name - self.__file__ = '/__init__.py' - diff --git a/repoze/bfg/tests/viewdecoratorapp/__init__.py b/repoze/bfg/tests/viewdecoratorapp/__init__.py deleted file mode 100644 index 5bb534f79..000000000 --- a/repoze/bfg/tests/viewdecoratorapp/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# package diff --git a/repoze/bfg/tests/viewdecoratorapp/configure.zcml b/repoze/bfg/tests/viewdecoratorapp/configure.zcml deleted file mode 100644 index 6867046df..000000000 --- a/repoze/bfg/tests/viewdecoratorapp/configure.zcml +++ /dev/null @@ -1,6 +0,0 @@ -<configure xmlns="http://namespaces.repoze.org/bfg"> - - <include package="repoze.bfg.includes" /> - <scan package="."/> - -</configure> diff --git a/repoze/bfg/tests/viewdecoratorapp/views/__init__.py b/repoze/bfg/tests/viewdecoratorapp/views/__init__.py deleted file mode 100644 index 5bb534f79..000000000 --- a/repoze/bfg/tests/viewdecoratorapp/views/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# package diff --git a/repoze/bfg/tests/viewdecoratorapp/views/templates/foo.pt b/repoze/bfg/tests/viewdecoratorapp/views/templates/foo.pt deleted file mode 100644 index 6a2f701b6..000000000 --- a/repoze/bfg/tests/viewdecoratorapp/views/templates/foo.pt +++ /dev/null @@ -1,3 +0,0 @@ -<html> -${result} -</html> diff --git a/repoze/bfg/tests/viewdecoratorapp/views/views.py b/repoze/bfg/tests/viewdecoratorapp/views/views.py deleted file mode 100644 index 29f8c7fd4..000000000 --- a/repoze/bfg/tests/viewdecoratorapp/views/views.py +++ /dev/null @@ -1,17 +0,0 @@ -import os -from repoze.bfg.view import bfg_view - -@bfg_view(renderer='templates/foo.pt', name='first') -def first(request): - return {'result':'OK1'} - -@bfg_view(renderer='repoze.bfg.tests.viewdecoratorapp.views:templates/foo.pt', - name='second') -def second(request): - return {'result':'OK2'} - -here = os.path.normpath(os.path.dirname(os.path.abspath(__file__))) -foo = os.path.join(here, 'templates', 'foo.pt') -@bfg_view(renderer=foo, name='third') -def third(request): - return {'result':'OK3'} |
