From 6de3bbdaf4df9154b45becec0a89bde8b7dc0588 Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Sun, 26 Jun 2022 00:15:05 +0200 Subject: [PATCH] Added tests for run command --- unittests/unittests_cli/cli_test_suite.py | 11 ++- unittests/unittests_cli/run_test_case.py | 89 +++++++++++++++++++++- unittests/unittests_shared/cli_commands.py | 28 ++++--- 3 files changed, 111 insertions(+), 17 deletions(-) diff --git a/unittests/unittests_cli/cli_test_suite.py b/unittests/unittests_cli/cli_test_suite.py index cac0af7d..f0242a88 100644 --- a/unittests/unittests_cli/cli_test_suite.py +++ b/unittests/unittests_cli/cli_test_suite.py @@ -13,6 +13,7 @@ from unittests_cli.install_test_case import InstallTestCase from unittests_cli.new_test_case import NewTestCase from unittests_cli.publish_test_case import PublishTestCase from unittests_cli.remove_test_case import RemoveTestCase +from unittests_cli.run_test_case import RunTestCase from unittests_cli.uninstall_test_case import UninstallTestCase from unittests_cli.update_test_case import UpdateTestCase @@ -24,6 +25,7 @@ class CLITestSuite(unittest.TestSuite): loader = unittest.TestLoader() self._result: Optional[TestResult] = None + self._is_online = True active_tests = [ # nothing needed @@ -33,13 +35,10 @@ class CLITestSuite(unittest.TestSuite): # VersionTestCase, # project needed BuildTestCase, - InstallTestCase, PublishTestCase, - # check if application was executed properly - # RunTestCase, + RunTestCase, # check if application was executed properly and file watcher is working # StartTestCase, - UninstallTestCase, # check in project settings if package is updated # UpdateTestCase, # workspace needed @@ -47,6 +46,10 @@ class CLITestSuite(unittest.TestSuite): RemoveTestCase ] + if self._is_online: + active_tests.append(InstallTestCase) + active_tests.append(UninstallTestCase) + for test in active_tests: self.addTests(loader.loadTestsFromTestCase(test)) diff --git a/unittests/unittests_cli/run_test_case.py b/unittests/unittests_cli/run_test_case.py index 7ace1dd2..1d86b68d 100644 --- a/unittests/unittests_cli/run_test_case.py +++ b/unittests/unittests_cli/run_test_case.py @@ -1,10 +1,91 @@ +import json +import os +import shutil +import subprocess +import sys import unittest +import pkg_resources + +from cpl_core.utils import String + +from unittests_cli.constants import PLAYGROUND_PATH +from unittests_shared.cli_commands import CLICommands + class RunTestCase(unittest.TestCase): - def setUp(self): - pass + def __init__(self, methodName: str): + unittest.TestCase.__init__(self, methodName) + self._source = 'run-test' + self._project_file = f'src/{String.convert_to_snake_case(self._source)}/{self._source}.json' + self._appsettings = f'src/{String.convert_to_snake_case(self._source)}/appsettings.json' + self._application = f'src/{String.convert_to_snake_case(self._source)}/application.py' + self._test_code = f""" + import json + settings = dict() + with open('appsettings.json', 'r', encoding='utf-8') as cfg: + # load json + settings = json.load(cfg) + cfg.close() + + settings['RunTest']['WasStarted'] = 'True' + + with open('appsettings.json', 'w', encoding='utf-8') as project_file: + project_file.write(json.dumps(settings, indent=2)) + project_file.close() + """ - def test_equal(self): - pass + def _get_appsettings(self): + with open(os.path.join(os.getcwd(), self._appsettings), 'r', encoding='utf-8') as cfg: + # load json + project_json = json.load(cfg) + cfg.close() + + return project_json + + def _save_appsettings(self, settings: dict): + with open(os.path.join(os.getcwd(), self._appsettings), 'w', encoding='utf-8') as project_file: + project_file.write(json.dumps(settings, indent=2)) + project_file.close() + + def setUp(self): + os.chdir(os.path.abspath(PLAYGROUND_PATH)) + # create projects + CLICommands.new('console', self._source, '--ab', '--s') + os.chdir(os.path.join(os.getcwd(), self._source)) + settings = {'RunTest': {'WasStarted': 'False'}} + self._save_appsettings(settings) + with open(os.path.join(os.getcwd(), self._application), 'a', encoding='utf-8') as file: + file.write(f'\t\t{self._test_code}') + file.close() + + def cleanUp(self): + # remove projects + if not os.path.exists(os.path.abspath(os.path.join(PLAYGROUND_PATH, self._source))): + return + + shutil.rmtree(os.path.abspath(os.path.join(PLAYGROUND_PATH, self._source))) + + def test_run(self): + CLICommands.run() + settings = self._get_appsettings() + self.assertNotEqual(settings, {}) + self.assertIn('RunTest', settings) + self.assertIn('WasStarted', settings['RunTest']) + self.assertEqual( + 'True', + settings['RunTest']['WasStarted'] + ) + + def test_run_by_project(self): + os.chdir(os.path.join(os.getcwd())) + CLICommands.run(self._source) + settings = self._get_appsettings() + self.assertNotEqual(settings, {}) + self.assertIn('RunTest', settings) + self.assertIn('WasStarted', settings['RunTest']) + self.assertEqual( + 'True', + settings['RunTest']['WasStarted'] + ) diff --git a/unittests/unittests_shared/cli_commands.py b/unittests/unittests_shared/cli_commands.py index e685a73e..4a2d38e2 100644 --- a/unittests/unittests_shared/cli_commands.py +++ b/unittests/unittests_shared/cli_commands.py @@ -15,15 +15,18 @@ class CLICommands: for arg in args: command.append(arg) - subprocess.run(command, env=env_vars) + if output: + subprocess.run(command, env=env_vars) + else: + subprocess.run(command, env=env_vars, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) @classmethod - def add(cls, source: str, target: str): - cls._run('add', source, target) + def add(cls, source: str, target: str, output=False): + cls._run('add', source, target, output=output) @classmethod - def build(cls): - cls._run('build') + def build(cls, output=False): + cls._run('build', output=output) @classmethod def generate(cls, schematic: str, name: str, output=False): @@ -42,12 +45,19 @@ class CLICommands: cls._run('new', project_type, name, *args, output=output) @classmethod - def publish(cls): - cls._run('publish') + def publish(cls, output=False): + cls._run('publish', output=output) @classmethod - def remove(cls, project: str): - cls._run('remove', project) + def remove(cls, project: str, output=False): + cls._run('remove', project, output=output) + + @classmethod + def run(cls, project: str = None, output=False): + if project is None: + cls._run('run', output=output) + return + cls._run('run', project, output=output) @classmethod def uninstall(cls, package: str, output=False):