121 lines
5.2 KiB
Python
121 lines
5.2 KiB
Python
"""
|
|
Tests for paver xsslint quality tasks
|
|
"""
|
|
from unittest.mock import patch
|
|
|
|
import pytest
|
|
from paver.easy import call_task
|
|
|
|
import pavelib.quality
|
|
|
|
from .utils import PaverTestCase
|
|
|
|
|
|
class PaverXSSLintTest(PaverTestCase):
|
|
"""
|
|
Test run_xsslint with a mocked environment in order to pass in opts
|
|
"""
|
|
|
|
def setUp(self):
|
|
super().setUp()
|
|
self.reset_task_messages()
|
|
|
|
@patch.object(pavelib.quality, '_write_metric')
|
|
@patch.object(pavelib.quality, '_prepare_report_dir')
|
|
@patch.object(pavelib.quality, '_get_xsslint_counts')
|
|
def test_xsslint_violation_number_not_found(self, _mock_counts, _mock_report_dir, _mock_write_metric):
|
|
"""
|
|
run_xsslint encounters an error parsing the xsslint output log
|
|
"""
|
|
_mock_counts.return_value = {}
|
|
with pytest.raises(SystemExit):
|
|
call_task('pavelib.quality.run_xsslint')
|
|
|
|
@patch.object(pavelib.quality, '_write_metric')
|
|
@patch.object(pavelib.quality, '_prepare_report_dir')
|
|
@patch.object(pavelib.quality, '_get_xsslint_counts')
|
|
def test_xsslint_vanilla(self, _mock_counts, _mock_report_dir, _mock_write_metric):
|
|
"""
|
|
run_xsslint finds violations, but a limit was not set
|
|
"""
|
|
_mock_counts.return_value = {'total': 0}
|
|
call_task('pavelib.quality.run_xsslint')
|
|
|
|
@patch.object(pavelib.quality, '_write_metric')
|
|
@patch.object(pavelib.quality, '_prepare_report_dir')
|
|
@patch.object(pavelib.quality, '_get_xsslint_counts')
|
|
def test_xsslint_invalid_thresholds_option(self, _mock_counts, _mock_report_dir, _mock_write_metric):
|
|
"""
|
|
run_xsslint fails when thresholds option is poorly formatted
|
|
"""
|
|
_mock_counts.return_value = {'total': 0}
|
|
with pytest.raises(SystemExit):
|
|
call_task('pavelib.quality.run_xsslint', options={"thresholds": "invalid"})
|
|
|
|
@patch.object(pavelib.quality, '_write_metric')
|
|
@patch.object(pavelib.quality, '_prepare_report_dir')
|
|
@patch.object(pavelib.quality, '_get_xsslint_counts')
|
|
def test_xsslint_invalid_thresholds_option_key(self, _mock_counts, _mock_report_dir, _mock_write_metric):
|
|
"""
|
|
run_xsslint fails when thresholds option is poorly formatted
|
|
"""
|
|
_mock_counts.return_value = {'total': 0}
|
|
with pytest.raises(SystemExit):
|
|
call_task('pavelib.quality.run_xsslint', options={"thresholds": '{"invalid": 3}'})
|
|
|
|
@patch.object(pavelib.quality, '_write_metric')
|
|
@patch.object(pavelib.quality, '_prepare_report_dir')
|
|
@patch.object(pavelib.quality, '_get_xsslint_counts')
|
|
def test_xsslint_too_many_violations(self, _mock_counts, _mock_report_dir, _mock_write_metric):
|
|
"""
|
|
run_xsslint finds more violations than are allowed
|
|
"""
|
|
_mock_counts.return_value = {'total': 4}
|
|
with pytest.raises(SystemExit):
|
|
call_task('pavelib.quality.run_xsslint', options={"thresholds": '{"total": 3}'})
|
|
|
|
@patch.object(pavelib.quality, '_write_metric')
|
|
@patch.object(pavelib.quality, '_prepare_report_dir')
|
|
@patch.object(pavelib.quality, '_get_xsslint_counts')
|
|
def test_xsslint_under_limit(self, _mock_counts, _mock_report_dir, _mock_write_metric):
|
|
"""
|
|
run_xsslint finds fewer violations than are allowed
|
|
"""
|
|
_mock_counts.return_value = {'total': 4}
|
|
# No System Exit is expected
|
|
call_task('pavelib.quality.run_xsslint', options={"thresholds": '{"total": 5}'})
|
|
|
|
@patch.object(pavelib.quality, '_write_metric')
|
|
@patch.object(pavelib.quality, '_prepare_report_dir')
|
|
@patch.object(pavelib.quality, '_get_xsslint_counts')
|
|
def test_xsslint_rule_violation_number_not_found(self, _mock_counts, _mock_report_dir, _mock_write_metric):
|
|
"""
|
|
run_xsslint encounters an error parsing the xsslint output log for a
|
|
given rule threshold that was set.
|
|
"""
|
|
_mock_counts.return_value = {'total': 4}
|
|
with pytest.raises(SystemExit):
|
|
call_task('pavelib.quality.run_xsslint', options={"thresholds": '{"rules": {"javascript-escape": 3}}'})
|
|
|
|
@patch.object(pavelib.quality, '_write_metric')
|
|
@patch.object(pavelib.quality, '_prepare_report_dir')
|
|
@patch.object(pavelib.quality, '_get_xsslint_counts')
|
|
def test_xsslint_too_many_rule_violations(self, _mock_counts, _mock_report_dir, _mock_write_metric):
|
|
"""
|
|
run_xsslint finds more rule violations than are allowed
|
|
"""
|
|
_mock_counts.return_value = {'total': 4, 'rules': {'javascript-escape': 4}}
|
|
with pytest.raises(SystemExit):
|
|
call_task('pavelib.quality.run_xsslint', options={"thresholds": '{"rules": {"javascript-escape": 3}}'})
|
|
|
|
@patch.object(pavelib.quality, '_write_metric')
|
|
@patch.object(pavelib.quality, '_prepare_report_dir')
|
|
@patch.object(pavelib.quality, '_get_xsslint_counts')
|
|
def test_xsslint_under_rule_limit(self, _mock_counts, _mock_report_dir, _mock_write_metric):
|
|
"""
|
|
run_xsslint finds fewer rule violations than are allowed
|
|
"""
|
|
_mock_counts.return_value = {'total': 4, 'rules': {'javascript-escape': 4}}
|
|
# No System Exit is expected
|
|
call_task('pavelib.quality.run_xsslint', options={"thresholds": '{"rules": {"javascript-escape": 5}}'})
|