diff --git a/subunit2sql/shell.py b/subunit2sql/shell.py index 019c027..ded1544 100644 --- a/subunit2sql/shell.py +++ b/subunit2sql/shell.py @@ -69,12 +69,12 @@ def running_avg(test, values, result): return values -def increment_counts(run, test, results, session): +def increment_counts(test, results): test_values = {'run_count': test.run_count + 1} status = results.get('status') - run = api.get_run_by_id(run.id, session) if status == 'success': test_values['success'] = test.success + 1 + test_values = running_avg(test, test_values, results) elif status == 'fail': test_values['failure'] = test.failure + 1 elif status == 'skip': @@ -82,7 +82,6 @@ def increment_counts(run, test, results, session): else: msg = "Unknown test status %s" % status raise exceptions.UnknownStatus(msg) - test_values = running_avg(test, test_values, results) return test_values @@ -125,8 +124,7 @@ def process_results(results): fails, run_time, session) else: - test_values = increment_counts(db_run, db_test, results[test], - session) + test_values = increment_counts(db_test, results[test]) # If skipped nothing to update if test_values: api.update_test(test_values, db_test.id, session) diff --git a/subunit2sql/tests/test_shell.py b/subunit2sql/tests/test_shell.py index d02c0b1..d0add1a 100644 --- a/subunit2sql/tests/test_shell.py +++ b/subunit2sql/tests/test_shell.py @@ -17,6 +17,7 @@ import datetime import mock +from subunit2sql import exceptions from subunit2sql import shell from subunit2sql.tests import base @@ -68,3 +69,64 @@ class TestShell(base.TestCase): result = shell.running_avg(fake_test, fake_values, fake_result) expected_avg = 50 self.assertEqual(expected_avg, result['run_time']) + + def test_increment_counts_success(self): + fake_test = mock.MagicMock() + fake_test.run_count = 15 + fake_test.success = 5 + fake_test.run_time = 45.0 + fake_result = { + 'status': 'success', + 'start_time': datetime.datetime(1914, 6, 28, 10, 45, 0), + 'end_time': datetime.datetime(1914, 6, 28, 10, 45, 50), + } + values = shell.increment_counts(fake_test, fake_result) + # Check to ensure counts incrememented properly + self.assertEqual(values['run_count'], 16) + self.assertEqual(values['success'], 6) + # Ensure run_time is updated on success + expected_avg = ((5 * 45.0) + 50) / 6 + self.assertEqual(values['run_time'], expected_avg) + + def test_increment_counts_failure(self): + fake_test = mock.MagicMock() + fake_test.run_count = 15 + fake_test.success = 5 + fake_test.failure = 10 + fake_test.run_time = 45.0 + fake_result = { + 'status': 'fail', + 'start_time': datetime.datetime(1914, 6, 28, 10, 45, 0), + 'end_time': datetime.datetime(1914, 6, 28, 10, 45, 50), + } + values = shell.increment_counts(fake_test, fake_result) + # Check to ensure counts incrememented properly + self.assertEqual(values['run_count'], 16) + self.assertEqual(values['failure'], 11) + # Avg runtime should only be updated on success + self.assertNotIn('run_time', values) + + def test_increment_counts_skip(self): + fake_test = mock.MagicMock() + fake_test.run_count = 15 + fake_test.success = 5 + fake_test.failure = 10 + fake_test.run_time = 45.0 + fake_result = { + 'status': 'skip', + 'start_time': datetime.datetime(1914, 6, 28, 10, 45, 0), + 'end_time': datetime.datetime(1914, 6, 28, 10, 45, 2), + } + values = shell.increment_counts(fake_test, fake_result) + # No test counts incrememented with a skip + self.assertEqual(values, {}) + + def test_increment_counts_unknown_status(self): + fake_test = mock.MagicMock() + fake_result = { + 'status': 'explody', + 'start_time': datetime.datetime(1914, 6, 28, 10, 45, 0), + 'end_time': datetime.datetime(1914, 6, 28, 10, 45, 2), + } + self.assertRaises(exceptions.UnknownStatus, + shell.increment_counts, fake_test, fake_result)