
This cleans up make_repo.py a bit, using file extensions to determine file type. This also loosens the testing repo generation, as the existing test required matching a predifed expected output which had to be updated on every change (essentially making it a moot test, as the reference output was obtained from the functions output). The new test just checks if the output has the same number of packages as the input dir has addons. Tips on how best to test these sorts of "higher level" functions (if at all) would be welcome :)
87 lines
2.9 KiB
Python
87 lines
2.9 KiB
Python
#!/usr/bin/env python3
|
|
|
|
import unittest
|
|
from pathlib import Path
|
|
import logging
|
|
import ast
|
|
import json
|
|
import make_repo
|
|
|
|
logging.basicConfig(level=logging.DEBUG,
|
|
format='%(levelname)8s: %(message)s')
|
|
|
|
class test_make_repo(unittest.TestCase):
|
|
|
|
helper_path = Path('tests', 'test_helpers')
|
|
addon_path = helper_path / 'addons'
|
|
|
|
def test_extract_blinfo_from_nonexistent(self):
|
|
test_file = 'file_that_doesnt_exist'
|
|
with self.assertRaises(FileNotFoundError):
|
|
make_repo.extract_blinfo(self.addon_path / test_file)
|
|
|
|
# def test_make_repo_valid(self):
|
|
# reference_repo = make_repo.make_repo(self.helper_path / 'addons', "test repo")
|
|
# repojson = Path.cwd() / 'repo.json'
|
|
# reference_repojson = self.helper_path / 'repo.json'
|
|
#
|
|
# try:
|
|
# with repojson.open('r') as repolist_f:
|
|
# with reference_repojson.open('r') as ref_repolist_f:
|
|
# repolist = json.loads(repolist_f.read())
|
|
# ref_repolist = json.loads(ref_repolist_f.read())
|
|
# self.assertEqual(repolist, ref_repolist)
|
|
# finally:
|
|
# # repojson.unlink()
|
|
# pass
|
|
|
|
def test_package_quantity(self):
|
|
repo = make_repo.make_repo(self.addon_path, "name of the repo")
|
|
acceptible_addons = [
|
|
f for f in self.addon_path.iterdir()
|
|
if not f.match('*nonaddon*')
|
|
]
|
|
self.assertEqual(len(repo.packages), len(acceptible_addons))
|
|
|
|
def test_make_repo_from_nonexistent(self):
|
|
with self.assertRaises(FileNotFoundError):
|
|
make_repo.make_repo(Path('in_a_galaxy_far_far_away'), "somename")
|
|
|
|
# addons which should contain bl_infos
|
|
yes_blinfo = [
|
|
f for f in test_make_repo.addon_path.iterdir()
|
|
if not f.match('*nonaddon*') and not f.match('*invalid_addon*')
|
|
]
|
|
# addons which should throw BadAddon because they have no blinfo
|
|
no_blinfo = [
|
|
f for f in test_make_repo.addon_path.iterdir()
|
|
if f.match('*nonaddon*')
|
|
]
|
|
|
|
def generate_good_blinfo_test(test_file: Path):
|
|
def test(self):
|
|
reality = make_repo.extract_blinfo(test_file)
|
|
with (self.helper_path / 'expected_blinfo').open("r") as f:
|
|
expectation = ast.literal_eval(f.read())
|
|
self.assertEqual(expectation, reality)
|
|
return test
|
|
|
|
def generate_bad_blinfo_test(test_file: Path):
|
|
def test(self):
|
|
with self.assertRaises(make_repo.BadAddon):
|
|
make_repo.extract_blinfo(test_file)
|
|
return test
|
|
|
|
# Add test method retur
|
|
def add_generated_tests(test_generator, params, destclass):
|
|
"""
|
|
Add a test method (as returned by 'test_generator') to destclass for every param
|
|
"""
|
|
for param in params:
|
|
test_func = test_generator(param)
|
|
setattr(destclass, 'test_{}'.format(param), test_func)
|
|
|
|
add_generated_tests(generate_good_blinfo_test, yes_blinfo, test_make_repo)
|
|
add_generated_tests(generate_bad_blinfo_test, no_blinfo, test_make_repo)
|
|
|