diff --git a/tests/test_plugin_HookRegistry.py b/tests/test_plugin_HookRegistry.py new file mode 100644 index 0000000000000000000000000000000000000000..b7fd0b9521b6c461d0726c840e5203f0d2378bd3 --- /dev/null +++ b/tests/test_plugin_HookRegistry.py @@ -0,0 +1,53 @@ +"""Test main plugin's HookRegistry""" +# Copyright © 2020 Brett Smith +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +import pytest + +from . import testutil + +from conservancy_beancount import plugin + +def hook_names(hooks, key): + return {type(hook).__name__ for hook in hooks[key]} + +def test_default_registrations(): + hooks = plugin.HOOK_REGISTRY.group_by_directive() + post_hook_names = hook_names(hooks, 'Posting') + assert len(post_hook_names) >= 2 + assert 'MetaExpenseAllocation' in post_hook_names + assert 'MetaTaxImplication' in post_hook_names + +def test_exclude_single(): + hooks = plugin.HOOK_REGISTRY.group_by_directive('-expenseAllocation') + post_hook_names = hook_names(hooks, 'Posting') + assert post_hook_names + assert 'MetaExpenseAllocation' not in post_hook_names + +def test_exclude_group_then_include_single(): + hooks = plugin.HOOK_REGISTRY.group_by_directive('-metadata expenseAllocation') + post_hook_names = hook_names(hooks, 'Posting') + assert 'MetaExpenseAllocation' in post_hook_names + assert 'MetaTaxImplication' not in post_hook_names + +def test_include_group_then_exclude_single(): + hooks = plugin.HOOK_REGISTRY.group_by_directive('metadata -taxImplication') + post_hook_names = hook_names(hooks, 'Posting') + assert 'MetaExpenseAllocation' in post_hook_names + assert 'MetaTaxImplication' not in post_hook_names + +def test_unknown_group_name(): + with pytest.raises(ValueError): + plugin.HOOK_REGISTRY.group_by_directive('UnKnownTestGroup')