Merge "Check python3 support when running tox"
[functest.git] / functest / tests / unit / core / test_pytest_suite_runner.py
index 07ac790..f317cde 100644 (file)
@@ -20,29 +20,71 @@ class PyTestSuiteRunnerTesting(unittest.TestCase):
 
     def setUp(self):
         self.psrunner = pytest_suite_runner.PyTestSuiteRunner()
-        self.result = mock.Mock()
-        attrs = {'errors': [('test1', 'error_msg1')],
-                 'failures': [('test2', 'failure_msg1')]}
-        self.result.configure_mock(**attrs)
-
-        self.pass_results = mock.Mock()
-        attrs = {'errors': None,
-                 'failures': None}
-        self.pass_results.configure_mock(**attrs)
-
-    def test_run(self):
-        self.psrunner.case_name = 'test_case_name'
+
+    @mock.patch('unittest.TestLoader')
+    def _test_run(self, mock_class=None, result=mock.Mock(),
+                  status=testcase.TestCase.EX_OK):
         with mock.patch('functest.core.pytest_suite_runner.'
                         'unittest.TextTestRunner.run',
-                        return_value=self.result):
-            self.assertEqual(self.psrunner.run(),
-                             testcase.TestCase.EX_OK)
+                        return_value=result):
+            self.assertEqual(self.psrunner.run(), status)
+            mock_class.assert_not_called()
+
+    def test_check_suite_null(self):
+        self.assertEqual(self.psrunner.suite, None)
+
+    def test_run_no_ut(self):
+        mock_result = mock.Mock(testsRun=0, errors=[], failures=[])
+        self._test_run(result=mock_result,
+                       status=testcase.TestCase.EX_RUN_ERROR)
+        self.assertEqual(self.psrunner.result, 0)
+        self.assertEqual(self.psrunner.details, {'errors': [], 'failures': []})
+        self.assertEqual(self.psrunner.is_successful(),
+                         testcase.TestCase.EX_TESTCASE_FAILED)
+
+    def test_run_result_ko(self):
+        self.psrunner.criteria = 100
+        mock_result = mock.Mock(testsRun=50, errors=[('test1', 'error_msg1')],
+                                failures=[('test2', 'failure_msg1')])
+        self._test_run(result=mock_result)
+        self.assertEqual(self.psrunner.result, 96)
+        self.assertEqual(self.psrunner.details,
+                         {'errors': [('test1', 'error_msg1')],
+                          'failures': [('test2', 'failure_msg1')]})
+        self.assertEqual(self.psrunner.is_successful(),
+                         testcase.TestCase.EX_TESTCASE_FAILED)
+
+    def test_run_result_ok(self):
+        mock_result = mock.Mock(testsRun=50, errors=[],
+                                failures=[])
+        self._test_run(result=mock_result)
+        self.assertEqual(self.psrunner.result, 100)
+        self.assertEqual(self.psrunner.details, {'errors': [], 'failures': []})
+        self.assertEqual(self.psrunner.is_successful(),
+                         testcase.TestCase.EX_OK)
+
+    @mock.patch('unittest.TestLoader')
+    def test_run_name_exc(self, mock_class=None):
+        mock_obj = mock.Mock(side_effect=ImportError)
+        mock_class.side_effect = mock_obj
+        self.assertEqual(self.psrunner.run(name='foo'),
+                         testcase.TestCase.EX_RUN_ERROR)
+        mock_class.assert_called_once_with()
+        mock_obj.assert_called_once_with()
 
+    @mock.patch('unittest.TestLoader')
+    def test_run_name(self, mock_class=None):
+        mock_result = mock.Mock(testsRun=50, errors=[],
+                                failures=[])
+        mock_obj = mock.Mock()
+        mock_class.side_effect = mock_obj
         with mock.patch('functest.core.pytest_suite_runner.'
                         'unittest.TextTestRunner.run',
-                        return_value=self.pass_results):
-            self.assertEqual(self.psrunner.run(),
+                        return_value=mock_result):
+            self.assertEqual(self.psrunner.run(name='foo'),
                              testcase.TestCase.EX_OK)
+        mock_class.assert_called_once_with()
+        mock_obj.assert_called_once_with()
 
 
 if __name__ == "__main__":