summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dovetail/cli/commands/cli_testcase.py2
-rw-r--r--dovetail/tests/unit/cli/__init__.py0
-rw-r--r--dovetail/tests/unit/cli/commands/__init__.py0
-rw-r--r--dovetail/tests/unit/cli/commands/test_cli_testcase.py228
-rw-r--r--dovetail/tests/unit/cli/test_cli_base.py55
5 files changed, 284 insertions, 1 deletions
diff --git a/dovetail/cli/commands/cli_testcase.py b/dovetail/cli/commands/cli_testcase.py
index 3ae76c22..e91d88eb 100644
--- a/dovetail/cli/commands/cli_testcase.py
+++ b/dovetail/cli/commands/cli_testcase.py
@@ -51,7 +51,7 @@ class CliTestcase(object):
else:
testsuite_json = Testsuite.get_all()
if testsuite_json:
- for key, value in testsuite_json.items():
+ for key in testsuite_json.keys():
click.echo("--------------------------")
click.echo("Test Suite {}".format(key))
click.echo("--------------------------")
diff --git a/dovetail/tests/unit/cli/__init__.py b/dovetail/tests/unit/cli/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/dovetail/tests/unit/cli/__init__.py
diff --git a/dovetail/tests/unit/cli/commands/__init__.py b/dovetail/tests/unit/cli/commands/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/dovetail/tests/unit/cli/commands/__init__.py
diff --git a/dovetail/tests/unit/cli/commands/test_cli_testcase.py b/dovetail/tests/unit/cli/commands/test_cli_testcase.py
new file mode 100644
index 00000000..2a1feb64
--- /dev/null
+++ b/dovetail/tests/unit/cli/commands/test_cli_testcase.py
@@ -0,0 +1,228 @@
+#!/usr/bin/env python
+#
+# Copyright (c) 2018 mokats@intracom-telecom.com and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##
+
+import io
+import unittest
+from mock import patch, call, Mock
+import yaml
+
+from dovetail import constants
+from dovetail.cli.commands.cli_testcase import CliTestcase
+
+__author__ = 'Stamatis Katsaounis <mokats@intracom-telecom.com>'
+
+
+class CliTestcaseTesting(unittest.TestCase):
+
+ @patch('os.path')
+ @patch('os.pardir')
+ @patch('dovetail.cli.commands.cli_testcase.dt_utils')
+ def test_run(self, mock_utils, mock_pardir, mock_path):
+ run_args = ('arga', 'argb')
+ options = ' '.join(run_args)
+ repo_dir = 'repo_dir'
+ mock_path.abspath.return_value = repo_dir
+
+ testcase = CliTestcase()
+ testcase.run(options)
+
+ mock_path.dirname.assert_called_once()
+ cmd = 'python %s/run.py %s' % (repo_dir, options)
+ mock_utils.exec_cmd.assert_called_once_with(
+ cmd, exit_on_error=True, exec_msg_on=False, info=True)
+
+ @patch('dovetail.cli.commands.cli_testcase.constants')
+ @patch('os.path')
+ @patch('dovetail.cli.commands.cli_testcase.click')
+ def test_show_testcase_not_exist(self, mock_click, mock_path,
+ mock_constants):
+ testcase_name = 'name'
+ testcase_path = 'path'
+ mock_constants.TESTCASE_PATH = 'path'
+ testcase_whole_path = '{}/{}.yaml'.format(testcase_name,
+ testcase_path)
+ mock_path.join.return_value = testcase_whole_path
+ mock_path.isfile.return_value = False
+
+ testcase = CliTestcase()
+ testcase.show_testcase(testcase_name)
+
+ mock_path.join.assert_called_once_with(
+ testcase_path, '{}.yml'.format(testcase_name))
+ mock_path.isfile.assert_called_once_with(testcase_whole_path)
+ mock_click.echo.assert_called_once_with(
+ 'testcase %s not exist or not supported' % testcase_name)
+
+ @patch('__builtin__.open')
+ @patch('dovetail.cli.commands.cli_testcase.constants')
+ @patch('os.path')
+ @patch('dovetail.cli.commands.cli_testcase.click')
+ def test_show_testcase(self, mock_click, mock_path, mock_constants,
+ mock_open):
+ testcase_name = 'name'
+ testcase_path = 'path'
+ mock_constants.TESTCASE_PATH = 'path'
+ testcase_whole_path = '{}/{}.yaml'.format(testcase_name,
+ testcase_path)
+ mock_path.join.return_value = testcase_whole_path
+ mock_path.isfile.return_value = True
+ file_data = u'file data'
+ mock_open.return_value.__enter__.return_value = io.StringIO(file_data)
+
+ testcase = CliTestcase()
+ testcase.show_testcase(testcase_name)
+
+ mock_open.assert_called_once_with(testcase_whole_path, 'r')
+ mock_path.join.assert_called_once_with(
+ testcase_path, '{}.yml'.format(testcase_name))
+ mock_path.isfile.assert_called_once_with(testcase_whole_path)
+ mock_click.echo.assert_called_once_with(file_data)
+
+ @patch('__builtin__.open')
+ @patch('dovetail.cli.commands.cli_testcase.constants')
+ @patch('os.path')
+ @patch('dovetail.cli.commands.cli_testcase.click')
+ def test_show_testcase_exception(self, mock_click, mock_path,
+ mock_constants, mock_open):
+ testcase_name = 'name'
+ testcase_path = 'path'
+ mock_constants.TESTCASE_PATH = 'path'
+ testcase_whole_path = '{}/{}.yaml'.format(testcase_name,
+ testcase_path)
+ mock_path.join.return_value = testcase_whole_path
+ mock_path.isfile.return_value = True
+ file_obj = Mock()
+ mock_open.return_value.__enter__.return_value = file_obj
+ exception = yaml.YAMLError()
+ file_obj.read.side_effect = exception
+
+ testcase = CliTestcase()
+ testcase.show_testcase(testcase_name)
+
+ mock_open.assert_called_once_with(testcase_whole_path, 'r')
+ mock_path.join.assert_called_once_with(
+ testcase_path, '{}.yml'.format(testcase_name))
+ mock_path.isfile.assert_called_once_with(testcase_whole_path)
+ mock_click.echo.assert_called_once_with(exception)
+
+ @patch.object(CliTestcase, 'testsuite_load')
+ @patch.object(CliTestcase, 'list_one_testsuite')
+ def test_list_suites_single(self, mock_list_one, mock_load):
+ testsuite = 'suite'
+
+ testcase = CliTestcase()
+ testcase.list_testsuites(testsuite)
+
+ mock_load.assert_called_once_with()
+ mock_list_one.assert_called_once_with(testsuite)
+
+ @patch.object(CliTestcase, 'testsuite_load')
+ @patch('dovetail.cli.commands.cli_testcase.click')
+ @patch('dovetail.testcase.Testsuite.get_all')
+ def test_list_suites_no_suites(self, mock_get_all, mock_click, mock_load):
+ testsuite = None
+ mock_get_all.return_value = None
+
+ testcase = CliTestcase()
+ testcase.list_testsuites(testsuite)
+
+ mock_load.assert_called_once_with()
+ mock_get_all.assert_called_once_with()
+ mock_click.echo.assert_called_once_with(
+ 'No testsuite defined yet in dovetail!!!')
+
+ @patch.object(CliTestcase, 'testsuite_load')
+ @patch.object(CliTestcase, 'list_one_testsuite')
+ @patch('dovetail.cli.commands.cli_testcase.click')
+ @patch('dovetail.testcase.Testsuite.get_all')
+ def test_list_suites_many(self, mock_get_all, mock_click, mock_list_one,
+ mock_load):
+ testsuite = None
+ suite_name = 'suite'
+ mock_get_all.return_value = {suite_name: 'A'}
+
+ testcase = CliTestcase()
+ testcase.list_testsuites(testsuite)
+
+ mock_load.assert_called_once_with()
+ mock_get_all.assert_called_once_with()
+ mock_click.echo.assert_has_calls([
+ call('--------------------------'),
+ call('Test Suite {}'.format(suite_name)),
+ call('--------------------------')])
+ mock_list_one.assert_called_once_with(suite_name)
+
+ @patch('dovetail.cli.commands.cli_testcase.click')
+ @patch('dovetail.testcase.Testsuite.get')
+ def test_list_one_testsuite_not_exist(self, mock_get, mock_click):
+ testsuite = 'suite'
+ mock_get.return_value = None
+
+ testcase = CliTestcase()
+ testcase.list_one_testsuite(testsuite)
+
+ mock_get.assert_called_once_with(testsuite)
+ mock_click.echo.assert_called_once_with(
+ 'testsuite {} does not exist'.format(testsuite))
+
+ @patch('dovetail.cli.commands.cli_testcase.click')
+ @patch('dovetail.testcase.Testsuite.get')
+ @patch('dovetail.cli.commands.cli_testcase.dt_utils')
+ def test_list_one_testsuite(self, mock_utils, mock_get, mock_click):
+ testsuite = 'suite'
+ testsuite_obj = Mock()
+ mock_get.return_value = testsuite_obj
+ testcase_a = 'testcaseA'
+ testcase_b = 'testcaseB'
+ mock_utils.get_value_from_dict.side_effect = [
+ [testcase_a], [testcase_b]]
+
+ testcase = CliTestcase()
+ testcase.list_one_testsuite(testsuite)
+
+ mock_get.assert_called_once_with(testsuite)
+ mock_utils.get_value_from_dict.assert_has_calls([
+ call('testcases_list.mandatory', testsuite_obj),
+ call('testcases_list.optional', testsuite_obj)])
+ mock_click.echo.assert_has_calls([
+ call('- mandatory'),
+ call(' {}'.format(testcase_a)),
+ call('- optional'),
+ call(' {}'.format(testcase_b))])
+
+ @patch('dovetail.cli.commands.cli_testcase.click')
+ @patch('dovetail.testcase.Testsuite.get')
+ @patch('dovetail.cli.commands.cli_testcase.dt_utils')
+ def test_list_one_testsuite_no_testcases(self, mock_utils, mock_get,
+ mock_click):
+ testsuite = 'suite'
+ testsuite_obj = Mock()
+ mock_get.return_value = testsuite_obj
+ mock_utils.get_value_from_dict.return_value = []
+
+ testcase = CliTestcase()
+ testcase.list_one_testsuite(testsuite)
+
+ mock_get.assert_called_once_with(testsuite)
+ mock_utils.get_value_from_dict.assert_has_calls([
+ call('testcases_list.mandatory', testsuite_obj),
+ call('testcases_list.optional', testsuite_obj)])
+ mock_click.echo.assert_called_once_with(
+ 'No testcase in testsuite {}'.format(testsuite))
+
+ @patch('dovetail.cli.commands.cli_testcase.dt_cfg')
+ @patch('dovetail.testcase.Testsuite.load')
+ @patch.object(constants, 'CONF_PATH')
+ def test_testsuite_load(self, mock_path, mock_load, mock_config):
+ testcase = CliTestcase()
+ testcase.testsuite_load()
+
+ mock_config.load_config_files.assert_called_once_with(mock_path)
+ mock_load.assert_called_once_with()
diff --git a/dovetail/tests/unit/cli/test_cli_base.py b/dovetail/tests/unit/cli/test_cli_base.py
new file mode 100644
index 00000000..80b7e7b3
--- /dev/null
+++ b/dovetail/tests/unit/cli/test_cli_base.py
@@ -0,0 +1,55 @@
+#!/usr/bin/env python
+#
+# Copyright (c) 2018 mokats@intracom-telecom.com and others.
+#
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##
+
+import unittest
+from mock import patch
+
+from click.testing import CliRunner
+from dovetail.cli import cli_base
+
+__author__ = 'Stamatis Katsaounis <mokats@intracom-telecom.com>'
+
+
+@patch.object(cli_base, '_testcase')
+class CliBaseTesting(unittest.TestCase):
+
+ def test_cli(self, mock_testcase):
+ runner = CliRunner()
+ result = runner.invoke(cli_base.cli, [])
+
+ self.assertEquals(result.exit_code, 0)
+
+ def test_testcase_list(self, mock_testcase):
+ testsuite = 'suite'
+
+ runner = CliRunner()
+ result = runner.invoke(cli_base.testcase_list, [testsuite])
+
+ mock_testcase.list_testsuites.assert_called_once_with(testsuite)
+ self.assertEquals(result.exit_code, 0)
+
+ def test_testcase_show(self, mock_testcase):
+ testcase = 'case'
+
+ runner = CliRunner()
+ result = runner.invoke(cli_base.testcase_show, [testcase])
+
+ mock_testcase.show_testcase.assert_called_once_with(testcase)
+ self.assertEquals(result.exit_code, 0)
+
+ def test_testcase_run(self, mock_testcase):
+ run_args = ('arga', 'argb')
+
+ runner = CliRunner()
+ result = runner.invoke(cli_base.testcase_run, run_args)
+
+ expected = ' '.join(run_args)
+ mock_testcase.run.assert_called_once_with(expected)
+ self.assertEquals(result.exit_code, 0)