summaryrefslogtreecommitdiff
path: root/repoze/bfg/tests
diff options
context:
space:
mode:
authorChris McDonough <chrism@plope.com>2010-10-25 10:29:31 -0400
committerChris McDonough <chrism@plope.com>2010-10-25 10:29:31 -0400
commit64372401084889a440c9d990a0febc221e3e4b5c (patch)
treec8939a341505d19f19fa6918d264b4e1d95326f8 /repoze/bfg/tests
parentc8e78c2037806f3e5dab57de635bf80865b7061d (diff)
downloadpyramid-64372401084889a440c9d990a0febc221e3e4b5c.tar.gz
pyramid-64372401084889a440c9d990a0febc221e3e4b5c.tar.bz2
pyramid-64372401084889a440c9d990a0febc221e3e4b5c.zip
first pass at converting bfg to pyramid namespace
Diffstat (limited to 'repoze/bfg/tests')
-rw-r--r--repoze/bfg/tests/__init__.py1
-rw-r--r--repoze/bfg/tests/ccbugapp/__init__.py1
-rw-r--r--repoze/bfg/tests/ccbugapp/configure.zcml15
-rw-r--r--repoze/bfg/tests/ccbugapp/views.py10
-rw-r--r--repoze/bfg/tests/exceptionviewapp/__init__.py1
-rw-r--r--repoze/bfg/tests/exceptionviewapp/configure.zcml44
-rw-r--r--repoze/bfg/tests/exceptionviewapp/models.py18
-rw-r--r--repoze/bfg/tests/exceptionviewapp/views.py17
-rw-r--r--repoze/bfg/tests/fixtureapp/__init__.py1
-rw-r--r--repoze/bfg/tests/fixtureapp/another.zcml10
-rw-r--r--repoze/bfg/tests/fixtureapp/configure.zcml37
-rw-r--r--repoze/bfg/tests/fixtureapp/models.py8
-rw-r--r--repoze/bfg/tests/fixtureapp/subpackage/__init__.py1
-rw-r--r--repoze/bfg/tests/fixtureapp/subpackage/templates/bar.pt2
-rw-r--r--repoze/bfg/tests/fixtureapp/subpackage/yetanother.zcml8
-rw-r--r--repoze/bfg/tests/fixtureapp/templates/fixture.pt6
-rw-r--r--repoze/bfg/tests/fixtureapp/views.py22
-rw-r--r--repoze/bfg/tests/fixtures/minimal.pt3
-rw-r--r--repoze/bfg/tests/fixtures/minimal.txt1
-rw-r--r--repoze/bfg/tests/fixtures/nonminimal.txt1
-rw-r--r--repoze/bfg/tests/fixtures/pp.pt3
-rw-r--r--repoze/bfg/tests/fixtures/static/index.html1
-rw-r--r--repoze/bfg/tests/fixtures/static/subdir/index.html1
-rw-r--r--repoze/bfg/tests/grokkedapp/__init__.py90
-rw-r--r--repoze/bfg/tests/grokkedapp/another.py62
-rw-r--r--repoze/bfg/tests/grokkedapp/configure.zcml6
-rw-r--r--repoze/bfg/tests/grokkedapp/pod/notinit.py5
-rw-r--r--repoze/bfg/tests/grokkedapp/subpackage/__init__.py5
-rw-r--r--repoze/bfg/tests/grokkedapp/subpackage/notinit.py5
-rw-r--r--repoze/bfg/tests/grokkedapp/subpackage/subsubpackage/__init__.py5
-rw-r--r--repoze/bfg/tests/hybridapp/__init__.py1
-rw-r--r--repoze/bfg/tests/hybridapp/configure.zcml117
-rw-r--r--repoze/bfg/tests/hybridapp/views.py39
-rw-r--r--repoze/bfg/tests/localeapp/__init__.py1
-rw-r--r--repoze/bfg/tests/localeapp/locale/GARBAGE1
-rw-r--r--repoze/bfg/tests/localeapp/locale/be/LC_MESSAGES1
-rw-r--r--repoze/bfg/tests/localeapp/locale/de/LC_MESSAGES/deformsite.mobin543 -> 0 bytes
-rw-r--r--repoze/bfg/tests/localeapp/locale/de/LC_MESSAGES/deformsite.po31
-rw-r--r--repoze/bfg/tests/localeapp/locale/en/LC_MESSAGES/deformsite.mobin543 -> 0 bytes
-rw-r--r--repoze/bfg/tests/localeapp/locale/en/LC_MESSAGES/deformsite.po31
-rw-r--r--repoze/bfg/tests/restbugapp/__init__.py1
-rw-r--r--repoze/bfg/tests/restbugapp/configure.zcml25
-rw-r--r--repoze/bfg/tests/restbugapp/views.py15
-rw-r--r--repoze/bfg/tests/routesapp/__init__.py1
-rw-r--r--repoze/bfg/tests/routesapp/configure.zcml12
-rw-r--r--repoze/bfg/tests/routesapp/models.py5
-rw-r--r--repoze/bfg/tests/routesapp/templates/fixture.pt6
-rw-r--r--repoze/bfg/tests/routesapp/views.py8
-rw-r--r--repoze/bfg/tests/test_authentication.py664
-rw-r--r--repoze/bfg/tests/test_authorization.py189
-rw-r--r--repoze/bfg/tests/test_chameleon_text.py198
-rw-r--r--repoze/bfg/tests/test_chameleon_zpt.py194
-rw-r--r--repoze/bfg/tests/test_compat.py9
-rw-r--r--repoze/bfg/tests/test_configuration.py4335
-rw-r--r--repoze/bfg/tests/test_decorator.py29
-rw-r--r--repoze/bfg/tests/test_docs.py35
-rw-r--r--repoze/bfg/tests/test_encode.py61
-rw-r--r--repoze/bfg/tests/test_events.py181
-rw-r--r--repoze/bfg/tests/test_exceptions.py45
-rw-r--r--repoze/bfg/tests/test_i18n.py394
-rw-r--r--repoze/bfg/tests/test_integration.py236
-rw-r--r--repoze/bfg/tests/test_location.py40
-rw-r--r--repoze/bfg/tests/test_log.py16
-rw-r--r--repoze/bfg/tests/test_paster.py186
-rw-r--r--repoze/bfg/tests/test_path.py172
-rw-r--r--repoze/bfg/tests/test_registry.py42
-rw-r--r--repoze/bfg/tests/test_renderers.py499
-rw-r--r--repoze/bfg/tests/test_request.py231
-rw-r--r--repoze/bfg/tests/test_resource.py431
-rw-r--r--repoze/bfg/tests/test_router.py1034
-rw-r--r--repoze/bfg/tests/test_scripting.py81
-rw-r--r--repoze/bfg/tests/test_security.py395
-rw-r--r--repoze/bfg/tests/test_settings.py203
-rw-r--r--repoze/bfg/tests/test_static.py343
-rw-r--r--repoze/bfg/tests/test_testing.py749
-rw-r--r--repoze/bfg/tests/test_threadlocal.py95
-rw-r--r--repoze/bfg/tests/test_traversal.py1033
-rw-r--r--repoze/bfg/tests/test_url.py304
-rw-r--r--repoze/bfg/tests/test_urldispatch.py318
-rw-r--r--repoze/bfg/tests/test_view.py499
-rw-r--r--repoze/bfg/tests/test_wsgi.py112
-rw-r--r--repoze/bfg/tests/test_zcml.py1283
-rw-r--r--repoze/bfg/tests/viewdecoratorapp/__init__.py1
-rw-r--r--repoze/bfg/tests/viewdecoratorapp/configure.zcml6
-rw-r--r--repoze/bfg/tests/viewdecoratorapp/views/__init__.py1
-rw-r--r--repoze/bfg/tests/viewdecoratorapp/views/templates/foo.pt3
-rw-r--r--repoze/bfg/tests/viewdecoratorapp/views/views.py17
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
deleted file mode 100644
index 2924a5eb5..000000000
--- a/repoze/bfg/tests/localeapp/locale/de/LC_MESSAGES/deformsite.mo
+++ /dev/null
Binary files differ
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
deleted file mode 100644
index 2924a5eb5..000000000
--- a/repoze/bfg/tests/localeapp/locale/en/LC_MESSAGES/deformsite.mo
+++ /dev/null
Binary files differ
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&amp;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'}