Fix up the tests and add tox configuration to run them
The alfajor HTTP test wrapper is not working properly. All the tests are failing with: AttributeError: '_APIClientResponse' object has no attribute '_status_code' It doesn't look like alfajor is being maintained any more [1, 2], so remove the dependency on it and run the tests directly through the werkzeug client instead. The test_json_get_styles test still failed because the content and ordering of the styles returned from the API is dependent on the platform on which the tests run. Instead of testing against a fixed expected result, which could be different on another platform, generate the expected results dynamically. Update the tox configuration and test-requirements.txt to be able to run the tests via tox. [1] https://github.com/idealist/Alfajor [2] https://github.com/idealistdev/alfajor Change-Id: I4db6783b9d725ce096575035ea27d28be8e6fed5
This commit is contained in:
parent
2acd8c9881
commit
f79c65815a
@ -1,2 +1,2 @@
|
||||
flake8
|
||||
|
||||
nose
|
||||
|
@ -1,4 +1,21 @@
|
||||
from alfajor import APIClient
|
||||
from werkzeug.test import Client
|
||||
from werkzeug.wrappers import BaseResponse
|
||||
from lodgeit.application import make_app
|
||||
from json import loads
|
||||
|
||||
client = APIClient()
|
||||
client.configure_in_scope('default')
|
||||
client = Client(make_app('sqlite://', 'NONE', False, True), BaseResponse)
|
||||
|
||||
|
||||
def is_json(response):
|
||||
"""True if the response is JSON and the HTTP status was 200."""
|
||||
return (response.status_code == 200 and
|
||||
response.headers.get('Content-Type', '') == 'application/json')
|
||||
|
||||
|
||||
def json(response):
|
||||
"""The response parsed as JSON.
|
||||
|
||||
No attempt is made to ensure the response is valid or even looks
|
||||
like JSON before parsing.
|
||||
"""
|
||||
return loads(response.data)
|
||||
|
@ -1,9 +0,0 @@
|
||||
[default-targets]
|
||||
default+apiclient=wsgi
|
||||
|
||||
[default]
|
||||
wsgi=wsgi
|
||||
|
||||
[default+apiclient.wsgi]
|
||||
server-entry-point = tests.utilities.runner:foo
|
||||
base_url = http://www.localhost:5001
|
@ -1,5 +1,6 @@
|
||||
from tests import client
|
||||
from tests import client, is_json, json
|
||||
from tests.utilities.runner import testcase
|
||||
from lodgeit.lib.highlighting import STYLES
|
||||
|
||||
|
||||
def post_json(method, data=None):
|
||||
@ -12,12 +13,12 @@ def test_json_post_and_get():
|
||||
data = '{"language": "text", "code": "hello world"}'
|
||||
resp = post_json('pastes.newPaste', data)
|
||||
|
||||
assert resp.is_json
|
||||
assert is_json(resp)
|
||||
resp = post_json('pastes.getPaste',
|
||||
'{"paste_id": "%d"}' % int(resp.json['data']))
|
||||
assert resp.is_json
|
||||
assert resp.json['data']['code'] == "hello world"
|
||||
assert resp.json['data']['language'] == "text"
|
||||
'{"paste_id": "%d"}' % int(json(resp)['data']))
|
||||
assert is_json(resp)
|
||||
assert json(resp)['data']['code'] == "hello world"
|
||||
assert json(resp)['data']['language'] == "text"
|
||||
|
||||
|
||||
@testcase()
|
||||
@ -25,28 +26,28 @@ def test_json_post_private_and_get():
|
||||
data = '{"language": "text", "code": "hello world", "private": "true"}'
|
||||
resp = post_json('pastes.newPaste', data)
|
||||
|
||||
assert resp.is_json
|
||||
assert is_json(resp)
|
||||
resp = post_json('pastes.getPaste',
|
||||
'{"paste_id": "%s"}' % resp.json['data'])
|
||||
assert resp.is_json
|
||||
assert resp.json['data']['code'] == "hello world"
|
||||
assert resp.json['data']['language'] == "text"
|
||||
'{"paste_id": "%s"}' % json(resp)['data'])
|
||||
assert is_json(resp)
|
||||
assert json(resp)['data']['code'] == "hello world"
|
||||
assert json(resp)['data']['language'] == "text"
|
||||
|
||||
|
||||
@testcase()
|
||||
def test_json_get_last():
|
||||
data = '{"language": "text", "code": "hello world"}'
|
||||
resp = post_json('pastes.newPaste', data)
|
||||
assert resp.is_json
|
||||
assert is_json(resp)
|
||||
|
||||
data = '{"language": "text", "code": "hello world again"}'
|
||||
resp = post_json('pastes.newPaste', data)
|
||||
assert resp.is_json
|
||||
assert is_json(resp)
|
||||
|
||||
resp = post_json('pastes.getLast')
|
||||
assert resp.is_json
|
||||
assert resp.json['data']['code'] == "hello world again"
|
||||
assert resp.json['data']['language'] == "text"
|
||||
assert is_json(resp)
|
||||
assert json(resp)['data']['code'] == "hello world again"
|
||||
assert json(resp)['data']['language'] == "text"
|
||||
|
||||
|
||||
@testcase()
|
||||
@ -54,43 +55,24 @@ def test_json_get_recent():
|
||||
def run(inc):
|
||||
data = '{"language": "text", "code": "hello world %s"}' % inc
|
||||
resp = post_json('pastes.newPaste', data)
|
||||
assert resp.is_json
|
||||
assert is_json(resp)
|
||||
return resp
|
||||
|
||||
paste_ids = []
|
||||
for x in xrange(10):
|
||||
resp = run(x)
|
||||
paste_ids.append(int(resp.json['data']))
|
||||
paste_ids.append(int(json(resp)['data']))
|
||||
|
||||
resp = post_json('pastes.getRecent', '{"amount": 7}')
|
||||
assert resp.is_json
|
||||
assert len(resp.json['data']) == 7
|
||||
ids = [x['paste_id'] for x in resp.json['data']]
|
||||
assert is_json(resp)
|
||||
assert len(json(resp)['data']) == 7
|
||||
ids = [x['paste_id'] for x in json(resp)['data']]
|
||||
assert ids[::-1] == paste_ids[3:]
|
||||
|
||||
|
||||
@testcase()
|
||||
def test_json_get_styles():
|
||||
styles = [
|
||||
['monokai', 'Monokai'],
|
||||
['manni', 'Manni'],
|
||||
['perldoc', 'Perldoc'],
|
||||
['borland', 'Borland'],
|
||||
['colorful', 'Colorful'],
|
||||
['default', 'Default'],
|
||||
['murphy', 'Murphy'],
|
||||
['trac', 'Trac'],
|
||||
['tango', 'Tango'],
|
||||
['vim', 'Vim'],
|
||||
['autumn', 'Autumn'],
|
||||
['vs', 'Vs'],
|
||||
['emacs', 'Emacs'],
|
||||
['friendly', 'Friendly'],
|
||||
['bw', 'Bw'],
|
||||
['pastie', 'Pastie'],
|
||||
['fruity', 'Fruity'],
|
||||
['native', 'Native'],
|
||||
]
|
||||
resp = post_json('styles.getStyles')
|
||||
assert resp.is_json
|
||||
assert resp.json['data'] == styles
|
||||
assert is_json(resp)
|
||||
expected = [[u'%s' % x, u'%s' % STYLES[x]] for x in STYLES]
|
||||
assert json(resp)['data'] == expected
|
||||
|
6
tox.ini
6
tox.ini
@ -1,11 +1,13 @@
|
||||
[tox]
|
||||
minversion = 1.6
|
||||
envlist = pep8
|
||||
envlist = pep8, py27
|
||||
skipsdist = True
|
||||
|
||||
[testenv]
|
||||
setenv = VIRTUAL_ENV={envdir}
|
||||
deps = -r{toxinidir}/test-requirements.txt
|
||||
deps = -r{toxinidir}/requirements.txt
|
||||
-r{toxinidir}/test-requirements.txt
|
||||
commands = nosetests
|
||||
|
||||
[testenv:pep8]
|
||||
commands = flake8
|
||||
|
Loading…
Reference in New Issue
Block a user