From 15678b114bf5392edd96775b401d169b9a7f5234 Mon Sep 17 00:00:00 2001 From: Michal Konečný Date: Aug 20 2021 14:05:13 +0000 Subject: Fix tests After migration from fedora.client to fasjson_client library the tests started to crash. This commit mocks the fasjson_client to let the tests pass + fixing few other issues in tests. Signed-off-by: Michal Konečný --- diff --git a/fedscm_admin/fas.py b/fedscm_admin/fas.py index 35fb33f..76246e1 100644 --- a/fedscm_admin/fas.py +++ b/fedscm_admin/fas.py @@ -18,7 +18,7 @@ Provides helper functions for FAS from __future__ import absolute_import import fasjson_client -from fedora.client import AccountSystem, AuthError +from fedora.client import AuthError from click import ClickException from fedscm_admin import CONFIG diff --git a/tests/test_admin.py b/tests/test_admin.py index 9958dc9..7e75e58 100644 --- a/tests/test_admin.py +++ b/tests/test_admin.py @@ -19,11 +19,10 @@ from __future__ import absolute_import from unittest import TestCase from click.testing import CliRunner -from mock import patch, Mock +from mock import patch, MagicMock, Mock import tests.mock_values as mock_values - def get_latest_fedora_branch(slas): for branch in slas.keys(): if branch.startswith('f'): @@ -32,41 +31,18 @@ def get_latest_fedora_branch(slas): class FedScmAdmin(TestCase): + def setUp(self): - self.mock_fas_patcher = patch('fedora.client.AccountSystem') - self.mock_fas = self.mock_fas_patcher.start() - mock_fas_account_system = Mock() - mock_fas_account_system._AccountSystem__alternate_email = \ - {'email@domain.com': 123204} - mock_fas_account_system.person_by_id.return_value = { - 'username': 'akhairna', - 'group_roles': { - 'factory2': { - 'role_status': 'approved', - 'sponsor_id': 112617, - 'person_id': 21008, - 'approval': '2016-09-23 18:48:35.556056+00:00', - 'group_id': 100301, - 'role_type': 'user' - }, - 'packager': { - 'internal_comments': None, - 'role_status': 'approved', - 'creation': '2017-06-28 17:10:55.065315+00:00', - 'sponsor_id': 146058, - 'person_id': 21008, - 'approval': '2017-06-28 17:11:02.618607+00:00', - 'group_id': 100300, - 'role_type': 'user' - } - } - } - mock_people_query = Mock() - mock_people_query.id = 21008 - mock_fas_account_system.people_query.return_value = \ - [mock_people_query] - mock_fas_account_system.verify_credentials.return_value = True - self.mock_fas.return_value = mock_fas_account_system + mock_fasjson_client = MagicMock() + mock_fasjson_client.verify_password.return_value = True + mock_fasjson_client.search().result = [{"username": "akhairna"}] + + self.mock_fasjson_patcher = patch('fasjson_client.Client') + self.mock_fasjson = self.mock_fasjson_patcher.start() + + from fedscm_admin import FAS_CLIENT + + FAS_CLIENT.client = mock_fasjson_client self.mock_git_patcher = patch('fedscm_admin.git.GitRepo') self.mock_git = self.mock_git_patcher.start() @@ -83,9 +59,9 @@ class FedScmAdmin(TestCase): def tearDown(self): self.mock_bz_patcher.stop() - self.mock_fas_patcher.stop() self.mock_git_obj.reset_mock() self.mock_git_patcher.stop() + self.mock_fasjson_patcher.stop() @patch('fedscm_admin.request_utils.retry_session') def test_fedscm_admin_list(self, mock_retry_session): @@ -125,6 +101,7 @@ class FedScmAdmin(TestCase): for a repo with a non-standard branch """ from fedscm_admin.fedscm_admin import cli as fedscm_admin_cli + from fedscm_admin import config mock_session = Mock() mock_rv = Mock() mock_rv.ok = True @@ -144,10 +121,14 @@ class FedScmAdmin(TestCase): mock_session.post.return_value = mock_rv mock_session.patch.return_value = mock_rv mock_retry_session.return_value = mock_session - runner = CliRunner() - result = runner.invoke( - fedscm_admin_cli, ['process', '2'], - input='mprahl\n12345\nmprahl\n12345\napprove\nn\n') + + with patch.object(config, 'get_config_item') as mock_get_config_item: + mock_get_config_item.return_value = False + runner = CliRunner() + result = runner.invoke( + fedscm_admin_cli, ['process', '2'], + input='mprahl\n12345\nmprahl\n12345\napprove\nn\n') + assert result.exit_code == 0 assert result.output.count('- Adding comment to Pagure issue') == 1 assert result.output.count('- Adding comment to rhbz#') == 1 @@ -766,6 +747,8 @@ class FedScmAdmin(TestCase): """ from fedscm_admin.fedscm_admin import cli as fedscm_admin_cli from fedscm_admin import STANDARD_BRANCH_SLAS + from fedscm_admin import config + mock_session = Mock() mock_rv = Mock() mock_rv.ok = True @@ -795,16 +778,19 @@ class FedScmAdmin(TestCase): mock_session.post.return_value = mock_rv mock_session.patch.return_value = mock_rv mock_retry_session.return_value = mock_session - runner = CliRunner() - result = runner.invoke( - fedscm_admin_cli, ['processall'], - input='mprahl\n12345\nmprahl\n12345\napprove\nn\napprove\nn\n') + + with patch.object(config, 'get_config_item') as mock_get_config_item: + mock_get_config_item.return_value = False + runner = CliRunner() + result = runner.invoke( + fedscm_admin_cli, ['processall'], + input='mprahl\n12345\nmprahl\n12345\napprove\napprove\n') assert result.exit_code == 0 assert 'New Branch "abc" for "rpms/nethack"' in result.output assert 'New Repo for "rpms/nethack"' in result.output assert 'All done!' in result.output # One for getting the inital commit - assert self.mock_git_obj.clone_repo.call_count == 0 + assert self.mock_git_obj.clone_repo.call_count == 1 @patch('fedscm_admin.utils.get_project_default_branch', return_value='rawhide') @patch('fedscm_admin.utils.verify_slas', return_value=None) @@ -877,14 +863,19 @@ class FedScmAdmin(TestCase): def test_fas_bad_password(self, mock_retry_session): from fedscm_admin.fedscm_admin import cli as fedscm_admin_cli from fedscm_admin import FAS_CLIENT + from fedscm_admin import config + mock_session = Mock() mock_session.get.side_effect = [ mock_values.get_mock_issue_rv( 'abc', sla={'security_fixes': '2025-12-01'})] mock_retry_session.return_value = mock_session - with patch.object(FAS_CLIENT.client, 'verify_password') as mock_verify: - mock_verify.return_value = False + # fasjson_client.Client is already mocked in setup, no need to mock it again + FAS_CLIENT.client.verify_password.return_value = False + + with patch.object(config, 'get_config_item') as mock_get_config_item: + mock_get_config_item.return_value = False runner = CliRunner() result = runner.invoke( fedscm_admin_cli, ['process', '2'], @@ -1048,8 +1039,9 @@ class FedScmAdmin(TestCase): fedscm_admin_cli, ['process', '2'], input='mprahl\n12345\nmprahl\n12345\nn\n') assert result.exit_code == 0 - error = ('The Bugzilla bug\'s review ' - 'is approved by a user that is ' - 'not a packager') - assert error in result.output + errors = ["The Bugzilla bug's review ", + "is approved by a user", + "that is not a packager"] + for error in errors: + assert error in result.output assert self.mock_git_obj.clone_repo.call_count == 0 diff --git a/tests/test_general.py b/tests/test_general.py index 3f2b97a..e452cee 100644 --- a/tests/test_general.py +++ b/tests/test_general.py @@ -29,7 +29,9 @@ import tests.mock_values as mock_values class TestGeneral(TestCase): - def setUp(self): + + @patch('fasjson_client.Client') + def setUp(self, mock_fas): import fedscm_admin.bugzilla self.mock_bz_patcher = patch.object( fedscm_admin.bugzilla.BugzillaClient, 'client',