Add db configuration to modifying config
Move more tests over
This commit is contained in:
parent
d44aa8f566
commit
d9f7c07f42
10 changed files with 530 additions and 406 deletions
149
config_app/config_test/__init__.py
Normal file
149
config_app/config_test/__init__.py
Normal file
|
@ -0,0 +1,149 @@
|
|||
import json as py_json
|
||||
import unittest
|
||||
from contextlib import contextmanager
|
||||
from urllib import urlencode
|
||||
from urlparse import urlparse, parse_qs, urlunparse
|
||||
|
||||
from config_app.c_app import app, config_provider
|
||||
from config_app.config_endpoints.api import api
|
||||
from initdb import setup_database_for_testing, finished_database_for_testing
|
||||
|
||||
|
||||
CSRF_TOKEN_KEY = '_csrf_token'
|
||||
CSRF_TOKEN = '123csrfforme'
|
||||
|
||||
READ_ACCESS_USER = 'reader'
|
||||
ADMIN_ACCESS_USER = 'devtable'
|
||||
ADMIN_ACCESS_EMAIL = 'jschorr@devtable.com'
|
||||
|
||||
# OVERRIDES FROM PORTING FROM OLD APP:
|
||||
all_queues = [] # the config app doesn't have any queues
|
||||
|
||||
class ApiTestCase(unittest.TestCase):
|
||||
maxDiff = None
|
||||
|
||||
@staticmethod
|
||||
def _add_csrf(without_csrf):
|
||||
parts = urlparse(without_csrf)
|
||||
query = parse_qs(parts[4])
|
||||
query[CSRF_TOKEN_KEY] = CSRF_TOKEN
|
||||
return urlunparse(list(parts[0:4]) + [urlencode(query)] + list(parts[5:]))
|
||||
|
||||
def url_for(self, resource_name, params=None, skip_csrf=False):
|
||||
params = params or {}
|
||||
url = api.url_for(resource_name, **params)
|
||||
if not skip_csrf:
|
||||
url = ApiTestCase._add_csrf(url)
|
||||
return url
|
||||
|
||||
def setUp(self):
|
||||
setup_database_for_testing(self)
|
||||
self.app = app.test_client()
|
||||
self.ctx = app.test_request_context()
|
||||
self.ctx.__enter__()
|
||||
self.setCsrfToken(CSRF_TOKEN)
|
||||
|
||||
def tearDown(self):
|
||||
finished_database_for_testing(self)
|
||||
config_provider.clear()
|
||||
self.ctx.__exit__(True, None, None)
|
||||
|
||||
def setCsrfToken(self, token):
|
||||
with self.app.session_transaction() as sess:
|
||||
sess[CSRF_TOKEN_KEY] = token
|
||||
|
||||
@contextmanager
|
||||
def toggleFeature(self, name, enabled):
|
||||
import features
|
||||
previous_value = getattr(features, name)
|
||||
setattr(features, name, enabled)
|
||||
yield
|
||||
setattr(features, name, previous_value)
|
||||
|
||||
def getJsonResponse(self, resource_name, params={}, expected_code=200):
|
||||
rv = self.app.get(api.url_for(resource_name, **params))
|
||||
self.assertEquals(expected_code, rv.status_code)
|
||||
data = rv.data
|
||||
parsed = py_json.loads(data)
|
||||
return parsed
|
||||
|
||||
def postResponse(self, resource_name, params={}, data={}, file=None, headers=None,
|
||||
expected_code=200):
|
||||
data = py_json.dumps(data)
|
||||
|
||||
headers = headers or {}
|
||||
headers.update({"Content-Type": "application/json"})
|
||||
|
||||
if file is not None:
|
||||
data = {'file': file}
|
||||
headers = None
|
||||
|
||||
rv = self.app.post(self.url_for(resource_name, params), data=data, headers=headers)
|
||||
self.assertEquals(rv.status_code, expected_code)
|
||||
return rv.data
|
||||
|
||||
def getResponse(self, resource_name, params={}, expected_code=200):
|
||||
rv = self.app.get(api.url_for(resource_name, **params))
|
||||
self.assertEquals(rv.status_code, expected_code)
|
||||
return rv.data
|
||||
|
||||
def putResponse(self, resource_name, params={}, data={}, expected_code=200):
|
||||
rv = self.app.put(
|
||||
self.url_for(resource_name, params), data=py_json.dumps(data),
|
||||
headers={"Content-Type": "application/json"})
|
||||
self.assertEquals(rv.status_code, expected_code)
|
||||
return rv.data
|
||||
|
||||
def deleteResponse(self, resource_name, params={}, expected_code=204):
|
||||
rv = self.app.delete(self.url_for(resource_name, params))
|
||||
|
||||
if rv.status_code != expected_code:
|
||||
print 'Mismatch data for resource DELETE %s: %s' % (resource_name, rv.data)
|
||||
|
||||
self.assertEquals(rv.status_code, expected_code)
|
||||
return rv.data
|
||||
|
||||
def deleteEmptyResponse(self, resource_name, params={}, expected_code=204):
|
||||
rv = self.app.delete(self.url_for(resource_name, params))
|
||||
self.assertEquals(rv.status_code, expected_code)
|
||||
self.assertEquals(rv.data, '') # ensure response body empty
|
||||
return
|
||||
|
||||
def postJsonResponse(self, resource_name, params={}, data={}, expected_code=200):
|
||||
rv = self.app.post(
|
||||
self.url_for(resource_name, params), data=py_json.dumps(data),
|
||||
headers={"Content-Type": "application/json"})
|
||||
|
||||
if rv.status_code != expected_code:
|
||||
print 'Mismatch data for resource POST %s: %s' % (resource_name, rv.data)
|
||||
|
||||
self.assertEquals(rv.status_code, expected_code)
|
||||
data = rv.data
|
||||
parsed = py_json.loads(data)
|
||||
return parsed
|
||||
|
||||
def putJsonResponse(self, resource_name, params={}, data={}, expected_code=200, skip_csrf=False):
|
||||
rv = self.app.put(
|
||||
self.url_for(resource_name, params, skip_csrf), data=py_json.dumps(data),
|
||||
headers={"Content-Type": "application/json"})
|
||||
|
||||
if rv.status_code != expected_code:
|
||||
print 'Mismatch data for resource PUT %s: %s' % (resource_name, rv.data)
|
||||
|
||||
self.assertEquals(rv.status_code, expected_code)
|
||||
data = rv.data
|
||||
parsed = py_json.loads(data)
|
||||
return parsed
|
||||
|
||||
def assertNotInTeam(self, data, membername):
|
||||
for memberData in data['members']:
|
||||
if memberData['name'] == membername:
|
||||
self.fail(membername + ' found in team: ' + data['name'])
|
||||
|
||||
def assertInTeam(self, data, membername):
|
||||
for member_data in data['members']:
|
||||
if member_data['name'] == membername:
|
||||
return
|
||||
|
||||
self.fail(membername + ' not found in team: ' + data['name'])
|
||||
|
Reference in a new issue