def setup(self): self.key_parser = Mock() self.key_parser.parse = lambda raw_key: (raw_key, []) self.config = Mock() self.function = Mock() self.function.return_value = RETURN_VALUE self.config.items = { KEY: self.function } self.data_source = DataSource(self.key_parser, self.config)
class TestDataSource(): def setup(self): self.key_parser = Mock() self.key_parser.parse = lambda raw_key: (raw_key, []) self.config = Mock() self.function = Mock() self.function.return_value = RETURN_VALUE self.config.items = { KEY: self.function } self.data_source = DataSource(self.key_parser, self.config) def test_calls_function(self): value = self.data_source.process(KEY) assert_equal(RETURN_VALUE, value) self.function.assert_any_call() def test_passes_arguments_to_function(self): argument = 1 self.key_parser.parse = lambda raw_key: (raw_key, [argument]) value = self.data_source.process(KEY) assert_equal(RETURN_VALUE, value) self.function.assert_any_call(argument) def test_returns_default_value_for_unknown_key(self): value = self.data_source.process('unknown_key') assert_equal(self.data_source.DEFAULT_VALUE, value) def test_calling_function_that_does_not_need_arguments(self): self.config.items[KEY] = lambda x: x value = self.data_source.process(KEY) assert_equal(self.data_source.DEFAULT_VALUE, value) def test_calling_function_with_wrong_arguments(self): function = Mock() function.side_effect = WrongArgumentError self.config.items[KEY] = function value = self.data_source.process(KEY) assert_equal(self.data_source.DEFAULT_VALUE, value) def test_calling_function_that_raises_unexpected_exception(self): function = Mock() function.side_effect = Exception self.config.items[KEY] = function value = self.data_source.process(KEY) assert_equal(self.data_source.DEFAULT_VALUE, value)