Tres Seaver
2014-12-12 d13829ff076df562ea3b0e7f0a982735cec4bc00
Remove cruft, restore test coverage to 100%.
12 files modified
415 ■■■■ changed files
repoze/who/plugins/tests/test_authtkt.py 5 ●●●● patch | view | raw | blame | history
repoze/who/plugins/tests/test_basicauth.py 3 ●●●●● patch | view | raw | blame | history
repoze/who/plugins/tests/test_htpasswd.py 8 ●●●●● patch | view | raw | blame | history
repoze/who/plugins/tests/test_redirector.py 39 ●●●● patch | view | raw | blame | history
repoze/who/plugins/tests/test_sql.py 11 ●●●● patch | view | raw | blame | history
repoze/who/tests/test__auth_tkt.py 9 ●●●●● patch | view | raw | blame | history
repoze/who/tests/test__compat.py 3 ●●●●● patch | view | raw | blame | history
repoze/who/tests/test_api.py 220 ●●●● patch | view | raw | blame | history
repoze/who/tests/test_classifiers.py 14 ●●●●● patch | view | raw | blame | history
repoze/who/tests/test_config.py 12 ●●●●● patch | view | raw | blame | history
repoze/who/tests/test_middleware.py 69 ●●●●● patch | view | raw | blame | history
repoze/who/tests/test_restrict.py 22 ●●●●● patch | view | raw | blame | history
repoze/who/plugins/tests/test_authtkt.py
@@ -18,9 +18,6 @@
    def failUnless(self, predicate, message=''):
        self.assertTrue(predicate, message) # Nannies go home!
    def failIf(self, predicate, message=''):
        self.assertFalse(predicate, message) # Nannies go home!
    def _getTargetClass(self):
        from repoze.who.plugins.auth_tkt import AuthTktCookiePlugin
        return AuthTktCookiePlugin
@@ -416,7 +413,7 @@
        userid = b'\xc2\xa9'.decode('utf-8')
        if type(b'') == type(''):
            userdata = 'userid_type:unicode'
        else: # XXX
        else: # pragma: no cover Py3k
            userdata = ''
        new_val = self._makeTicket(userid=userid.encode('utf-8'),
                                   userdata=userdata)
repoze/who/plugins/tests/test_basicauth.py
@@ -13,9 +13,6 @@
    def failUnless(self, predicate, message=''):
        self.assertTrue(predicate, message) # Nannies go home!
    def failIf(self, predicate, message=''):
        self.assertFalse(predicate, message) # Nannies go home!
    def _makeEnviron(self, kw=None):
        from wsgiref.util import setup_testing_defaults
        environ = {}
repoze/who/plugins/tests/test_htpasswd.py
@@ -11,11 +11,9 @@
        plugin = self._getTargetClass()(*arg, **kw)
        return plugin
    def _makeEnviron(self, kw=None):
    def _makeEnviron(self):
        environ = {}
        environ['wsgi.version'] = (1,0)
        if kw is not None:
            environ.update(kw)
        return environ
    def failUnless(self, predicate, message=''):
@@ -99,7 +97,7 @@
        import os
        here = os.path.abspath(os.path.dirname(__file__))
        htpasswd = os.path.join(here, 'fixtures', 'test.htpasswd.nonesuch')
        def check(password, hashed):
        def check(password, hashed): # pragma: no cover
            return True
        plugin = self._makeOne(htpasswd, check)
        environ = self._makeEnviron()
@@ -118,7 +116,7 @@
        import sys
        # win32 does not have a crypt library, don't
        # fail here
        if "win32" == sys.platform:
        if "win32" == sys.platform: # pragma: no cover
            return
        from crypt import crypt
repoze/who/plugins/tests/test_redirector.py
@@ -5,9 +5,6 @@
    def failUnless(self, predicate, message=''):
        self.assertTrue(predicate, message) # Nannies go home!
    def failIf(self, predicate, message=''):
        self.assertFalse(predicate, message) # Nannies go home!
class TestRedirectorPlugin(_Base):
@@ -26,22 +23,12 @@
                                      reason_param=reason_param,
                                      reason_header=reason_header)
    def _makeEnviron(self, login=None, password=None, came_from=None,
                         path_info='/', identifier=None, max_age=None):
    def _makeEnviron(self, path_info='/', identifier=None):
        from repoze.who._compat import StringIO
        fields = []
        if login:
            fields.append(('login', login))
        if password:
            fields.append(('password', password))
        if came_from:
            fields.append(('came_from', came_from))
        if max_age:
            fields.append(('max_age', max_age))
        if identifier is None:
            credentials = {'login':'chris', 'password':'password'}
            identifier = DummyIdentifier(credentials)
        content_type, body = encode_multipart_formdata(fields)
        content_type, body = encode_multipart_formdata()
        environ = {'wsgi.version': (1,0),
                   'wsgi.input': StringIO(body),
                   'wsgi.url_scheme':'http',
@@ -341,7 +328,7 @@
        self.assertEqual(plugin.reason_param, 'why')
        self.assertEqual(plugin.reason_header, 'X-Reason')
class DummyIdentifier:
class DummyIdentifier(object):
    forgotten = False
    remembered = False
@@ -352,19 +339,6 @@
        self.forget_headers = forget_headers
        self.replace_app = replace_app
    def identify(self, environ):
        if self.replace_app:
            environ['repoze.who.application'] = self.replace_app
        return self.credentials
    def forget(self, environ, identity):
        self.forgotten = identity
        return self.forget_headers
    def remember(self, environ, identity):
        self.remembered = identity
        return self.remember_headers
class DummyStartResponse:
    def __call__(self, status, headers, exc_info=None):
        self.status = status
@@ -372,15 +346,10 @@
        self.exc_info = exc_info
        return []
def encode_multipart_formdata(fields):
def encode_multipart_formdata():
    BOUNDARY = '----------ThIs_Is_tHe_bouNdaRY_$'
    CRLF = '\r\n'
    L = []
    for (key, value) in fields:
        L.append('--' + BOUNDARY)
        L.append('Content-Disposition: form-data; name="%s"' % key)
        L.append('')
        L.append(value)
    L.append('--' + BOUNDARY + '--')
    L.append('')
    body = CRLF.join(L)
repoze/who/plugins/tests/test_sql.py
@@ -2,9 +2,6 @@
class _Base(unittest.TestCase):
    def failUnless(self, predicate, message=''):
        self.assertTrue(predicate, message) # Nannies go home!
    def failIf(self, predicate, message=''):
        self.assertFalse(predicate, message) # Nannies go home!
@@ -18,11 +15,9 @@
        plugin = self._getTargetClass()(*arg, **kw)
        return plugin
    def _makeEnviron(self, kw=None):
    def _makeEnviron(self):
        environ = {}
        environ['wsgi.version'] = (1,0)
        if kw is not None:
            environ.update(kw)
        return environ
    def test_implements(self):
@@ -84,9 +79,9 @@
    def _get_sha_hex_digest(self, clear='password'):
        try:
            from hashlib import sha1
        except ImportError:
        except ImportError:  # pragma: no cover Py3k
            from sha import new as sha1
        if not isinstance(clear, type(b'')):
        if not isinstance(clear, type(b'')):  # pragma: no cover Py3k
            clear = clear.encode('utf-8')
        return sha1(clear).hexdigest()
repoze/who/tests/test__auth_tkt.py
@@ -5,9 +5,6 @@
    def failUnless(self, predicate, message=''):
        self.assertTrue(predicate, message) # Nannies go home!
    def failIf(self, predicate, message=''):
        self.assertFalse(predicate, message) # Nannies go home!
class AuthTicketTests(_Base):
    def _getTargetClass(self):
@@ -131,7 +128,7 @@
        except BadTicket as e:
            self.failUnless(e.args[0].startswith(
                            'Timestamp is not a hex integer:'))
        else:
        else:  # pragma: no cover
            self.fail('Did not raise')
    def test_no_bang_after_userid(self):
@@ -141,7 +138,7 @@
            self._callFUT(ticket=TICKET)
        except BadTicket as e:
            self.assertEqual(e.args[0], 'userid is not followed by !')
        else:
        else:  # pragma: no cover
            self.fail('Did not raise')
    def test_wo_tokens_or_data_bad_digest(self):
@@ -151,7 +148,7 @@
            self._callFUT(ticket=TICKET)
        except BadTicket as e:
            self.assertEqual(e.args[0], 'Digest signature is not correct')
        else:
        else:  # pragma: no cover
            self.fail('Did not raise')
    def test_wo_tokens_or_data_ok_digest(self):
repoze/who/tests/test__compat.py
@@ -5,9 +5,6 @@
    def failUnless(self, predicate, message=''):
        self.assertTrue(predicate, message) # Nannies go home!
    def failIf(self, predicate, message=''):
        self.assertFalse(predicate, message) # Nannies go home!
    def test_REQUEST_METHOD_miss(self):
        # PEP 3333 says CONTENT_TYPE is mandatory
        from .._compat import REQUEST_METHOD
repoze/who/tests/test_api.py
@@ -356,9 +356,10 @@
        self.assertEqual(result, None)
        self.assertEqual(environ['challenged'], None)
        self.assertEqual(identifier.forgotten, identity)
        self.assertEqual(len(logger._info), 2)
        self.assertEqual(len(logger._info), 3)
        self.assertEqual(logger._info[0], 'request classification: match')
        self.assertEqual(logger._info[1], 'no challenge app returned')
        self.failUnless(logger._info[1].startswith('forgetting via headers '))
        self.assertEqual(logger._info[2], 'no challenge app returned')
        self.assertEqual(len(logger._debug), 2)
        self.failUnless(logger._debug[0].startswith(
                                        'challengers registered: ['))
@@ -387,10 +388,11 @@
        self.assertEqual(result, app)
        self.assertEqual(environ['challenged'], app)
        self.assertEqual(identifier.forgotten, identity)
        self.assertEqual(len(logger._info), 2)
        self.assertEqual(len(logger._info), 3)
        self.assertEqual(logger._info[0], 'request classification: match')
        self.failUnless(logger._info[1].startswith('challenger plugin '))
        self.failUnless(logger._info[1].endswith(
        self.failUnless(logger._info[1].startswith('forgetting via headers '))
        self.failUnless(logger._info[2].startswith('challenger plugin '))
        self.failUnless(logger._info[2].endswith(
                         '"challenge" returned an app'))
        self.assertEqual(len(logger._debug), 2)
        self.failUnless(logger._debug[0].startswith(
@@ -504,14 +506,7 @@
        self.assertEqual(identifier.forgotten, identity)
    def test_remember_identifier_plugin_returns_none(self):
        class _Identifier:
            def identify(self, environ):
                return None
            def remember(self, environ, identity):
                return ()
            def forget(self, environ, identity):
                return ()
        identity = {'identifier': _Identifier()}
        identity = {'identifier': DummyNoResultsIdentifier()}
        api = self._makeOne()
        headers = api.remember(identity=identity)
        self.assertEqual(tuple(headers), ())
@@ -527,11 +522,9 @@
    def test_remember_no_identity_passed_but_in_environ(self):
        HEADERS = [('Foo', 'Bar'), ('Baz', 'Qux')]
        logger = DummyLogger()
        class _Identifier:
            def remember(self, environ, identity):
                return HEADERS
        environ = self._makeEnviron()
        environ['repoze.who.identity'] = {'identifier': _Identifier()}
        environ['repoze.who.identity'] = {
            'identifier': DummyIdentifier(remember_headers=HEADERS)}
        api = self._makeOne(environ=environ, logger=logger)
        self.assertEqual(api.remember(), HEADERS)
        self.assertEqual(len(logger._info), 2)
@@ -554,12 +547,9 @@
    def test_remember_w_identity_passed_w_identifier(self):
        HEADERS = [('Foo', 'Bar'), ('Baz', 'Qux')]
        logger = DummyLogger()
        class _Identifier:
            def remember(self, environ, identity):
                return HEADERS
        environ = self._makeEnviron()
        api = self._makeOne(environ=environ, logger=logger)
        identity = {'identifier': _Identifier()}
        identity = {'identifier': DummyIdentifier(remember_headers=HEADERS)}
        self.assertEqual(api.remember(identity), HEADERS)
        self.assertEqual(len(logger._info), 2)
        self.assertEqual(logger._info[0], 'request classification: browser')
@@ -569,14 +559,7 @@
        self.assertEqual(len(logger._debug), 0)
    def test_forget_identifier_plugin_returns_none(self):
        class _Identifier:
            def identify(self, environ):
                return None
            def remember(self, environ, identity):
                return ()
            def forget(self, environ, identity):
                return ()
        identity = {'identifier': _Identifier()}
        identity = {'identifier': DummyNoResultsIdentifier()}
        api = self._makeOne()
        headers = api.forget(identity=identity)
        self.assertEqual(tuple(headers), ())
@@ -593,11 +576,9 @@
    def test_forget_no_identity_passed_but_in_environ(self):
        HEADERS = [('Foo', 'Bar'), ('Baz', 'Qux')]
        logger = DummyLogger()
        class _Identifier:
            def forget(self, environ, identity):
                return HEADERS
        environ = self._makeEnviron()
        environ['repoze.who.identity'] = {'identifier': _Identifier()}
        environ['repoze.who.identity'] = {
            'identifier': DummyIdentifier(forget_headers=HEADERS)}
        api = self._makeOne(environ=environ, logger=logger)
        self.assertEqual(api.forget(), HEADERS)
        self.assertEqual(len(logger._info), 2)
@@ -620,12 +601,9 @@
    def test_forget_w_identity_passed_w_identifier(self):
        HEADERS = [('Foo', 'Bar'), ('Baz', 'Qux')]
        logger = DummyLogger()
        class _Identifier:
            def forget(self, environ, identity):
                return HEADERS
        environ = self._makeEnviron()
        api = self._makeOne(environ=environ, logger=logger)
        identity = {'identifier': _Identifier()}
        identity = {'identifier': DummyIdentifier(forget_headers=HEADERS)}
        self.assertEqual(api.forget(identity), HEADERS)
        self.assertEqual(len(logger._info), 2)
        self.assertEqual(logger._info[0], 'request classification: browser')
@@ -637,53 +615,28 @@
    def test_login_w_identifier_name_hit(self):
        REMEMBER_HEADERS = [('Foo', 'Bar'), ('Baz', 'Qux')]
        FORGET_HEADERS = [('Spam', 'Blah')]
        class _Identifier:
            def identify(self, environ):
                pass
            def remember(self, environ, identity):
                return REMEMBER_HEADERS[1:]
            def forget(self, environ, identity):
                return FORGET_HEADERS
        class _BogusIdentifier:
            def identify(self, environ):
                pass
            def remember(self, environ, identity):
                return REMEMBER_HEADERS[:1]
            def forget(self, environ, identity):
                pass
        authenticator = DummyAuthenticator('chrisid')
        environ = self._makeEnviron()
        identifiers = [('bogus', _BogusIdentifier()),
                       ('valid', _Identifier()),
        identifiers = [('bogus', DummyNoResultsIdentifier()),
                       ('valid', DummyIdentifier(
                                    remember_headers=REMEMBER_HEADERS)),
                      ]
        api = self._makeOne(identifiers=identifiers,
                            authenticators=[('authentic', authenticator)],
                            environ=environ)
        identity, headers = api.login({'login': 'chrisid'}, 'valid')
        self.assertEqual(identity['repoze.who.userid'], 'chrisid')
        self.assertEqual(headers, REMEMBER_HEADERS[1:])
        self.assertEqual(headers, REMEMBER_HEADERS)
    def test_login_wo_identifier_name_hit(self):
        REMEMBER_HEADERS = [('Foo', 'Bar'), ('Baz', 'Qux')]
        FORGET_HEADERS = [('Spam', 'Blah')]
        class _Identifier:
            def identify(self, environ):
                pass
            def remember(self, environ, identity):
                return REMEMBER_HEADERS[1:]
            def forget(self, environ, identity):
                return FORGET_HEADERS
        class _BogusIdentifier:
            def identify(self, environ):
                pass
            def remember(self, environ, identity):
                return REMEMBER_HEADERS[:1]
            def forget(self, environ, identity):
                pass
        authenticator = DummyAuthenticator('chrisid')
        environ = self._makeEnviron()
        identifiers = [('bogus', _BogusIdentifier()),
                       ('valid', _Identifier()),
        identifiers = [('bogus', DummyIdentifier(
                                    remember_headers=REMEMBER_HEADERS[:1])),
                       ('valid', DummyIdentifier(
                                    remember_headers=REMEMBER_HEADERS[1:])),
                      ]
        api = self._makeOne(identifiers=identifiers,
                            authenticators=[('authentic', authenticator)],
@@ -695,24 +648,12 @@
    def test_login_w_identifier_name_miss(self):
        REMEMBER_HEADERS = [('Foo', 'Bar'), ('Baz', 'Qux')]
        FORGET_HEADERS = [('Spam', 'Blah')]
        class _Identifier:
            def identify(self, environ):
                pass
            def remember(self, environ, identity):
                return REMEMBER_HEADERS
            def forget(self, environ, identity):
                return FORGET_HEADERS
        class _BogusIdentifier:
            def identify(self, environ):
                pass
            def remember(self, environ, identity):
                return ()
            def forget(self, environ, identity):
                return ()
        authenticator = DummyFailAuthenticator()
        environ = self._makeEnviron()
        identifiers = [('bogus', _BogusIdentifier()),
                       ('valid', _Identifier()),
        identifiers = [('bogus', DummyNoResultsIdentifier()),
                       ('valid', DummyIdentifier(
                                    remember_headers=REMEMBER_HEADERS,
                                    forget_headers=FORGET_HEADERS)),
                      ]
        api = self._makeOne(identifiers=identifiers,
                            authenticators=[('authentic', authenticator)],
@@ -723,23 +664,11 @@
    def test_logout_wo_identifier_name_miss(self):
        FORGET_HEADERS = [('Spam', 'Blah')]
        class _Identifier:
            def identify(self, environ):
                pass
            def remember(self, environ, identity):
                return ()
            def forget(self, environ, identity):
                return FORGET_HEADERS[:1]
        class _BogusIdentifier:
            def identify(self, environ):
                pass
            def remember(self, environ, identity):
                return ()
            def forget(self, environ, identity):
                return FORGET_HEADERS[1:]
        environ = self._makeEnviron()
        identifiers = [('valid', _Identifier()),
                       ('bogus', _BogusIdentifier()),
        identifiers = [('valid', DummyIdentifier(
                                    forget_headers=FORGET_HEADERS[:1])),
                       ('bogus', DummyIdentifier(
                                    forget_headers=FORGET_HEADERS[1:])),
                      ]
        api = self._makeOne(identifiers=identifiers,
                            environ=environ)
@@ -748,23 +677,10 @@
    def test_logout_w_identifier_name(self):
        FORGET_HEADERS = [('Spam', 'Blah')]
        class _Identifier:
            def identify(self, environ):
                pass
            def remember(self, environ, identity):
                return ()
            def forget(self, environ, identity):
                return FORGET_HEADERS
        class _BogusIdentifier:
            def identify(self, environ):
                pass
            def remember(self, environ, identity):
                return ()
            def forget(self, environ, identity):
                return ()
        environ = self._makeEnviron()
        identifiers = [('bogus', _BogusIdentifier()),
                       ('valid', _Identifier()),
        identifiers = [('bogus', DummyNoResultsIdentifier()),
                       ('valid', DummyIdentifier(
                                    forget_headers=FORGET_HEADERS)),
                      ]
        api = self._makeOne(identifiers=identifiers,
                            environ=environ)
@@ -774,24 +690,11 @@
    def test_logout_wo_identifier_name(self):
        REMEMBER_HEADERS = [('Foo', 'Bar'), ('Baz', 'Qux')]
        FORGET_HEADERS = [('Spam', 'Blah')]
        class _Identifier:
            def identify(self, environ):
                pass
            def remember(self, environ, identity):
                return REMEMBER_HEADERS
            def forget(self, environ, identity):
                return FORGET_HEADERS
        class _BogusIdentifier:
            def identify(self, environ):
                pass
            def remember(self, environ, identity):
                return ()
            def forget(self, environ, identity):
                return ()
        authenticator = DummyFailAuthenticator()
        environ = self._makeEnviron()
        identifiers = [('valid', _Identifier()),
                       ('bogus', _BogusIdentifier()),
        identifiers = [('bogus', DummyNoResultsIdentifier()),
                       ('valid', DummyIdentifier(
                                    forget_headers=FORGET_HEADERS)),
                      ]
        api = self._makeOne(identifiers=identifiers,
                            authenticators=[('authentic', authenticator)],
@@ -800,17 +703,10 @@
        self.assertEqual(headers, FORGET_HEADERS)
    def test_logout_removes_repoze_who_identity(self):
        class _Identifier:
            def identify(self, environ):
                pass
            def forget(self, environ, identity):
                return ()
            def remember(self, environ, identity):
                return ()
        authenticator = DummyFailAuthenticator()
        environ = self._makeEnviron()
        environ['repoze.who.identity'] = 'identity'
        identifiers = [('valid', _Identifier())]
        identifiers = [('valid', DummyNoResultsIdentifier())]
        api = self._makeOne(identifiers=identifiers,
                            authenticators=[('authentic', authenticator)],
                            environ=environ)
@@ -1153,20 +1049,17 @@
class DummyIdentifier:
class DummyIdentifier(object):
    forgotten = False
    remembered = False
    def __init__(self, credentials=None, remember_headers=None,
                 forget_headers=None, replace_app=None):
    def __init__(self, credentials=None,
                 remember_headers=(), forget_headers=()):
        self.credentials = credentials
        self.remember_headers = remember_headers
        self.forget_headers = forget_headers
        self.replace_app = replace_app
    def identify(self, environ):
        if self.replace_app:
            environ['repoze.who.application'] = self.replace_app
        return self.credentials
    def forget(self, environ, identity):
@@ -1178,19 +1071,19 @@
        return self.remember_headers
class DummyNoResultsIdentifier:
class DummyNoResultsIdentifier(object):
    def identify(self, environ):
        return None
    def remember(self, *arg, **kw):
        pass
        return ()
    def forget(self, *arg, **kw):
        pass
        return ()
class DummyAuthenticator:
class DummyAuthenticator(object):
    def __init__(self, userid=None):
        self.userid = userid
@@ -1200,12 +1093,12 @@
        return self.userid
class DummyFailAuthenticator:
class DummyFailAuthenticator(object):
    def authenticate(self, environ, credentials):
        return None
class DummyChallenger:
class DummyChallenger(object):
    _challenged_with = None
    def __init__(self, app=None):
        self.app = app
@@ -1216,7 +1109,7 @@
        return self.app
class DummyMDProvider:
class DummyMDProvider(object):
    def __init__(self, metadata=None):
        self._metadata = metadata
@@ -1224,30 +1117,25 @@
        return identity.update(self._metadata)
class DummyMultiPlugin:
class DummyMultiPlugin(object):
    pass
class DummyRequestClassifier:
class DummyRequestClassifier(object):
    def __call__(self, environ):
        return 'browser'
class DummyChallengeDecider:
    def __call__(self, environ, status, headers):
        if status.startswith('401 '):
            return True
class DummyChallengeDecider(object):
    pass
class DummyLogger:
class DummyLogger(object):
    _info = _debug = ()
    def info(self, msg):
        self._info += (msg,)
    def debug(self, msg):
        self._debug += (msg,)
class DummyApp:
class DummyApp(object):
    environ = None
    def __call__(self, environ, start_response):
        self.environ = environ
        return []
repoze/who/tests/test_classifiers.py
@@ -77,13 +77,6 @@
        from repoze.who.classifiers import default_challenge_decider
        return default_challenge_decider
    def _makeEnviron(self, kw=None):
        environ = {}
        environ['wsgi.version'] = (1,0)
        if kw is not None:
            environ.update(kw)
        return environ
    def test_conforms_to_IChallengeDecider(self):
        from repoze.who.interfaces import IChallengeDecider
        self.failUnless(IChallengeDecider.providedBy(self._getFUT()))
@@ -101,13 +94,6 @@
    def _getFUT(self):
        from repoze.who.classifiers import passthrough_challenge_decider
        return passthrough_challenge_decider
    def _makeEnviron(self, kw=None):
        environ = {}
        environ['wsgi.version'] = (1,0)
        if kw is not None:
            environ.update(kw)
        return environ
    def test_conforms_to_IChallengeDecider(self):
        from repoze.who.interfaces import IChallengeDecider
repoze/who/tests/test_config.py
@@ -5,9 +5,6 @@
    def failUnless(self, predicate, message=''):
        self.assertTrue(predicate, message) # Nannies go home!
    def failIf(self, predicate, message=''):
        self.assertFalse(predicate, message) # Nannies go home!
class TestWhoConfig(_Base):
    def _getTargetClass(self):
@@ -459,7 +456,6 @@
class Test_make_api_factory_with_config(_Base):
    _tempdir = None
    _warning_filters = None
    def setUp(self):
        pass
@@ -468,9 +464,6 @@
        if self._tempdir is not None:
            import shutil
            shutil.rmtree(self._tempdir)
        if self._warning_filters is not None:
            import warnings
            warnings.filters[:] = self._warning_filters
    def _getFactory(self):
        from repoze.who.config import make_api_factory_with_config
@@ -598,8 +591,3 @@
class DummyApp:
    environ = None
    def __call__(self, environ, start_response):
        self.environ = environ
        return []
repoze/who/tests/test_middleware.py
@@ -5,9 +5,6 @@
    def failUnless(self, predicate, message=''):
        self.assertTrue(predicate, message) # Nannies go home!
    def failIf(self, predicate, message=''):
        self.assertFalse(predicate, message) # Nannies go home!
class TestMiddleware(_Base):
    def _getTargetClass(self):
@@ -542,7 +539,7 @@
    def test_w_empty_generator(self):
        def gen():
            if False:
                yield 'a'
                yield 'a'  # pragma: no cover
        newgen = self._callFUT(gen())
        self.assertEqual(list(newgen), [])
@@ -560,15 +557,17 @@
    def setUp(self):
        import os
        self._old_WHO_LOG = os.environ.get('WHO_LOG')
        try:
            del os.environ['WHO_LOG']
        except KeyError:
            pass
    def tearDown(self):
        import os
        if self._old_WHO_LOG is not None:
            os.environ['WHO_LOG'] = self._old_WHO_LOG
        else:
            if 'WHO_LOG' in os.environ:
                del os.environ['WHO_LOG']
        try:
            del os.environ['WHO_LOG']
        except KeyError:
            pass
    def _getFactory(self):
        from repoze.who.middleware import make_test_middleware
@@ -596,13 +595,13 @@
        middleware = factory(app, global_conf)
        self.assertEqual(middleware.logger.getEffectiveLevel(), logging.DEBUG)
class DummyApp:
class DummyApp(object):
    environ = None
    def __call__(self, environ, start_response):
        self.environ = environ
        return []
class DummyWorkingApp:
class DummyWorkingApp(object):
    def __init__(self, status, headers):
        self.status = status
        self.headers = headers
@@ -612,7 +611,7 @@
        start_response(self.status, self.headers)
        return ['body']
class DummyGeneratorApp:
class DummyGeneratorApp(object):
    def __init__(self, status, headers):
        self.status = status
        self.headers = headers
@@ -624,7 +623,7 @@
            yield 'body'
        return gen()
class DummyIterableWithClose:
class DummyIterableWithClose(object):
    _closed = False
    def __init__(self, iterable):
        self._iterable = iterable
@@ -633,7 +632,7 @@
    def close(self):
        self._closed = True
class DummyIterableWithCloseApp:
class DummyIterableWithCloseApp(object):
    def __init__(self, status, headers):
        self.status = status
        self.headers = headers
@@ -644,7 +643,7 @@
        start_response(self.status, self.headers)
        return self._iterable
class DummyIdentityResetApp:
class DummyIdentityResetApp(object):
    def __init__(self, status, headers, new_identity):
        self.status = status
        self.headers = headers
@@ -657,7 +656,7 @@
        start_response(self.status, self.headers)
        return ['body']
class DummyChallenger:
class DummyChallenger(object):
    def __init__(self, app=None):
        self.app = app
@@ -665,7 +664,7 @@
        environ['challenged'] = self.app
        return self.app
class DummyIdentifier:
class DummyIdentifier(object):
    forgotten = False
    remembered = False
@@ -689,51 +688,29 @@
        self.remembered = identity
        return self.remember_headers
class DummyAuthenticator:
    def __init__(self, userid=None):
        self.userid = userid
class DummyAuthenticator(object):
    def authenticate(self, environ, credentials):
        if self.userid is None:
            return credentials['login']
        return self.userid
        return credentials['login']
class DummyFailAuthenticator:
    def authenticate(self, environ, credentials):
        return None
class DummyRequestClassifier:
class DummyRequestClassifier(object):
    def __call__(self, environ):
        return 'browser'
class DummyChallengeDecider:
class DummyChallengeDecider(object):
    def __call__(self, environ, status, headers):
        if status.startswith('401 '):
            return True
class DummyNoResultsIdentifier:
    def identify(self, environ):
        return None
    def remember(self, *arg, **kw):
        pass
    def forget(self, *arg, **kw):
        pass
class DummyStartResponse:
class DummyStartResponse(object):
    def __call__(self, status, headers, exc_info=None):
        self.status = status
        self.headers = headers
        self.exc_info = exc_info
        return []
class DummyMDProvider:
class DummyMDProvider(object):
    def __init__(self, metadata=None):
        self._metadata = metadata
    def add_metadata(self, environ, identity):
        return identity.update(self._metadata)
class DummyMultiPlugin:
    pass
repoze/who/tests/test_restrict.py
@@ -36,7 +36,6 @@
        return make_authenticated_restriction
    def test_enabled(self):
        from repoze.who.restrict import authenticated_predicate
        fut = self._getFUT()
        app = DummyApp()
@@ -62,21 +61,18 @@
    def test___call___disabled_predicate_false_calls_app_not_predicate(self):
        _tested = []
        def _factory():
            def _predicate(env):
                _tested.append(env)
                return False
            def _predicate(env):  # pragma: no cover
                assert False
            return _predicate
        _started = []
        def _start_response(status, headers):
            _started.append((status, headers))
            assert False  # pragma: no cover
        environ = {'testing': True}
        restrict = self._makeOne(predicate=_factory, enabled=False)
        restrict(environ, _start_response)
        self.assertEqual(len(_tested), 0)
        self.assertEqual(len(_started), 0)
        self.assertEqual(restrict.app.environ, environ)
    def test___call___enabled_predicate_false_returns_401(self):
@@ -108,16 +104,14 @@
                return True
            return _predicate
        _started = []
        def _start_response(status, headers):
            _started.append((status, headers))
            assert False  # pragma: no cover
        environ = {'testing': True, 'REMOTE_USER': 'fred'}
        restrict = self._makeOne(predicate=_factory)
        restrict(environ, _start_response)
        self.assertEqual(len(_tested), 1)
        self.assertEqual(len(_started), 0)
        self.assertEqual(restrict.app.environ, environ)
class MakePredicateRestrictionTests(_Base):
@@ -130,7 +124,7 @@
        fut = self._getFUT()
        app = DummyApp()
        def _predicate(env):
            return True
            return True  # pragma: no cover
        def _factory():
            return _predicate
@@ -166,14 +160,12 @@
        self.failUnless(filter.enabled)
class DummyApp:
class DummyApp(object):
    environ = None
    def __call__(self, environ, start_response):
        self.environ = environ
        return []
class DummyPredicate:
class DummyPredicate(object):
    def __init__(self, **kw):
        self.__dict__.update(kw)
    def __call__(self, env):
        return True