232:ee300662d95b
Anton Shestakov <av6@dwimlabs.net>, Tue, 30 Aug 2016 16:38:09 +0800
docs: describe entry points

next change 242:d1f63a197c74
previous change 209:8967fb24fd78

tests/test_viewer.py

Permissions: -rw-r--r--

Other formats: Feeds:
from datetime import datetime
from xml.etree import ElementTree
from pytest import raises
from tornado.escape import json_encode
from tornado.testing import AsyncHTTPTestCase
from tornado.web import HTTPError
from candolint.handlers import get_project_or_404
from candolint.models import database, Project, Change, Check
from viewer import CandolintViewer
def setup_module():
with database.transaction():
project = Project.create(
url='https://example.com/alice/test-viewer',
domain='example.com',
user='alice',
name='test-viewer')
change = Change.create(
rev=42,
node='92cfceb39d57d914ed8b14d0e37643de0797ae56',
branch='default',
date='2016-07-19 22:23 +0800',
author='alice',
message='component: do a thing',
project=project)
lines = [{
'text': '# C&O job started: 2016-08-20T02:38:06+00:00',
'cls': 'meta'
}, {
'text': '# C&O task: setup',
'task': 'setup',
'cls': 'task'
}, {
'text': '$ ../venv2/bin/flake8 --version',
'task': 'setup'
}, {
'text': '3.0.3',
'task': 'setup'
}, {
'text': '# C&O task: checks',
'task': 'checks',
'cls': 'task'
}, {
'line_number': 20,
'task': 'checks',
'link_start': 0,
'text': 'test.py:20:80: E501 line too long (82 > 79 characters)',
'filename': 'test.py',
'link_end': 10,
'cls': 'warning'
}, {
'text': '# C&O job finished: 2016-08-20T02:38:53+00:00',
'cls': 'meta'
}]
Check.create(
ordinal=Check.get_next_ordinal(project),
errors=1,
warnings=1,
lines=json_encode(lines),
success=True,
started=datetime.now(),
finished=datetime.now(),
change=change,
project=project)
def test_get_project_or_404():
with raises(HTTPError) as error:
get_project_or_404('butt.cloud', 'cyber', 'wizard-attack')
assert error.value.status_code == 404
project = get_project_or_404('example.com', 'alice', 'test-viewer')
assert project.id is not None
assert project.url == 'https://example.com/alice/test-viewer'
class ViewerTestCase(AsyncHTTPTestCase):
def get_app(self):
return CandolintViewer()
def test_index(self):
response = self.fetch('/')
assert response.code == 200
assert 'online linter' in response.body
assert '1 error' in response.body
assert '1 warning' in response.body
assert '<a href="#">default</a>' in response.body
def test_404(self):
response = self.fetch('/nobodyhere')
assert response.code == 404
assert 'online linter' in response.body
def test_project(self):
response = self.fetch('/butt.cloud/cyber/wizard-attack')
assert response.code == 404
assert 'online linter' in response.body
response = self.fetch('/example.com/alice/test-viewer')
assert response.code == 200
assert 'Clone URL' in response.body
assert 'status.svg' in response.body
assert '.. image:: http' in response.body
assert '1 error' in response.body
assert '1 warning' in response.body
assert '<a href="#">default</a>' in response.body
def test_check(self):
response = self.fetch('/butt.cloud/cyber/wizard-attack/latest')
assert response.code == 404
assert 'online linter' in response.body
response = self.fetch('/example.com/alice/test-viewer/latest')
assert response.code == 200
assert '1 error' in response.body
assert '1 warning' in response.body
assert '<a href="#">default</a>' in response.body
assert '<a href="#" class="filelink">test.py:20</a>' in response.body
response = self.fetch('/example.com/alice/test-viewer/latest/raw')
assert response.code == 200
assert response.headers['Content-Type'] == 'text/plain; charset=utf-8'
assert 'test.py' in response.body
def test_status(self):
response = self.fetch('/butt.cloud/cyber/wizard-attack/status.svg')
assert response.code == 404
assert 'online linter' in response.body
response = self.fetch('/example.com/alice/test-viewer/status.svg')
assert response.code == 200
root = ElementTree.fromstring(response.body)
ns = {'svg': 'http://www.w3.org/2000/svg'}
assert root.tag == '{http://www.w3.org/2000/svg}svg'
assert 'height' in root.attrib
assert root.attrib['height'] == '20'
text = [el.text for el in root.findall('./svg:g/svg:text', ns)]
assert text[::2] == ['lint', '1 error', '1 warning']