mirror of
https://github.com/bigchaindb/bigchaindb.git
synced 2024-10-13 13:34:05 +00:00

the rationale behind importing under a test function is to import what is being tested, and perhasp likely to fail, to isolate possible errors resulting from the import itself see http://docs.pylonsproject.org/en/latest/community/testing.html#rule-never-import-the-module-under-test-at-test-module-scope for more
73 lines
1.9 KiB
Python
73 lines
1.9 KiB
Python
from functools import singledispatch
|
|
from types import ModuleType
|
|
|
|
import pytest
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_module():
|
|
return ModuleType('mock_module')
|
|
|
|
|
|
def test_module_dispatch_registers(mock_module):
|
|
from bigchaindb.backend.utils import make_module_dispatch_registrar
|
|
|
|
@singledispatch
|
|
def dispatcher(t):
|
|
pass
|
|
mock_module.dispatched = dispatcher
|
|
mock_dispatch = make_module_dispatch_registrar(mock_module)
|
|
|
|
@mock_dispatch(str)
|
|
def dispatched(t):
|
|
pass
|
|
|
|
assert mock_module.dispatched.registry[str] == dispatched
|
|
|
|
|
|
def test_module_dispatch_dispatches(mock_module):
|
|
from bigchaindb.backend.utils import make_module_dispatch_registrar
|
|
|
|
@singledispatch
|
|
def dispatcher(t):
|
|
return False
|
|
mock_module.dispatched = dispatcher
|
|
mock_dispatch = make_module_dispatch_registrar(mock_module)
|
|
|
|
@mock_dispatch(str)
|
|
def dispatched(t):
|
|
return True
|
|
|
|
assert mock_module.dispatched(1) is False # Goes to dispatcher()
|
|
assert mock_module.dispatched('1') is True # Goes to dispatched()
|
|
|
|
|
|
def test_module_dispatch_errors_on_missing_func(mock_module):
|
|
from bigchaindb.backend.utils import (
|
|
make_module_dispatch_registrar,
|
|
BackendModuleDispatchRegisterError,
|
|
)
|
|
mock_dispatch = make_module_dispatch_registrar(mock_module)
|
|
|
|
with pytest.raises(BackendModuleDispatchRegisterError):
|
|
@mock_dispatch(str)
|
|
def dispatched():
|
|
pass
|
|
|
|
|
|
def test_module_dispatch_errors_on_non_dispatchable_func(mock_module):
|
|
from bigchaindb.backend.utils import (
|
|
make_module_dispatch_registrar,
|
|
BackendModuleDispatchRegisterError,
|
|
)
|
|
|
|
def dispatcher():
|
|
pass
|
|
mock_module.dispatched = dispatcher
|
|
mock_dispatch = make_module_dispatch_registrar(mock_module)
|
|
|
|
with pytest.raises(BackendModuleDispatchRegisterError):
|
|
@mock_dispatch(str)
|
|
def dispatched():
|
|
pass
|