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)