Merge branch '637_friendlier_hooks'
This commit is contained in:
@@ -15,7 +15,10 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import sys
|
||||
|
||||
from configobj import ConfigObj
|
||||
import pytest
|
||||
|
||||
from mediagoblin import mg_globals
|
||||
from mediagoblin.init.plugins import setup_plugins
|
||||
from mediagoblin.tools import pluginapi
|
||||
@@ -172,3 +175,111 @@ def test_disabled_plugin():
|
||||
|
||||
# Make sure we didn't load the plugin
|
||||
assert len(pman.plugins) == 0
|
||||
|
||||
|
||||
@with_cleanup()
|
||||
def test_callable_runone():
|
||||
"""
|
||||
Test the callable_runone method
|
||||
"""
|
||||
cfg = build_config([
|
||||
('mediagoblin', {}, []),
|
||||
('plugins', {}, [
|
||||
('mediagoblin.tests.testplugins.callables1', {}, []),
|
||||
('mediagoblin.tests.testplugins.callables2', {}, []),
|
||||
('mediagoblin.tests.testplugins.callables3', {}, []),
|
||||
])
|
||||
])
|
||||
|
||||
mg_globals.app_config = cfg['mediagoblin']
|
||||
mg_globals.global_config = cfg
|
||||
|
||||
setup_plugins()
|
||||
|
||||
# Just one hook provided
|
||||
call_log = []
|
||||
assert pluginapi.callable_runone(
|
||||
"just_one", call_log) == "Called just once"
|
||||
assert call_log == ["expect this one call"]
|
||||
|
||||
# Nothing provided and unhandled not okay
|
||||
call_log = []
|
||||
with pytest.raises(pluginapi.UnhandledCallable):
|
||||
pluginapi.callable_runone(
|
||||
"nothing_handling", call_log)
|
||||
assert call_log == []
|
||||
|
||||
# Nothing provided and unhandled okay
|
||||
call_log = []
|
||||
assert pluginapi.callable_runone(
|
||||
"nothing_handling", call_log, unhandled_okay=True) is None
|
||||
assert call_log == []
|
||||
|
||||
# Multiple provided, go with the first!
|
||||
call_log = []
|
||||
assert pluginapi.callable_runone(
|
||||
"multi_handle", call_log) == "the first returns"
|
||||
assert call_log == ["Hi, I'm the first"]
|
||||
|
||||
# Multiple provided, one has CantHandleIt
|
||||
call_log = []
|
||||
assert pluginapi.callable_runone(
|
||||
"multi_handle_with_canthandle",
|
||||
call_log) == "the second returns"
|
||||
assert call_log == ["Hi, I'm the second"]
|
||||
|
||||
|
||||
@with_cleanup()
|
||||
def test_callable_runall():
|
||||
"""
|
||||
Test the callable_runall method
|
||||
"""
|
||||
cfg = build_config([
|
||||
('mediagoblin', {}, []),
|
||||
('plugins', {}, [
|
||||
('mediagoblin.tests.testplugins.callables1', {}, []),
|
||||
('mediagoblin.tests.testplugins.callables2', {}, []),
|
||||
('mediagoblin.tests.testplugins.callables3', {}, []),
|
||||
])
|
||||
])
|
||||
|
||||
mg_globals.app_config = cfg['mediagoblin']
|
||||
mg_globals.global_config = cfg
|
||||
|
||||
setup_plugins()
|
||||
|
||||
# Just one hook, check results
|
||||
call_log = []
|
||||
assert pluginapi.callable_runall(
|
||||
"just_one", call_log) == ["Called just once", None, None]
|
||||
assert call_log == ["expect this one call"]
|
||||
|
||||
# None provided, check results
|
||||
call_log = []
|
||||
assert pluginapi.callable_runall(
|
||||
"nothing_handling", call_log) == []
|
||||
assert call_log == []
|
||||
|
||||
# Multiple provided, check results
|
||||
call_log = []
|
||||
assert pluginapi.callable_runall(
|
||||
"multi_handle", call_log) == [
|
||||
"the first returns",
|
||||
"the second returns",
|
||||
"the third returns",
|
||||
]
|
||||
assert call_log == [
|
||||
"Hi, I'm the first",
|
||||
"Hi, I'm the second",
|
||||
"Hi, I'm the third"]
|
||||
|
||||
# Multiple provided, one has CantHandleIt, check results
|
||||
call_log = []
|
||||
assert pluginapi.callable_runall(
|
||||
"multi_handle_with_canthandle", call_log) == [
|
||||
"the second returns",
|
||||
"the third returns",
|
||||
]
|
||||
assert call_log == [
|
||||
"Hi, I'm the second",
|
||||
"Hi, I'm the third"]
|
||||
|
||||
15
mediagoblin/tests/testplugins/__init__.py
Normal file
15
mediagoblin/tests/testplugins/__init__.py
Normal file
@@ -0,0 +1,15 @@
|
||||
# GNU MediaGoblin -- federated, autonomous media hosting
|
||||
# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS.
|
||||
#
|
||||
# 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 <http://www.gnu.org/licenses/>.
|
||||
41
mediagoblin/tests/testplugins/callables1/__init__.py
Normal file
41
mediagoblin/tests/testplugins/callables1/__init__.py
Normal file
@@ -0,0 +1,41 @@
|
||||
# GNU MediaGoblin -- federated, autonomous media hosting
|
||||
# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS.
|
||||
#
|
||||
# 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
from mediagoblin.tools.pluginapi import CantHandleIt
|
||||
|
||||
def setup_plugin():
|
||||
pass
|
||||
|
||||
|
||||
def just_one(call_log):
|
||||
call_log.append("expect this one call")
|
||||
return "Called just once"
|
||||
|
||||
|
||||
def multi_handle(call_log):
|
||||
call_log.append("Hi, I'm the first")
|
||||
return "the first returns"
|
||||
|
||||
def multi_handle_with_canthandle(call_log):
|
||||
raise CantHandleIt("I just can't accept this stupid method")
|
||||
|
||||
|
||||
hooks = {
|
||||
'setup': setup_plugin,
|
||||
'just_one': just_one,
|
||||
'multi_handle': multi_handle,
|
||||
'multi_handle_with_canthandle': multi_handle_with_canthandle,
|
||||
}
|
||||
38
mediagoblin/tests/testplugins/callables2/__init__.py
Normal file
38
mediagoblin/tests/testplugins/callables2/__init__.py
Normal file
@@ -0,0 +1,38 @@
|
||||
# GNU MediaGoblin -- federated, autonomous media hosting
|
||||
# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS.
|
||||
#
|
||||
# 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
def setup_plugin():
|
||||
pass
|
||||
|
||||
|
||||
def just_one(call_log):
|
||||
assert "SHOULD NOT HAPPEN"
|
||||
|
||||
def multi_handle(call_log):
|
||||
call_log.append("Hi, I'm the second")
|
||||
return "the second returns"
|
||||
|
||||
def multi_handle_with_canthandle(call_log):
|
||||
call_log.append("Hi, I'm the second")
|
||||
return "the second returns"
|
||||
|
||||
|
||||
hooks = {
|
||||
'setup': setup_plugin,
|
||||
'just_one': just_one,
|
||||
'multi_handle': multi_handle,
|
||||
'multi_handle_with_canthandle': multi_handle_with_canthandle,
|
||||
}
|
||||
38
mediagoblin/tests/testplugins/callables3/__init__.py
Normal file
38
mediagoblin/tests/testplugins/callables3/__init__.py
Normal file
@@ -0,0 +1,38 @@
|
||||
# GNU MediaGoblin -- federated, autonomous media hosting
|
||||
# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS.
|
||||
#
|
||||
# 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
def setup_plugin():
|
||||
pass
|
||||
|
||||
|
||||
def just_one(call_log):
|
||||
assert "SHOULD NOT HAPPEN"
|
||||
|
||||
def multi_handle(call_log):
|
||||
call_log.append("Hi, I'm the third")
|
||||
return "the third returns"
|
||||
|
||||
def multi_handle_with_canthandle(call_log):
|
||||
call_log.append("Hi, I'm the third")
|
||||
return "the third returns"
|
||||
|
||||
|
||||
hooks = {
|
||||
'setup': setup_plugin,
|
||||
'just_one': just_one,
|
||||
'multi_handle': multi_handle,
|
||||
'multi_handle_with_canthandle': multi_handle_with_canthandle,
|
||||
}
|
||||
Reference in New Issue
Block a user