Commit ff7dcb4f by Dudás Ádám

common: tests for operations

parent d83db63b
...@@ -44,8 +44,7 @@ class Operation(object): ...@@ -44,8 +44,7 @@ class Operation(object):
# check for unexpected keyword arguments # check for unexpected keyword arguments
argspec = getargspec(self._operation) argspec = getargspec(self._operation)
if argspec.keywords is None: # _operation doesn't take ** args if argspec.keywords is None: # _operation doesn't take ** args
unexpected_kwargs = set(arg for arg in auxargs unexpected_kwargs = set(auxargs) - set(argspec.args)
if arg not in argspec.args)
if unexpected_kwargs: if unexpected_kwargs:
raise TypeError("Operation got unexpected keyword arguments: " raise TypeError("Operation got unexpected keyword arguments: "
"%s" % ", ".join(unexpected_kwargs)) "%s" % ", ".join(unexpected_kwargs))
......
...@@ -58,3 +58,41 @@ class OperationTestCase(TestCase): ...@@ -58,3 +58,41 @@ class OperationTestCase(TestCase):
patch.object(Operation, 'create_activity'), \ patch.object(Operation, 'create_activity'), \
patch.object(Operation, '_exec_op'): patch.object(Operation, '_exec_op'):
op.call(system=True) op.call(system=True)
def test_no_exception_for_more_arguments_when_operation_takes_kwargs(self):
class KwargOp(Operation):
activity_code_suffix = 'test'
id = 'test'
def _operation(self, **kwargs):
pass
op = KwargOp(MagicMock())
with patch.object(KwargOp, 'create_activity'), \
patch.object(KwargOp, '_exec_op'):
op.call(system=True, foo=42)
def test_exception_for_unexpected_arguments(self):
class TestOp(Operation):
activity_code_suffix = 'test'
id = 'test'
def _operation(self):
pass
op = TestOp(MagicMock())
with patch.object(TestOp, 'create_activity'), \
patch.object(TestOp, '_exec_op'):
self.assertRaises(TypeError, op.call, system=True, foo=42)
def test_exception_for_missing_arguments(self):
class TestOp(Operation):
activity_code_suffix = 'test'
id = 'test'
def _operation(self, foo):
pass
op = TestOp(MagicMock())
with patch.object(TestOp, 'create_activity'):
self.assertRaises(TypeError, op.call, system=True)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment