Refactor the tests to be less ugly.

This commit is contained in:
yackob03 2013-11-07 12:54:44 -05:00
parent ff7cd2f0a5
commit 161a6284f0
4 changed files with 201 additions and 465 deletions

View file

@ -6,12 +6,12 @@ import endpoints.api
from app import app
from data import model
from initdb import wipe_database, initialize_database, populate_database
from specs import (build_anon_spec, build_no_access_spec,
build_read_access_spec)
from specs import build_specs
NO_ACCESS_USER = 'freshuser'
READ_ACCESS_USER = 'reader'
ADMIN_ACCESS_USER = 'devtable'
class ApiTestCase(unittest.TestCase):
@ -42,14 +42,18 @@ class SpecTestBuilder(type):
rv = c.open(url, **open_kwargs)
msg = '%s %s: %s expected: %s' % (open_kwargs['method'], url,
rv.status_code, expected_status)
if rv.status_code != expected_status:
print msg
self.assertEqual(rv.status_code, expected_status, msg)
return test
def __new__(cls, name, bases, attrs):
with app.test_request_context() as ctx:
spec = attrs['spec_func']()
for (url, open_kwargs), expected_status in spec.items():
specs = attrs['spec_func']()
for test_spec in specs:
url, open_kwargs = test_spec.get_client_args()
expected_status = getattr(test_spec, attrs['result_attr'])
test = SpecTestBuilder._test_generator(url, expected_status,
open_kwargs,
attrs['auth_username'])
@ -64,21 +68,31 @@ class SpecTestBuilder(type):
class TestAnonymousAccess(ApiTestCase):
__metaclass__ = SpecTestBuilder
spec_func = build_anon_spec
spec_func = build_specs
result_attr = 'anon_code'
auth_username = None
class TestNoAccess(ApiTestCase):
__metaclass__ = SpecTestBuilder
spec_func = build_no_access_spec
spec_func = build_specs
result_attr = 'no_access_code'
auth_username = NO_ACCESS_USER
class TestReadAccess(ApiTestCase):
__metaclass__ = SpecTestBuilder
spec_func = build_read_access_spec
spec_func = build_specs
result_attr = 'read_code'
auth_username = READ_ACCESS_USER
class TestAdminAccess(ApiTestCase):
__metaclass__ = SpecTestBuilder
spec_func = build_specs
result_attr = 'admin_code'
auth_username = ADMIN_ACCESS_USER
if __name__ == '__main__':
unittest.main()