summaryrefslogtreecommitdiff
path: root/docs/tutorials/wiki2/src/tests
diff options
context:
space:
mode:
authorSteve Piercy <web@stevepiercy.com>2020-12-30 07:24:59 -0800
committerSteve Piercy <web@stevepiercy.com>2020-12-30 07:24:59 -0800
commit2ca12d8a7b317120f4d2f9c7b60308f281e78357 (patch)
tree61c9b775680dd4ea93e118f15614185f6fa42e25 /docs/tutorials/wiki2/src/tests
parentd1f88ec51042acb5a44106228cc4f8b7a3d772e0 (diff)
parentb24e9cf29b93c89b257497cd677ffcec3c9ad3a8 (diff)
downloadpyramid-2ca12d8a7b317120f4d2f9c7b60308f281e78357.tar.gz
pyramid-2ca12d8a7b317120f4d2f9c7b60308f281e78357.tar.bz2
pyramid-2ca12d8a7b317120f4d2f9c7b60308f281e78357.zip
Merge branch 'master' of https://github.com/Pylons/pyramid
Diffstat (limited to 'docs/tutorials/wiki2/src/tests')
-rw-r--r--docs/tutorials/wiki2/src/tests/tests/conftest.py42
-rw-r--r--docs/tutorials/wiki2/src/tests/tests/test_views.py48
-rw-r--r--docs/tutorials/wiki2/src/tests/tutorial/security.py2
-rw-r--r--docs/tutorials/wiki2/src/tests/tutorial/templates/layout.jinja24
-rw-r--r--docs/tutorials/wiki2/src/tests/tutorial/views/auth.py2
-rw-r--r--docs/tutorials/wiki2/src/tests/tutorial/views/default.py2
6 files changed, 68 insertions, 32 deletions
diff --git a/docs/tutorials/wiki2/src/tests/tests/conftest.py b/docs/tutorials/wiki2/src/tests/tests/conftest.py
index 1c8fb16d0..5ef28acd1 100644
--- a/docs/tutorials/wiki2/src/tests/tests/conftest.py
+++ b/docs/tutorials/wiki2/src/tests/tests/conftest.py
@@ -4,7 +4,7 @@ import alembic.command
import os
from pyramid.paster import get_appsettings
from pyramid.scripting import prepare
-from pyramid.testing import DummyRequest
+from pyramid.testing import DummyRequest, testConfig
import pytest
import transaction
from webob.cookies import Cookie
@@ -130,37 +130,45 @@ def app_request(app, tm, dbsession):
drawbacks in tests as it's harder to mock data and is heavier.
"""
- env = prepare(registry=app.registry)
- request = env['request']
- request.host = 'example.com'
+ with prepare(registry=app.registry) as env:
+ request = env['request']
+ request.host = 'example.com'
- # without this, request.dbsession will be joined to the same transaction
- # manager but it will be using a different sqlalchemy.orm.Session using
- # a separate database transaction
- request.dbsession = dbsession
- request.tm = tm
+ # without this, request.dbsession will be joined to the same transaction
+ # manager but it will be using a different sqlalchemy.orm.Session using
+ # a separate database transaction
+ request.dbsession = dbsession
+ request.tm = tm
- yield request
- env['closer']()
+ yield request
@pytest.fixture
-def dummy_request(app, tm, dbsession):
+def dummy_request(tm, dbsession):
"""
A lightweight dummy request.
- This request is ultra-lightweight and should be used only when the
- request itself is not a large focus in the call-stack.
-
- It is way easier to mock and control side-effects using this object.
+ This request is ultra-lightweight and should be used only when the request
+ itself is not a large focus in the call-stack. It is much easier to mock
+ and control side-effects using this object, however:
- It does not have request extensions applied.
- Threadlocals are not properly pushed.
"""
request = DummyRequest()
- request.registry = app.registry
request.host = 'example.com'
request.dbsession = dbsession
request.tm = tm
return request
+
+@pytest.fixture
+def dummy_config(dummy_request):
+ """
+ A dummy :class:`pyramid.config.Configurator` object. This allows for
+ mock configuration, including configuration for ``dummy_request``, as well
+ as pushing the appropriate threadlocals.
+
+ """
+ with testConfig(request=dummy_request) as config:
+ yield config
diff --git a/docs/tutorials/wiki2/src/tests/tests/test_views.py b/docs/tutorials/wiki2/src/tests/tests/test_views.py
index 007184af8..e93b04b3c 100644
--- a/docs/tutorials/wiki2/src/tests/tests/test_views.py
+++ b/docs/tutorials/wiki2/src/tests/tests/test_views.py
@@ -1,9 +1,17 @@
+from pyramid.testing import DummySecurityPolicy
+
from tutorial import models
def makeUser(name, role):
return models.User(name=name, role=role)
+
+def setUser(config, user):
+ config.set_security_policy(
+ DummySecurityPolicy(identity=user)
+ )
+
def makePage(name, data, creator):
return models.Page(name=name, data=data, creator=creator)
@@ -12,7 +20,11 @@ class Test_view_wiki:
from tutorial.views.default import view_wiki
return view_wiki(request)
- def test_it(self, dummy_request):
+ def _addRoutes(self, config):
+ config.add_route('view_page', '/{pagename}')
+
+ def test_it(self, dummy_config, dummy_request):
+ self._addRoutes(dummy_config)
response = self._callFUT(dummy_request)
assert response.location == 'http://example.com/FrontPage'
@@ -25,13 +37,19 @@ class Test_view_page:
from tutorial.routes import PageResource
return PageResource(page)
- def test_it(self, dummy_request, dbsession):
+ def _addRoutes(self, config):
+ config.add_route('edit_page', '/{pagename}/edit_page')
+ config.add_route('add_page', '/add_page/{pagename}')
+ config.add_route('view_page', '/{pagename}')
+
+ def test_it(self, dummy_config, dummy_request, dbsession):
# add a page to the db
user = makeUser('foo', 'editor')
page = makePage('IDoExist', 'Hello CruelWorld IDoExist', user)
dbsession.add_all([page, user])
# create a request asking for the page we've created
+ self._addRoutes(dummy_config)
dummy_request.context = self._makeContext(page)
# call the view we're testing and check its behavior
@@ -56,18 +74,24 @@ class Test_add_page:
from tutorial.routes import NewPage
return NewPage(pagename)
- def test_get(self, dummy_request, dbsession):
- dummy_request.user = makeUser('foo', 'editor')
+ def _addRoutes(self, config):
+ config.add_route('add_page', '/add_page/{pagename}')
+ config.add_route('view_page', '/{pagename}')
+
+ def test_get(self, dummy_config, dummy_request, dbsession):
+ setUser(dummy_config, makeUser('foo', 'editor'))
+ self._addRoutes(dummy_config)
dummy_request.context = self._makeContext('AnotherPage')
info = self._callFUT(dummy_request)
assert info['pagedata'] == ''
assert info['save_url'] == 'http://example.com/add_page/AnotherPage'
- def test_submit_works(self, dummy_request, dbsession):
+ def test_submit_works(self, dummy_config, dummy_request, dbsession):
dummy_request.method = 'POST'
dummy_request.POST['body'] = 'Hello yo!'
dummy_request.context = self._makeContext('AnotherPage')
- dummy_request.user = makeUser('foo', 'editor')
+ setUser(dummy_config, makeUser('foo', 'editor'))
+ self._addRoutes(dummy_config)
self._callFUT(dummy_request)
page = (
dbsession.query(models.Page)
@@ -85,24 +109,30 @@ class Test_edit_page:
from tutorial.routes import PageResource
return PageResource(page)
- def test_get(self, dummy_request, dbsession):
+ def _addRoutes(self, config):
+ config.add_route('edit_page', '/{pagename}/edit_page')
+ config.add_route('view_page', '/{pagename}')
+
+ def test_get(self, dummy_config, dummy_request, dbsession):
user = makeUser('foo', 'editor')
page = makePage('abc', 'hello', user)
dbsession.add_all([page, user])
+ self._addRoutes(dummy_config)
dummy_request.context = self._makeContext(page)
info = self._callFUT(dummy_request)
assert info['pagename'] == 'abc'
assert info['save_url'] == 'http://example.com/abc/edit_page'
- def test_submit_works(self, dummy_request, dbsession):
+ def test_submit_works(self, dummy_config, dummy_request, dbsession):
user = makeUser('foo', 'editor')
page = makePage('abc', 'hello', user)
dbsession.add_all([page, user])
+ self._addRoutes(dummy_config)
dummy_request.method = 'POST'
dummy_request.POST['body'] = 'Hello yo!'
- dummy_request.user = user
+ setUser(dummy_config, user)
dummy_request.context = self._makeContext(page)
response = self._callFUT(dummy_request)
assert response.location == 'http://example.com/abc'
diff --git a/docs/tutorials/wiki2/src/tests/tutorial/security.py b/docs/tutorials/wiki2/src/tests/tutorial/security.py
index 4f79195ef..18f0bd4c7 100644
--- a/docs/tutorials/wiki2/src/tests/tutorial/security.py
+++ b/docs/tutorials/wiki2/src/tests/tutorial/security.py
@@ -59,5 +59,3 @@ def includeme(config):
config.set_default_csrf_options(require_csrf=True)
config.set_security_policy(MySecurityPolicy(settings['auth.secret']))
- config.add_request_method(
- lambda request: request.identity, 'user', property=True)
diff --git a/docs/tutorials/wiki2/src/tests/tutorial/templates/layout.jinja2 b/docs/tutorials/wiki2/src/tests/tutorial/templates/layout.jinja2
index 64a1db0c5..55f4a85dc 100644
--- a/docs/tutorials/wiki2/src/tests/tutorial/templates/layout.jinja2
+++ b/docs/tutorials/wiki2/src/tests/tutorial/templates/layout.jinja2
@@ -33,13 +33,13 @@
</div>
<div class="col-md-10">
<div class="content">
- {% if request.user is none %}
+ {% if not request.is_authenticated %}
<p class="pull-right">
<a href="{{ request.route_url('login') }}">Login</a>
</p>
{% else %}
<form class="pull-right" action="{{ request.route_url('logout') }}" method="post">
- {{request.user.name}}
+ {{request.identity.name}}
<input type="hidden" name="csrf_token" value="{{ get_csrf_token() }}">
<button class="btn btn-link" type="submit">Logout</button>
</form>
diff --git a/docs/tutorials/wiki2/src/tests/tutorial/views/auth.py b/docs/tutorials/wiki2/src/tests/tutorial/views/auth.py
index e1a564415..807ff3464 100644
--- a/docs/tutorials/wiki2/src/tests/tutorial/views/auth.py
+++ b/docs/tutorials/wiki2/src/tests/tutorial/views/auth.py
@@ -53,7 +53,7 @@ def logout(request):
@forbidden_view_config(renderer='tutorial:templates/403.jinja2')
def forbidden_view(exc, request):
- if request.user is None:
+ if not request.is_authenticated:
next_url = request.route_url('login', _query={'next': request.url})
return HTTPSeeOther(location=next_url)
diff --git a/docs/tutorials/wiki2/src/tests/tutorial/views/default.py b/docs/tutorials/wiki2/src/tests/tutorial/views/default.py
index 214788357..4a2a66c84 100644
--- a/docs/tutorials/wiki2/src/tests/tutorial/views/default.py
+++ b/docs/tutorials/wiki2/src/tests/tutorial/views/default.py
@@ -56,7 +56,7 @@ def add_page(request):
if request.method == 'POST':
body = request.params['body']
page = models.Page(name=pagename, data=body)
- page.creator = request.user
+ page.creator = request.identity
request.dbsession.add(page)
next_url = request.route_url('view_page', pagename=pagename)
return HTTPSeeOther(location=next_url)