tests: regroup common functions into an utility module

This commit is contained in:
Frédéric Péters 2014-12-24 10:23:38 +01:00
parent b8773b2c66
commit afad4d33d8
16 changed files with 102 additions and 116 deletions

View File

@ -1,12 +1,13 @@
import sys
import shutil
import tempfile
from quixote import cleanup
from wcs.qommon.http_request import HTTPRequest
from wcs import formdef, publisher
from wcs import formdef
from wcs.formdef import FormDef
from utilities import create_temporary_pub
sys.modules['formdef'] = formdef
users = {}
@ -17,8 +18,7 @@ def setup_module(module):
global users
global pub
publisher.WcsPublisher.APP_DIR = tempfile.mkdtemp()
pub = publisher.WcsPublisher.create_publisher()
pub = create_temporary_pub()
req = HTTPRequest(None, {})
pub._set_request(req)

View File

@ -1,28 +1,21 @@
import sys
import shutil
import tempfile
import pytest
from webtest import TestApp
from quixote.wsgi import QWIP
from quixote import cleanup, get_publisher
from wcs.qommon import errors, sessions
from qommon.ident.password_accounts import PasswordAccount
from wcs import publisher
from wcs.qommon.http_request import HTTPRequest
QWIP.request_class = HTTPRequest
from utilities import get_app, login, create_temporary_pub
def setup_module(module):
cleanup()
global pub
publisher.WcsPublisher.APP_DIR = tempfile.mkdtemp()
pub = publisher.WcsPublisher.create_publisher()
pub = create_temporary_pub()
req = HTTPRequest(None, {'SCRIPT_NAME': '/', 'SERVER_NAME': 'example.net'})
pub.set_app_dir(req)
pub.cfg['identification'] = {'methods': ['password']}
@ -40,62 +33,51 @@ def create_superuser():
account1.user_id = user1.id
account1.store()
def get_app():
return TestApp(QWIP(pub), extra_environ={'HTTP_HOST': 'example.net'})
def login(app):
login_page = app.get('/login/')
login_form = login_page.forms['login-form']
login_form['username'] = 'admin'
login_form['password'] = 'admin'
resp = login_form.submit()
assert resp.status_int == 302
return app
def teardown_module(module):
shutil.rmtree(pub.APP_DIR)
def test_empty_site():
get_app().get('/admin/')
get_app(pub).get('/admin/')
def test_with_user():
create_superuser()
resp = get_app().get('/admin/', status=302)
resp = get_app(pub).get('/admin/', status=302)
resp = resp.follow()
assert resp.location == 'http://example.net/login/'
def test_with_superuser():
app = login(get_app())
app = login(get_app(pub))
app.get('/admin/')
def test_forms():
app = login(get_app())
app = login(get_app(pub))
app.get('/admin/forms/')
app.get('/admin/forms/new')
def test_workflows():
app = login(get_app())
app = login(get_app(pub))
app.get('/admin/workflows/')
app.get('/admin/workflows/new')
def test_users():
app = login(get_app())
app = login(get_app(pub))
app.get('/admin/users/')
app.get('/admin/users/new')
def test_roles():
app = login(get_app())
app = login(get_app(pub))
app.get('/admin/roles/')
app.get('/admin/roles/new')
def test_categories():
app = login(get_app())
app = login(get_app(pub))
app.get('/admin/categories/')
app.get('/admin/categories/new')
def test_settings():
app = login(get_app())
app = login(get_app(pub))
app.get('/admin/settings/')
app.get('/admin/settings/themes')
app.get('/admin/settings/users')

View File

@ -1,4 +1,3 @@
import tempfile
import shutil
import os
import hmac
@ -7,29 +6,21 @@ import hashlib
import urllib
import datetime
from webtest import TestApp
from quixote import cleanup, get_publisher
from quixote.wsgi import QWIP
from wcs import publisher
from wcs.qommon.http_request import HTTPRequest
from wcs.users import User
from wcs.categories import Category
from utilities import get_app, create_temporary_pub
pub, req, app_dir, user = None, None, None, None
QWIP.request_class = HTTPRequest
def setup_module(module):
cleanup()
global pub, req, app_dir, user
APP_DIR = tempfile.mkdtemp()
publisher.WcsPublisher.APP_DIR = APP_DIR
pub = publisher.WcsPublisher.create_publisher()
# allow saving the user
pub.app_dir = os.path.join(APP_DIR, 'example.net')
os.mkdir(pub.app_dir)
pub = create_temporary_pub()
user = User()
user.name = 'Jean Darmette'
user.email = 'jean.darmette@triffouilis.fr'
@ -49,35 +40,32 @@ def teardown_module(module):
global pub
shutil.rmtree(pub.APP_DIR)
def get_app():
return TestApp(QWIP(pub), extra_environ={'HTTP_HOST': 'example.net'})
def test_user_page_redirect():
output = get_app().get('/user')
output = get_app(pub).get('/user')
assert output.headers.get('location') == 'http://example.net/myspace/'
def test_user_page_error_when_json_and_no_user():
output = get_app().get('/user?format=json')
output = get_app(pub).get('/user?format=json')
assert output.body == '???'
def test_get_user_from_api_query_string_error_missing_orig():
output = get_app().get('/user?format=json&signature=xxx', status=403)
output = get_app(pub).get('/user?format=json&signature=xxx', status=403)
assert output.json['err_desc'] == 'missing/multiple orig field'
def test_get_user_from_api_query_string_error_invalid_orig():
output = get_app().get('/user?format=json&orig=coin&signature=xxx', status=403)
output = get_app(pub).get('/user?format=json&orig=coin&signature=xxx', status=403)
assert output.json['err_desc'] == 'invalid orig'
def test_get_user_from_api_query_string_error_missing_algo():
output = get_app().get('/user?format=json&orig=coucou&signature=xxx', status=403)
output = get_app(pub).get('/user?format=json&orig=coucou&signature=xxx', status=403)
assert output.json['err_desc'] == 'missing/multiple algo field'
def test_get_user_from_api_query_string_error_invalid_algo():
output = get_app().get('/user?format=json&orig=coucou&signature=xxx&algo=coin', status=403)
output = get_app(pub).get('/user?format=json&orig=coucou&signature=xxx&algo=coin', status=403)
assert output.json['err_desc'] == 'invalid algo'
def test_get_user_from_api_query_string_error_invalid_signature():
output = get_app().get('/user?format=json&orig=coucou&signature=xxx&algo=sha1', status=403)
output = get_app(pub).get('/user?format=json&orig=coucou&signature=xxx&algo=sha1', status=403)
assert output.json['err_desc'] == 'invalid signature'
def test_get_user_from_api_query_string_error_missing_timestamp():
@ -86,7 +74,7 @@ def test_get_user_from_api_query_string_error_missing_timestamp():
hmac.new('1234',
'format=json&orig=coucou&algo=sha1',
hashlib.sha1).digest()))
output = get_app().get('/user?format=json&orig=coucou&algo=sha1&signature=%s' % signature, status=403)
output = get_app(pub).get('/user?format=json&orig=coucou&algo=sha1&signature=%s' % signature, status=403)
assert output.json['err_desc'] == 'missing/multiple timestamp field'
def test_get_user_from_api_query_string_error_missing_email():
@ -97,7 +85,7 @@ def test_get_user_from_api_query_string_error_missing_email():
hmac.new('1234',
query,
hashlib.sha1).digest()))
output = get_app().get('/user?%s&signature=%s' % (query, signature), status=403)
output = get_app(pub).get('/user?%s&signature=%s' % (query, signature), status=403)
assert output.json['err_desc'] == 'missing email or NameID fields'
def test_get_user_from_api_query_string_error_success_sha1():
@ -108,7 +96,7 @@ def test_get_user_from_api_query_string_error_success_sha1():
hmac.new('1234',
query,
hashlib.sha1).digest()))
output = get_app().get('/user?%s&signature=%s' % (query, signature))
output = get_app(pub).get('/user?%s&signature=%s' % (query, signature))
assert output.json['user_display_name'] == u'Jean Darmette'
def test_get_user_from_api_query_string_error_invalid_signature_algo_mismatch():
@ -119,7 +107,7 @@ def test_get_user_from_api_query_string_error_invalid_signature_algo_mismatch():
hmac.new('1234',
query,
hashlib.sha1).digest()))
output = get_app().get('/user?%s&signature=%s' % (query, signature), status=403)
output = get_app(pub).get('/user?%s&signature=%s' % (query, signature), status=403)
assert output.json['err_desc'] == 'invalid signature'
def test_get_user_from_api_query_string_error_success_sha256():
@ -130,5 +118,5 @@ def test_get_user_from_api_query_string_error_success_sha256():
hmac.new('1234',
query,
hashlib.sha256).digest()))
output = get_app().get('/user?%s&signature=%s' % (query, signature))
output = get_app(pub).get('/user?%s&signature=%s' % (query, signature))
assert output.json['user_display_name'] == u'Jean Darmette'

View File

@ -1,7 +1,6 @@
import os
import pickle
import shutil
import tempfile
from cStringIO import StringIO
import pytest
@ -11,14 +10,14 @@ from wcs import publisher
from wcs.categories import Category
from utilities import create_temporary_pub
def setup_module(module):
cleanup()
global pub
publisher.WcsPublisher.APP_DIR = tempfile.mkdtemp()
pub = publisher.WcsPublisher.create_publisher()
pub = create_temporary_pub()
def teardown_module(module):
shutil.rmtree(pub.APP_DIR)

View File

@ -1,6 +1,5 @@
import sys
import shutil
import tempfile
from quixote import cleanup
from wcs import publisher
@ -9,14 +8,14 @@ from wcs.qommon.form import *
from wcs import fields
from test_widgets import MockHtmlForm, mock_form_submission
from utilities import create_temporary_pub
def setup_module(module):
cleanup()
global pub, req
publisher.WcsPublisher.APP_DIR = tempfile.mkdtemp()
pub = publisher.WcsPublisher.create_publisher()
pub = create_temporary_pub()
req = HTTPRequest(None, {})
pub._set_request(req)

View File

@ -1,13 +1,14 @@
import sys
import shutil
import tempfile
from quixote import cleanup
from quixote.http_request import Upload
from wcs.qommon.http_request import HTTPRequest
from wcs import fields, formdef, publisher
from wcs import fields, formdef
from wcs.formdef import FormDef
from utilities import create_temporary_pub
sys.modules['formdef'] = formdef
def setup_module(module):
@ -15,8 +16,7 @@ def setup_module(module):
global pub, formdef
publisher.WcsPublisher.APP_DIR = tempfile.mkdtemp()
pub = publisher.WcsPublisher.create_publisher()
pub = create_temporary_pub()
formdef = FormDef()
formdef.name = 'foobar'

View File

@ -1,12 +1,13 @@
import datetime
import sys
import shutil
import tempfile
from quixote import cleanup
from wcs import formdef, publisher
from wcs import formdef
from wcs.formdef import FormDef
from utilities import create_temporary_pub
sys.modules['formdef'] = formdef
def setup_module(module):
@ -14,8 +15,7 @@ def setup_module(module):
global pub
publisher.WcsPublisher.APP_DIR = tempfile.mkdtemp()
pub = publisher.WcsPublisher.create_publisher()
pub = create_temporary_pub()
pub.cfg['language'] = {'language': 'en'}
def teardown_module(module):

View File

@ -1,24 +1,21 @@
import sys
import shutil
import StringIO
import tempfile
import time
import xml.etree.ElementTree as ET
from quixote import cleanup
from wcs import publisher
from wcs.formdef import FormDef, fields
from qommon.misc import indent_xml as indent
from utilities import create_temporary_pub
def setup_module(module):
cleanup()
global pub, req
publisher.WcsPublisher.APP_DIR = tempfile.mkdtemp()
pub = publisher.WcsPublisher.create_publisher()
global pub
pub = create_temporary_pub()
def teardown_module(module):

View File

@ -1,19 +1,18 @@
import sys
import shutil
import tempfile
from quixote import cleanup
from wcs import publisher
from wcs.qommon.http_request import HTTPRequest
from wcs import fields
from utilities import create_temporary_pub
def setup_module(module):
cleanup()
global pub
publisher.WcsPublisher.APP_DIR = tempfile.mkdtemp()
pub = publisher.WcsPublisher.create_publisher()
pub = create_temporary_pub()
req = HTTPRequest(None, {})
pub._set_request(req)

View File

@ -1,17 +1,18 @@
import sys
import shutil
import tempfile
import pytest
from quixote import cleanup
from qommon import errors, sessions
from wcs import formdef, publisher
from wcs import formdef
from wcs.qommon.http_request import HTTPRequest
from wcs.formdef import FormDef
from wcs.categories import Category
import wcs.forms.root
from utilities import create_temporary_pub
sys.modules['formdef'] = formdef
@ -22,8 +23,7 @@ def setup_module(module):
global user1, user2
global category
publisher.WcsPublisher.APP_DIR = tempfile.mkdtemp()
pub = publisher.WcsPublisher.create_publisher()
pub = create_temporary_pub()
req = HTTPRequest(None, {'SCRIPT_NAME': '/'})
req._user = None

View File

@ -3,7 +3,6 @@ import os
import random
import shutil
import sys
import tempfile
import time
from quixote import cleanup
@ -14,6 +13,8 @@ from wcs.formdata import Evolution
from wcs import sql
import wcs.qommon.storage as st
from utilities import create_temporary_pub
sys.modules['formdef'] = formdef
import pytest
@ -29,8 +30,7 @@ def setup_module(module):
cleanup()
publisher.WcsPublisher.APP_DIR = tempfile.mkdtemp()
pub = publisher.WcsPublisher.create_publisher()
pub = create_temporary_pub()
pub.has_site_option = lambda x: True
conn = psycopg2.connect(user=os.environ['USER'])

View File

@ -2,7 +2,6 @@ import datetime
import os
import sys
import shutil
import tempfile
import time
import random
@ -13,13 +12,12 @@ from wcs import publisher
from wcs.qommon.storage import StorableObject
import wcs.qommon.storage as st
from utilities import create_temporary_pub
def setup_module(module):
cleanup()
global pub
publisher.WcsPublisher.APP_DIR = tempfile.mkdtemp()
pub = publisher.WcsPublisher.create_publisher()
pub = create_temporary_pub()
def teardown_module(module):

View File

@ -3,22 +3,19 @@ import os
import random
import shutil
import sys
import tempfile
import time
from quixote import cleanup
from wcs import publisher
from utilities import create_temporary_pub
def setup_module(module):
cleanup()
global pub
publisher.WcsPublisher.APP_DIR = tempfile.mkdtemp()
pub = publisher.WcsPublisher.create_publisher()
pub = create_temporary_pub()
def teardown_module(module):

View File

@ -1,7 +1,6 @@
import datetime
import sys
import shutil
import tempfile
import copy
from quixote import cleanup
@ -15,13 +14,12 @@ from wcs.qommon.http_request import HTTPRequest
import __builtin__
__builtin__.__dict__['ngettext'] = lambda x, y, z: x
from utilities import create_temporary_pub
def setup_module(module):
cleanup()
global pub, req
publisher.WcsPublisher.APP_DIR = tempfile.mkdtemp()
pub = publisher.WcsPublisher.create_publisher()
pub = create_temporary_pub()
req = HTTPRequest(None, {})
req.language = None

View File

@ -1,7 +1,6 @@
import sys
import shutil
import StringIO
import tempfile
import xml.etree.ElementTree as ET
from quixote import cleanup
@ -13,14 +12,13 @@ from wcs.fields import StringField
from qommon.misc import indent_xml as indent
from utilities import create_temporary_pub
def setup_module(module):
cleanup()
global pub, req
publisher.WcsPublisher.APP_DIR = tempfile.mkdtemp()
pub = publisher.WcsPublisher.create_publisher()
global pub
pub = create_temporary_pub()
def teardown_module(module):

31
tests/utilities.py Normal file
View File

@ -0,0 +1,31 @@
import os
import tempfile
from webtest import TestApp
from quixote.wsgi import QWIP
from wcs import publisher
from wcs.qommon.http_request import HTTPRequest
QWIP.request_class = HTTPRequest
def create_temporary_pub():
APP_DIR = tempfile.mkdtemp()
publisher.WcsPublisher.APP_DIR = APP_DIR
pub = publisher.WcsPublisher.create_publisher()
# allow saving the user
pub.app_dir = os.path.join(APP_DIR, 'example.net')
os.mkdir(pub.app_dir)
return pub
def get_app(pub):
return TestApp(QWIP(pub), extra_environ={'HTTP_HOST': 'example.net'})
def login(app, username='admin', password='admin'):
login_page = app.get('/login/')
login_form = login_page.forms['login-form']
login_form['username'] = username
login_form['password'] = password
resp = login_form.submit()
assert resp.status_int == 302
return app