''' Unit tests for repoquery ''' import os import sys import unittest import mock # Removing invalid variable names for tests so that I can # keep them brief # pylint: disable=invalid-name,no-name-in-module # Disable import-error b/c our libraries aren't loaded in jenkins # pylint: disable=import-error,wrong-import-position # place class in our python path module_path = os.path.join('/'.join(os.path.realpath(__file__).split('/')[:-4]), 'library') # noqa: E501 sys.path.insert(0, module_path) from repoquery import Repoquery # noqa: E402 class RepoQueryTest(unittest.TestCase): ''' Test class for RepoQuery ''' @mock.patch('repoquery._run') def test_querying_a_package(self, mock_cmd): ''' Testing querying a package ''' # Arrange # run_ansible input parameters params = { 'state': 'list', 'name': 'bash', 'query_type': 'repos', 'verbose': False, 'show_duplicates': False, 'match_version': None, } valid_stderr = '''Repo rhel-7-server-extras-rpms forced skip_if_unavailable=True due to: /etc/pki/entitlement/3268107132875399464-key.pem Repo rhel-7-server-rpms forced skip_if_unavailable=True due to: /etc/pki/entitlement/4128505182875899164-key.pem''' # not real # Return values of our mocked function call. These get returned once per call. mock_cmd.side_effect = [ (0, '4.2.46|21.el7_3|x86_64|rhel-7-server-rpms|4.2.46-21.el7_3', valid_stderr), # first call to the mock ] # Act results = Repoquery.run_ansible(params, False) # Assert self.assertEqual(results['state'], 'list') self.assertFalse(results['changed']) self.assertTrue(results['results']['package_found']) self.assertEqual(results['results']['returncode'], 0) self.assertEqual(results['results']['package_name'], 'bash') self.assertEqual(results['results']['versions'], {'latest_full': '4.2.46-21.el7_3', 'available_versions': ['4.2.46'], 'available_versions_full': ['4.2.46-21.el7_3'], 'latest': '4.2.46'}) # Making sure our mock was called as we expected mock_cmd.assert_has_calls([ mock.call(['/usr/bin/repoquery', '--plugins', '--quiet', '--pkgnarrow=repos', '--queryformat=%{version}|%{release}|%{arch}|%{repo}|%{version}-%{release}', 'bash']), ])