rspec/rspec-tools/tests/test_coverage.py
Marco Antognini 26e3ebc7ec Refactor rspec-tools and other cleanups
The main changes are:
 * Split RuleCreator: move some of its content to RspecRepo and to
   RuleEditor in new modules.
 * Refactor tests accordingly.

Other less important changes:
 * Sort and remove unnecessary imports
 * Remove unimplemented functions and unnecessary classes
 * Make some functions private
 * Move pushd from utils to tests where it is only used
 * Reduce code duplication here and there
 * Remove unnecessary Mock in some tests
 * Improve coverage for add_language_to_rule
2022-02-28 12:08:21 +01:00

78 lines
2.7 KiB
Python

import os
from contextlib import contextmanager
from unittest.mock import patch
from rspec_tools.coverage import (update_coverage_for_all_repos,
update_coverage_for_repo,
update_coverage_for_repo_version)
from rspec_tools.utils import load_json
@contextmanager
def pushd(new_dir):
previous_dir = os.getcwd()
os.chdir(new_dir)
try:
yield
finally:
os.chdir(previous_dir)
def test_update_coverage_for_repo_version(tmpdir):
with pushd(tmpdir):
VER = '3.3.0.5702'
REPO = 'SonarJS'
update_coverage_for_repo_version(REPO, VER)
coverage = tmpdir.join('covered_rules.json')
assert coverage.exists()
cov = load_json(coverage)
assert 'JAVASCRIPT' in cov
assert 'S100' in cov['JAVASCRIPT']
assert cov['JAVASCRIPT']['S100'] == {'since': REPO + ' ' + VER, 'until': REPO + ' ' + VER}
# Running it again changes nothing
update_coverage_for_repo_version(REPO, VER)
assert cov == load_json(coverage)
# Running it for a newer version doesn't change when the rules are first implemented
VER2 = '5.0.0.6962'
update_coverage_for_repo_version(REPO, VER2)
cov_new = load_json(coverage)
assert set(cov['JAVASCRIPT'].keys()).issubset(set(cov_new['JAVASCRIPT'].keys()))
assert cov_new['JAVASCRIPT']['S100']['since'] == REPO + ' ' + VER
assert cov_new['JAVASCRIPT']['S100']['until'] == REPO + ' ' + VER2
assert cov_new['JAVASCRIPT']['S1192']['since'] == REPO + ' ' + VER2
assert cov_new['JAVASCRIPT']['S1192']['until'] == REPO + ' ' + VER2
# For rules supported on master only the 'since' part is kept
update_coverage_for_repo_version(REPO, 'master')
assert load_json(coverage)['JAVASCRIPT']['S100'] == REPO + ' ' + VER
def test_update_coverage_for_repo(tmpdir):
with pushd(tmpdir):
REPO = 'SonarJS'
update_coverage_for_repo(REPO)
coverage = tmpdir.join('covered_rules.json')
assert coverage.exists()
cov = load_json(coverage)
assert 'JAVASCRIPT' in cov
assert 'TYPESCRIPT' in cov
assert 'S100' in cov['JAVASCRIPT']
assert cov['JAVASCRIPT']['S100'] == REPO + ' 3.3.0.5702'
assert 'S1145' in cov['JAVASCRIPT']
assert cov['JAVASCRIPT']['S1145'] == {'since': REPO + ' 3.3.0.5702', 'until': REPO + ' 6.7.0.14237'}
@patch('rspec_tools.coverage.REPOS', ['SonarJS', 'sonar-xml'])
def test_update_coverage_for_all_repos(tmpdir):
with pushd(tmpdir):
update_coverage_for_all_repos()
coverage = tmpdir.join('covered_rules.json')
assert coverage.exists()
cov = load_json(coverage)
assert {'JAVASCRIPT', 'TYPESCRIPT', 'XML', 'CSS'} == set(cov.keys())
assert 'S100' in cov['JAVASCRIPT']
assert 'S100' not in cov['XML']
assert 'S103' in cov['XML']