mirror of git://git.psyced.org/git/pypsyc
140 lines
4.9 KiB
Python
140 lines
4.9 KiB
Python
"""
|
|
:copyright: 2010 by Manuel Jacob
|
|
:license: MIT
|
|
"""
|
|
from mock import Mock, sentinel
|
|
from nose.tools import assert_raises
|
|
from tests.constants import USER1, USER1_NICK, PASSWORD
|
|
from tests.helpers import mockified, PlaceHolder
|
|
|
|
from pypsyc.server import webif
|
|
from pypsyc.server.db import Database
|
|
from pypsyc.server.webif import app, PersistentStore, run_webif
|
|
|
|
|
|
class TestViews(object):
|
|
@classmethod
|
|
def setup_class(cls):
|
|
app.secret_key = 'testing key'
|
|
|
|
def setup(self):
|
|
self.server = webif.server = Mock()
|
|
self.server.root.children = {}
|
|
self.client = app.test_client()
|
|
|
|
def test_index(self):
|
|
rv = self.client.get('/')
|
|
assert 'register' in rv.data
|
|
|
|
def _register(self, username, password, password2):
|
|
return self.client.post('/register', data=dict(
|
|
username=username, password=password, password2=password2
|
|
), follow_redirects=True)
|
|
|
|
def test_register_get(self):
|
|
rv = self.client.get('/register')
|
|
assert 'Username' in rv.data
|
|
assert 'Register' in rv.data
|
|
|
|
def test_register_post(self):
|
|
rv = self._register(USER1_NICK, PASSWORD, PASSWORD)
|
|
assert 'you were registered' in rv.data
|
|
assert self.server.method_calls == [
|
|
('register_person', (USER1_NICK, PASSWORD))]
|
|
|
|
def test_register_nousername(self):
|
|
rv = self._register('', '', '')
|
|
assert 'please specify a valid username' in rv.data
|
|
|
|
def test_register_username_inuse(self):
|
|
self.server.root.children = {USER1: True}
|
|
|
|
rv = self._register(USER1_NICK, '', '')
|
|
assert 'username already in use' in rv.data
|
|
|
|
def test_register_nopassword(self):
|
|
rv = self._register(USER1_NICK, '', '')
|
|
assert 'your password must have at least 6 characters' in rv.data
|
|
|
|
def test_register_shortpassword(self):
|
|
rv = self._register(USER1_NICK, 'passw', 'passw')
|
|
assert 'your password must have at least 6 characters' in rv.data
|
|
|
|
def test_register_unmatching_passwords(self):
|
|
rv = self._register(USER1_NICK, PASSWORD, 'password2')
|
|
assert 'the two passwords do not match' in rv.data
|
|
|
|
|
|
def test_persistent_store():
|
|
webif.server = Mock()
|
|
webif.server.database = Database(':memory:')
|
|
|
|
store = PersistentStore()
|
|
assert_raises(KeyError, store.__getitem__, 'key')
|
|
assert dict(store) == {}
|
|
assert len(store) == 0
|
|
|
|
store['key'] = 'value'
|
|
assert store['key'] == 'value'
|
|
assert len(store) == 1
|
|
|
|
store['key'] = 'value2'
|
|
assert dict(store) == {'key': 'value2'}
|
|
assert len(store) == 1
|
|
|
|
del store['key']
|
|
assert dict(store) == {}
|
|
assert len(store) == 0
|
|
|
|
|
|
@mockified('pypsyc.server.webif', ['PersistentStore', 'urandom',
|
|
'WSGIResource', 'Site', 'reactor',
|
|
'greenlet'])
|
|
def test_run_webif_ssl(PersistentStore, urandom, WSGIResource, Site, reactor,
|
|
greenlet):
|
|
store = PersistentStore.return_value = {'secret_key': 'key1'*5}
|
|
reactor_ph = PlaceHolder()
|
|
threadpool_ph = PlaceHolder()
|
|
wsgi_resource = WSGIResource.return_value
|
|
site = Site.return_value
|
|
|
|
run_webif(sentinel.server, sentinel.interface, sentinel.port,
|
|
sentinel.context_factory)
|
|
assert webif.server == sentinel.server
|
|
assert PersistentStore.call_args_list == [()]
|
|
assert webif.store == store
|
|
assert app.secret_key == 'key1'*5
|
|
assert not urandom.called
|
|
assert WSGIResource.call_args_list == [
|
|
((reactor_ph, threadpool_ph, app.wsgi_app),)]
|
|
assert Site.call_args_list == [((wsgi_resource,),)]
|
|
assert reactor.method_calls == [
|
|
('listenSSL', (sentinel.port, site, sentinel.context_factory),
|
|
{'interface': sentinel.interface})]
|
|
|
|
func = Mock()
|
|
reactor_ph.obj.callFromThread(func, sentinel.a, b=sentinel.b)
|
|
assert func.call_args_list == [((sentinel.a,), {'b': sentinel.b})]
|
|
|
|
threadpool_ph.obj.callInThread(sentinel.func, sentinel.a, b=sentinel.b)
|
|
assert greenlet.call_args_list == [((sentinel.func,),)]
|
|
assert greenlet.return_value.method_calls == [
|
|
('switch', (sentinel.a,), {'b': sentinel.b})]
|
|
|
|
|
|
@mockified('pypsyc.server.webif', ['PersistentStore', 'urandom',
|
|
'WSGIResource', 'Site', 'reactor'])
|
|
def test_run_webif_tcp(PersistentStore, urandom, WSGIResource, Site, reactor):
|
|
store = PersistentStore.return_value = {}
|
|
rand = urandom.return_value = 'key2'*5
|
|
wsgi_resource = WSGIResource.return_value
|
|
site = Site.return_value
|
|
|
|
run_webif(sentinel.server, sentinel.interface, sentinel.port, None)
|
|
assert urandom.call_args_list == [((20,),)]
|
|
assert app.secret_key == rand
|
|
assert store['secret_key'] == rand
|
|
assert Site.call_args_list == [((wsgi_resource,),)]
|
|
assert reactor.method_calls == [
|
|
('listenTCP', (sentinel.port, site), {'interface': 'localhost'})]
|