diff --git a/tests/test_options.py b/tests/test_options.py new file mode 100644 index 0000000..0102192 --- /dev/null +++ b/tests/test_options.py @@ -0,0 +1,167 @@ +""" +author: deadc0de6 (https://github.com/deadc0de6) +Copyright (c) 2017, deadc0de6 +basic unittest for the install function +""" + +# pylint: disable=R0903 +# pylint: disable=W0231 +# pylint: disable=W0212 + +import os +import unittest +from unittest.mock import patch +from dotdrop.options import Options, Logger + + +class FakeOptions(Options): + """fake Options class""" + + def __init__(self, args): + """init""" + self.args = args + self.log = Logger(debug=True) + + +class TestOptions(unittest.TestCase): + """test case""" + + def clean_setup(self): + """clean stuff""" + if 'DOTDROP_CONFIG' in os.environ: + del os.environ['DOTDROP_CONFIG'] + if 'XDG_CONFIG_HOME' in os.environ: + del os.environ['XDG_CONFIG_HOME'] + + def _get_args(self, more): + args = { + '--dry': False, + '--verbose': True, + '--cfg': '', + } + for k, val in more.items(): + args[k] = val + return args + + def side_effect(self, valid=''): + """side effect for os.path.exists""" + def inner(filename): + print(f'checking if {filename} exists') + if filename == valid: + return True + return False + return inner + + def test_get_path_from_cli(self): + """from --cli""" + self.clean_setup() + expected = 'fakepath' + args = {} + args['--cfg'] = expected + fake = FakeOptions(args) + self.assertEqual(fake._get_config_path(), expected) + + def test_get_path_from_env(self): + """from env""" + self.clean_setup() + expected = 'envpath' + os.environ['DOTDROP_CONFIG'] = expected + args = self._get_args({'--cfg': ''}) + fake = FakeOptions(args) + self.assertEqual(fake._get_config_path(), expected) + + @patch('os.path.exists') + def test_get_path_from_yaml(self, mock_exists): + """from yaml""" + self.clean_setup() + mock_exists.return_value = True + expected = 'config.yaml' + args = self._get_args({'--cfg': ''}) + fake = FakeOptions(args) + self.assertEqual(fake._get_config_path(), expected) + + @patch('os.path.exists') + def test_get_path_from_toml(self, mock_exists): + """from toml""" + self.clean_setup() + expected = 'config.toml' + args = self._get_args({'--cfg': ''}) + mock_exists.side_effect = self.side_effect(valid=expected) + fake = FakeOptions(args) + self.assertEqual(fake._get_config_path(), expected) + + @patch('os.path.exists') + def test_get_path_xdg_yaml(self, mock_exists): + """from xdg""" + self.clean_setup() + home = os.path.expanduser('~/.config') + expected = f'{home}/dotdrop/config.yaml' + mock_exists.side_effect = self.side_effect(valid=expected) + log = Logger(debug=True) + log.dbg(f'expected: {expected}') + args = self._get_args({'--cfg': ''}) + os.environ['XDG_CONFIG_HOME'] = home + fake = FakeOptions(args) + self.assertEqual(fake._get_config_path(), expected) + + @patch('os.path.exists') + def test_get_path_xdg_toml(self, mock_exists): + """from xdg toml""" + self.clean_setup() + home = os.path.expanduser('~/.config') + expected = f'{home}/dotdrop/config.toml' + mock_exists.side_effect = self.side_effect(valid=expected) + log = Logger(debug=True) + log.dbg(f'expected: {expected}') + args = self._get_args({'--cfg': ''}) + os.environ['XDG_CONFIG_HOME'] = home + fake = FakeOptions(args) + self.assertEqual(fake._get_config_path(), expected) + + @patch('os.path.exists') + def test_get_path_fs_yaml(self, mock_exists): + """from fs yaml""" + self.clean_setup() + home = os.path.expanduser('~/.config') + expected = f'{home}/dotdrop/config.toml' + mock_exists.side_effect = self.side_effect(valid=expected) + log = Logger(debug=True) + log.dbg(f'expected: {expected}') + args = self._get_args({'--cfg': ''}) + fake = FakeOptions(args) + self.assertEqual(fake._get_config_path(), expected) + + @patch('os.path.exists') + def test_get_path_fs_xdg(self, mock_exists): + """from fs xdg""" + self.clean_setup() + home = os.path.expanduser('/etc/xdg') + expected = f'{home}/dotdrop/config.toml' + mock_exists.side_effect = self.side_effect(valid=expected) + log = Logger(debug=True) + log.dbg(f'expected: {expected}') + args = self._get_args({'--cfg': ''}) + fake = FakeOptions(args) + self.assertEqual(fake._get_config_path(), expected) + + @patch('os.path.exists') + def test_get_path_fs_etc(self, mock_exists): + """from fs etc""" + self.clean_setup() + home = os.path.expanduser('/etc') + expected = f'{home}/dotdrop/config.toml' + mock_exists.side_effect = self.side_effect(valid=expected) + log = Logger(debug=True) + log.dbg(f'expected: {expected}') + args = self._get_args({'--cfg': ''}) + fake = FakeOptions(args) + self.assertEqual(fake._get_config_path(), expected) + + +def main(): + """entry point""" + unittest.main() + + +if __name__ == '__main__': + main()