179:572fc0f25c6b
Anton Shestakov <av6@dwimlabs.net>, Sun, 24 Jul 2016 09:24:14 +0800
checker: support running linters with custom environment

next change 209:8967fb24fd78
previous change 170:ed9d9ccb3b4c

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.web import HTTPError
from tornado.testing import AsyncHTTPTestCase
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)
Check.create(
ordinal=Check.get_next_ordinal(project),
errors=1,
warnings=1,
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
response = self.fetch('/example.com/alice/test-viewer/latest/raw')
assert response.code == 200
assert response.headers['Content-Type'] == 'text/plain; charset=utf-8'
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']