Skip to content

Commit

Permalink
fixes #5 - turn fucntional doc tests into unittests
Browse files Browse the repository at this point in the history
  • Loading branch information
jensens committed May 3, 2017
1 parent c55cc15 commit 685d7c7
Show file tree
Hide file tree
Showing 11 changed files with 116 additions and 202 deletions.
1 change: 1 addition & 0 deletions .gitignore
Expand Up @@ -3,6 +3,7 @@ build
develop-eggs
dist
lib
local
include
man
parts
Expand Down
2 changes: 1 addition & 1 deletion .travis.yml
Expand Up @@ -2,9 +2,9 @@ language: python
sudo: false
python:
- 2.7
- 3.3
- 3.4
- 3.5
- 3.6
install:
- pip install tox-travis
script:
Expand Down
3 changes: 2 additions & 1 deletion CHANGES.rst
Expand Up @@ -4,7 +4,8 @@ Changelog
1.3.1 (unreleased)
------------------

- Nothing changed yet.
- Turn fucntional tests into better covering unit tests and also add more tests.
This removes test dependencies on unrelated packages.


1.3 (2016-10-22)
Expand Down
16 changes: 15 additions & 1 deletion README.rst
@@ -1 +1,15 @@
Please refer to src/zope/globalrequest/README.rst.
zope.globalrequest
==================

Introduction
------------

This package provides a global way to retrieve the currently active request object in a zope-based web framework.
To do so you simply need to do the following::

from zope.globalrequest import getRequest
request = getRequest()

This package is mainly intended to be used with the Zope2/Plone stack.
While it also works with the Zope3 framework,
the latter promotes a clean separation of concerns and the pattern of having a globally available request object is discouraged.
5 changes: 3 additions & 2 deletions buildout.cfg
@@ -1,13 +1,14 @@
[buildout]
develop = .
parts = interpreter test
parts = interpreter test

[interpreter]
recipe = zc.recipe.egg
eggs = zope.globalrequest
interpreter = python
interpreter = zopepy

[test]
recipe = zc.recipe.testrunner
eggs = zope.globalrequest [test]
defaults = ['-v']

14 changes: 4 additions & 10 deletions setup.py
@@ -1,9 +1,9 @@
# -*- coding: utf-8 -*-
from setuptools import setup, find_packages
from os.path import join

version = '1.3.1.dev0'

readme = open(join('src', 'zope', 'globalrequest', 'README.rst')).read()
readme = open('README.rst').read()
changes = open('CHANGES.rst').read()

setup(
Expand All @@ -25,9 +25,9 @@
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.3',
'Programming Language :: Python :: 3.4',
'Programming Language :: Python :: 3.5',
'Programming Language :: Python :: 3.6',
],
keywords='zope request global',
author='Zope Foundation and Contributors',
Expand All @@ -47,13 +47,7 @@
'zope.traversing',
],
extras_require=dict(
test=[
'zope.browserpage',
'zope.app.wsgi',
'zope.configuration',
'zope.principalregistry',
'zope.testbrowser>=5.0',
'zope.testing',
test=[ # keep empty in case someone uses it
],
),
)
133 changes: 0 additions & 133 deletions src/zope/globalrequest/README.rst

This file was deleted.

12 changes: 6 additions & 6 deletions src/zope/globalrequest/__init__.py
@@ -1,11 +1,11 @@
from zope.interface.declarations import moduleProvides
# -*- coding: utf-8 -*-
from zope.globalrequest.interfaces import IGlobalRequest

moduleProvides(IGlobalRequest)


from zope.globalrequest.local import getLocal
from zope.globalrequest.local import setLocal
from zope.globalrequest.local import marker
from zope.interface.declarations import moduleProvides

moduleProvides(IGlobalRequest)


def getRequest():
Expand All @@ -20,4 +20,4 @@ def setRequest(request):

def clearRequest():
""" clear the stored request object """
setRequest(None)
setRequest(marker)
20 changes: 0 additions & 20 deletions src/zope/globalrequest/ftesting.zcml

This file was deleted.

110 changes: 83 additions & 27 deletions src/zope/globalrequest/tests.py
@@ -1,37 +1,93 @@
from unittest import TestSuite
from zope.configuration import config
from zope.configuration import xmlconfig
from zope.testing.cleanup import cleanUp
import doctest
import zope.app.wsgi.testlayer
import zope.globalrequest
import zope.testbrowser.wsgi
# -*- coding: utf-8 -*-
import unittest


def zcml(source):
context = config.ConfigurationMachine()
xmlconfig.registerCommonDirectives(context)
xmlconfig.string(source, context)
class TestGlobalrequest(unittest.TestCase):

def tearDown(self):
# reset the threading local context
from threading import local
import zope.globalrequest.local
zope.globalrequest.local.localData = local()

def tearDown(test):
cleanUp()
def test_unset_local(self):
# test with unset values
import zope.globalrequest.local
self.assertIs(zope.globalrequest.local.getLocal('unsetkey'), None)

def test_set_get_local(self):
# test with simple values
import zope.globalrequest.local
zope.globalrequest.local.setLocal('testkey', 'testvalue')
self.assertIs(
zope.globalrequest.local.getLocal('testkey'),
'testvalue'
)

class Layer(zope.testbrowser.wsgi.TestBrowserLayer,
zope.app.wsgi.testlayer.BrowserLayer):
"""Layer to prepare zope.testbrowser using the WSGI app."""
def test_unset_local_with_factory(self):
# test with a factory given and marker set/not set
dummy_default = 'dummy_test_default_value'

testLayer = Layer(zope.globalrequest)
def dummy_default_factory():
return dummy_default

import zope.globalrequest.local

self.assertEqual(
zope.globalrequest.local.getLocal(
'testdefaultkey',
factory=dummy_default_factory
),
dummy_default
)

def test_unset_global_request(self):
# get w/o any value set returns None
import zope.globalrequest
self.assertIs(zope.globalrequest.getRequest(), None)

def test_set_get_globalrequest(self):
# set a value and get it back
import zope.globalrequest
test_request = dict(value='I am a dummy request')
zope.globalrequest.setRequest(test_request)
self.assertIs(zope.globalrequest.getRequest(), test_request)

def test_clear_global_request(self):
# set a value and get it back
import zope.globalrequest
test_request = dict(value='I am a dummy request')
zope.globalrequest.setRequest(test_request)
zope.globalrequest.clearRequest()
self.assertIs(zope.globalrequest.getRequest(), None)

def test_set_subscriber(self):
import zope.globalrequest.subscribers
test_request = dict(value='I am a dummy request')

class DummyEvent(object):
request = test_request

dummy_event = DummyEvent()

# test set
zope.globalrequest.subscribers.set(None, dummy_event)
self.assertIs(zope.globalrequest.getRequest(), test_request)

def test_clear_subscriber(self):
import zope.globalrequest.subscribers
test_request = dict(value='I am a dummy request')

class DummyEvent(object):
request = test_request

dummy_event = DummyEvent()

# test clear
zope.globalrequest.subscribers.set(None, dummy_event)
zope.globalrequest.subscribers.clearRequest()
self.assertIs(zope.globalrequest.getRequest(), None)


def test_suite():
flags = doctest.NORMALIZE_WHITESPACE | doctest.ELLIPSIS
readme = doctest.DocFileSuite(
'README.rst',
package='zope.globalrequest',
globs={'zcml': zcml},
optionflags=flags,
tearDown=tearDown)
readme.layer = testLayer
return TestSuite((readme,))
return unittest.defaultTestLoader.loadTestsFromName(__name__)

0 comments on commit 685d7c7

Please sign in to comment.