Skip to content

Commit

Permalink
add rudimentary webtest tests
Browse files Browse the repository at this point in the history
  • Loading branch information
mcdonc committed Aug 6, 2013
1 parent 63e488e commit 430c427
Show file tree
Hide file tree
Showing 4 changed files with 146 additions and 6 deletions.
2 changes: 2 additions & 0 deletions shootout/subscribers.py
Expand Up @@ -13,6 +13,8 @@ def add_base_template(event):

@subscriber(NewRequest)
def csrf_validation(event):
if event.request.environ.get('paste.testing'):
return
if event.request.method == "POST":
token = event.request.POST.get("_csrf")
if token is None or token != event.request.session.get_csrf_token():
Expand Down
69 changes: 69 additions & 0 deletions shootout/tests/test_functional.py
@@ -0,0 +1,69 @@
import unittest

class ViewTests(unittest.TestCase):
def setUp(self):
import os
import pkg_resources
from pyramid.paster import bootstrap
pkgroot = pkg_resources.get_distribution('shootout').location
testing_ini = os.path.join(pkgroot, 'testing.ini')
env = bootstrap(testing_ini)
self.closer = env['closer']
from webtest import TestApp
self.testapp = TestApp(env['app'])

def tearDown(self):
import transaction
transaction.abort()
self.closer()

def login(self):
self.testapp.post(
'/register',
{'form.submitted':'1',
'username':'chris',
'password':'chris',
'confirm_password':'chris',
'email':'chrism@plope.com',
'name':'Chris McDonough',
},
status=302,
)
self.testapp.post(
'/login',
{'login':'chris', 'password':'chris'},
status=302,
)

def add_idea(self):
self.testapp.post(
'/idea_add',
{'form.submitted':True,
'title':'title',
'text':'text',
'tags':'tag1'},
status=302,
)

def test_add_idea(self):
self.login()
self.add_idea()
from shootout.models import Idea
q = Idea.get_by_tagname('tag1')
results = q.all()
self.assertEqual(len(results), 1)
idea = results[0]
self.assertEqual(idea.title, 'title')

def test_idea_vote(self):
self.login()
self.add_idea()
from shootout.models import Idea
q = Idea.get_by_tagname('tag1')
target = q.one().idea_id
self.testapp.post(
'/idea_vote',
{'target':target},
status=301,
)

6 changes: 0 additions & 6 deletions shootout/tests/test_views.py
Expand Up @@ -344,12 +344,6 @@ def test_tag_view(self):
self.assertEqual(result['ideas'].one().idea_id, idea3.idea_id)
self.assertEqual(result['tag'], u'foo')

def test_about_view(self):
from shootout.views import about_view
self.config.include(register_templates)
request = testing.DummyRequest()
about_view(request)

def test_login_view_submit_fail(self):
from shootout.views import login_view
self.config.include('shootout.addroutes')
Expand Down
75 changes: 75 additions & 0 deletions testing.ini
@@ -0,0 +1,75 @@
[app:main]
use = egg:shootout
pyramid.reload_templates = false
pyramid.debug_authorization = false
pyramid.debug_notfound = false
pyramid.debug_routematch = false
pyramid.debug_templates = true
pyramid.default_locale_name = en
pyramid.includes = pyramid_exclog
session.secret = ^5$309^vJ-*
sqlalchemy.url = sqlite:///%(here)s/shootout.db
#tm.commit_veto = shootout.tests.test_functional.never_commit

[server:main]
use = egg:waitress#main
host = 0.0.0.0
port = 6543

# Begin logging configuration

[loggers]
keys = root, shootout, sqlalchemy, exc_logger

[handlers]
keys = console, exc_handler

[formatters]
keys = generic, exc_formatter

[logger_root]
level = INFO
handlers = console

[logger_shootout]
level = DEBUG
handlers =
qualname = shootout

[logger_exc_logger]
level = ERROR
handlers = exc_handler
qualname = exc_logger

[logger_sqlalchemy]
level = INFO
handlers =
qualname = sqlalchemy.engine
# "level = INFO" logs SQL queries.
# "level = DEBUG" logs SQL queries and results.
# "level = WARN" logs neither. (Recommended for production systems.)

[logger_exc_logger]
level = ERROR
handlers = exc_handler
qualname = exc_logger

[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = generic

[handler_exc_handler]
class = FileHandler
args = ('%(here)s/exception.log',)
level = ERROR
formatter = exc_formatter

[formatter_generic]
format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s

[formatter_exc_formatter]
format = %(asctime)s %(message)s

# End logging configuration

0 comments on commit 430c427

Please sign in to comment.