import pkgutil import platform import sys import textwrap import unittest import pkg_resources from art import text2art from tabulate import tabulate import cpl_cli from cpl_core.console import ForegroundColorEnum from termcolor import colored from unittests_cli.abc.command_test_case import CommandTestCase from unittests_shared.cli_commands import CLICommands class VersionTestCase(CommandTestCase): def __init__(self, method_name: str): CommandTestCase.__init__(self, method_name) self._block_banner = "" self._block_version = "" self._block_package_header = "" self._block_cpl_packages = "" self._block_packages = "" self._name = "CPL CLI" def setUp(self): pass def _get_version_output(self, version: str): index = 0 for line in version.split('\n'): if line == "": continue if index <= 5: self._block_banner += f'{line}\n' if 7 <= index <= 9: self._block_version += f'{line}\n' if 10 <= index <= 16: self._block_cpl_packages += f'{line}\n' if index >= 18: self._block_packages += f'{line}\n' index += 1 def test_version(self): packages = [] cpl_packages = [] dependencies = dict(tuple(str(ws).split()) for ws in pkg_resources.working_set) for p in dependencies: if str(p).startswith('cpl-'): cpl_packages.append([p, dependencies[p]]) continue packages.append([p, dependencies[p]]) version = CLICommands.version() self._get_version_output(version) reference_banner = colored(text2art(self._name), ForegroundColorEnum.yellow.value).split('\n') reference_banner = "\n".join(reference_banner[:len(reference_banner) - 1]) + '\n' with self.subTest(msg='Block banner'): self.assertEqual(reference_banner, self._block_banner) reference_version = [ colored(f'{colored("Common Python library CLI: ")}{colored(cpl_cli.__version__)}'), colored(f'{colored("Python: ")}{colored(f"{sys.version_info.major}.{sys.version_info.minor}.{sys.version_info.micro}")}'), colored(f'OS: {colored(f"{platform.system()} {platform.processor()}")}') + '\n' ] with self.subTest(msg='Block version'): self.assertEqual('\n'.join(reference_version), self._block_version) reference_cpl_packages = [ colored(colored(f'CPL packages:')), colored(f'{tabulate(cpl_packages, headers=["Name", "Version"])}') + '\n' ] with self.subTest(msg='Block cpl packages'): self.assertEqual('\n'.join(reference_cpl_packages), self._block_cpl_packages) reference_packages = [ colored(colored(f'Python packages:')), colored(f'{tabulate(packages, headers=["Name", "Version"])}'), '\x1b[0m\x1b[0m\n\x1b[0m\x1b[0m\n\x1b[0m\x1b[0m\n' # fix colored codes ] self.maxDiff = None with self.subTest(msg='Block packages'): ref_packages = '\n'.join(reference_packages) self.assertEqual(ref_packages, self._block_packages)