151 lines
5.0 KiB
Python
151 lines
5.0 KiB
Python
"""Unit tests for the Paver JavaScript testing tasks."""
|
|
|
|
from unittest.mock import patch
|
|
|
|
import ddt
|
|
from paver.easy import call_task
|
|
|
|
import pavelib.js_test
|
|
from pavelib.utils.envs import Env
|
|
|
|
from .utils import PaverTestCase
|
|
|
|
|
|
@ddt.ddt
|
|
class TestPaverJavaScriptTestTasks(PaverTestCase):
|
|
"""
|
|
Test the Paver JavaScript testing tasks.
|
|
"""
|
|
|
|
EXPECTED_DELETE_JAVASCRIPT_REPORT_COMMAND = 'find {platform_root}/reports/javascript -type f -delete'
|
|
EXPECTED_INSTALL_NPM_ASSETS_COMMAND = 'install npm_assets'
|
|
EXPECTED_KARMA_OPTIONS = (
|
|
"{config_file} "
|
|
"--single-run={single_run} "
|
|
"--capture-timeout=60000 "
|
|
"--junitreportpath="
|
|
"{platform_root}/reports/javascript/javascript_xunit-{suite}.xml "
|
|
"--browsers={browser}"
|
|
)
|
|
EXPECTED_COVERAGE_OPTIONS = (
|
|
' --coverage --coveragereportpath={platform_root}/reports/javascript/coverage-{suite}.xml'
|
|
)
|
|
|
|
EXPECTED_COMMANDS = [
|
|
"make report_dir",
|
|
'git clean -fqdx test_root/logs test_root/data test_root/staticfiles test_root/uploads',
|
|
"find . -name '.git' -prune -o -name '*.pyc' -exec rm {} \\;",
|
|
'rm -rf test_root/log/auto_screenshots/*',
|
|
"rm -rf /tmp/mako_[cl]ms",
|
|
]
|
|
|
|
def setUp(self):
|
|
super().setUp()
|
|
|
|
# Mock the paver @needs decorator
|
|
self._mock_paver_needs = patch.object(pavelib.js_test.test_js, 'needs').start()
|
|
self._mock_paver_needs.return_value = 0
|
|
|
|
# Cleanup mocks
|
|
self.addCleanup(self._mock_paver_needs.stop)
|
|
|
|
@ddt.data(
|
|
[""],
|
|
["--coverage"],
|
|
["--suite=lms"],
|
|
["--suite=lms --coverage"],
|
|
)
|
|
@ddt.unpack
|
|
def test_test_js_run(self, options_string):
|
|
"""
|
|
Test the "test_js_run" task.
|
|
"""
|
|
options = self.parse_options_string(options_string)
|
|
self.reset_task_messages()
|
|
call_task("pavelib.js_test.test_js_run", options=options)
|
|
self.verify_messages(options=options, dev_mode=False)
|
|
|
|
@ddt.data(
|
|
[""],
|
|
["--port=9999"],
|
|
["--suite=lms"],
|
|
["--suite=lms --port=9999"],
|
|
)
|
|
@ddt.unpack
|
|
def test_test_js_dev(self, options_string):
|
|
"""
|
|
Test the "test_js_run" task.
|
|
"""
|
|
options = self.parse_options_string(options_string)
|
|
self.reset_task_messages()
|
|
call_task("pavelib.js_test.test_js_dev", options=options)
|
|
self.verify_messages(options=options, dev_mode=True)
|
|
|
|
def parse_options_string(self, options_string):
|
|
"""
|
|
Parse a string containing the options for a test run
|
|
"""
|
|
parameters = options_string.split(" ")
|
|
suite = "all"
|
|
if "--system=lms" in parameters:
|
|
suite = "lms"
|
|
elif "--system=common" in parameters:
|
|
suite = "common"
|
|
coverage = "--coverage" in parameters
|
|
port = None
|
|
if "--port=9999" in parameters:
|
|
port = 9999
|
|
return {
|
|
"suite": suite,
|
|
"coverage": coverage,
|
|
"port": port,
|
|
}
|
|
|
|
def verify_messages(self, options, dev_mode):
|
|
"""
|
|
Verify that the messages generated when running tests are as expected
|
|
for the specified options and dev_mode.
|
|
"""
|
|
is_coverage = options['coverage']
|
|
port = options['port']
|
|
expected_messages = []
|
|
suites = Env.JS_TEST_ID_KEYS if options['suite'] == 'all' else [options['suite']]
|
|
|
|
expected_messages.extend(self.EXPECTED_COMMANDS)
|
|
if not dev_mode and not is_coverage:
|
|
expected_messages.append(self.EXPECTED_DELETE_JAVASCRIPT_REPORT_COMMAND.format(
|
|
platform_root=self.platform_root
|
|
))
|
|
expected_messages.append(self.EXPECTED_INSTALL_NPM_ASSETS_COMMAND)
|
|
|
|
command_template = (
|
|
'node --max_old_space_size=4096 node_modules/.bin/karma start {options}'
|
|
)
|
|
|
|
for suite in suites:
|
|
# Karma test command
|
|
if suite != 'jest-snapshot':
|
|
karma_config_file = Env.KARMA_CONFIG_FILES[Env.JS_TEST_ID_KEYS.index(suite)]
|
|
expected_test_tool_command = command_template.format(
|
|
options=self.EXPECTED_KARMA_OPTIONS.format(
|
|
config_file=karma_config_file,
|
|
single_run='false' if dev_mode else 'true',
|
|
suite=suite,
|
|
platform_root=self.platform_root,
|
|
browser=Env.KARMA_BROWSER,
|
|
),
|
|
)
|
|
if is_coverage:
|
|
expected_test_tool_command += self.EXPECTED_COVERAGE_OPTIONS.format(
|
|
platform_root=self.platform_root,
|
|
suite=suite
|
|
)
|
|
if port:
|
|
expected_test_tool_command += f" --port={port}"
|
|
else:
|
|
expected_test_tool_command = 'jest'
|
|
|
|
expected_messages.append(expected_test_tool_command)
|
|
|
|
assert self.task_messages == expected_messages
|