From 30670d65088cd81a888a8695303348b97ee6901d Mon Sep 17 00:00:00 2001 From: gryf Date: Sat, 15 May 2021 17:42:05 +0200 Subject: [PATCH] Refactoring, fix tests --- replacer.py | 17 ++++++++--------- test_replacer.py | 35 ++++++++++++++++++++++++++++------- 2 files changed, 36 insertions(+), 16 deletions(-) diff --git a/replacer.py b/replacer.py index f9629af..73422e7 100644 --- a/replacer.py +++ b/replacer.py @@ -64,8 +64,10 @@ class Replacer(object): def __init__(self): """Initialize plugin""" self.replacement_map = {} - self._path = None + self._path = self._locate_replacement_file() + self._get_replacement_map() + def _locate_replacement_file(self): map_file = "replacement_map.json" data_dirs = (weechat.info_get("weechat_data_dir", ""), weechat.info_get("weechat_config_dir", ""), @@ -73,21 +75,18 @@ class Replacer(object): for path in data_dirs: if os.path.exists(os.path.join(path, map_file)): - self._path = os.path.join(path, map_file) - break - - version = weechat.info_get("version_number", "") or 0 + return os.path.join(path, map_file) # nothing found. so there is no replacement file. let's assume the # right file path. if not path: + version = weechat.info_get("version_number", "") or 0 if version < 0x3020000: # < 3.2.0 path = '%h/' + map_file - self.path = weechat.string_eval_path_home(path, {}, {}, {}) + return weechat.string_eval_path_home(path, {}, {}, {}) else: - self.path = os.path.join(weechat.info_get("weechat_data_dir", - ""), map_file) - self._get_replacement_map() + return os.path.join(weechat.info_get("weechat_data_dir", ""), + map_file) def _get_replacement_map(self): """Read json file, and assign it to the replacement_map attr""" diff --git a/test_replacer.py b/test_replacer.py index 90d2926..a9b17e4 100644 --- a/test_replacer.py +++ b/test_replacer.py @@ -4,6 +4,7 @@ import sys import os import unittest +from unittest import mock import tempfile @@ -69,6 +70,12 @@ class Weechat(object): def string_eval_path_home(self, path, pointers, extra_vars, options): return path + def info_get(self, key, args): + _map = {'weechat_data_dir': None, + 'weechat_config_dir': None, + 'version_number': 0x3020000} + return _map.get(key) + weechat = Weechat() sys.modules['weechat'] = weechat @@ -78,11 +85,14 @@ import replacer class TestReplacer(unittest.TestCase): - def setUp(self): + + @mock.patch('replacer.Replacer._locate_replacement_file') + def setUp(self, rfile): fd, fname = tempfile.mkstemp() os.close(fd) + rfile.return_value = fname self._path = fname - self.repl = replacer.Replacer(self._path) + self.repl = replacer.Replacer() def tearDown(self): self.repl = None @@ -104,6 +114,7 @@ class TestReplacer(unittest.TestCase): self.assertTrue(self.repl.delete('foo')) self.assertDictEqual(self.repl.replacement_map, {}) + class TestDummyTests(unittest.TestCase): """ This, somehow stupid test ensures, that process of reading default @@ -112,15 +123,22 @@ class TestDummyTests(unittest.TestCase): def tearDown(self): replacer.Replacer.self_object = None - def test_init(self): + @mock.patch('replacer.Replacer._locate_replacement_file') + def test_init(self, rfile): + rfile.return_value = 'dummy_path' repl = replacer.Replacer() self.assertIsInstance(repl.replacement_map, dict) - def test_main(self): + @mock.patch('replacer.Replacer._locate_replacement_file') + def test_main(self, rfile): + rfile.return_value = 'dummy_path' replacer.Replacer.self_object = replacer.Replacer() replacer.main() - def test_injector(self): + @mock.patch('replacer.Replacer._locate_replacement_file') + def test_injector(self, rfile): + + rfile.return_value = 'dummy_path' def fun(first, *args, **kwargs): return first @@ -132,11 +150,14 @@ class TestDummyTests(unittest.TestCase): class TestFunctions(unittest.TestCase): - def setUp(self): + + @mock.patch('replacer.Replacer._locate_replacement_file') + def setUp(self, rfile): fd, fname = tempfile.mkstemp() os.close(fd) self._path = fname - replacer.Replacer.self_object = replacer.Replacer(self._path) + rfile.return_value = fname + replacer.Replacer.self_object = replacer.Replacer() self.rc = replacer.Replacer def tearDown(self):