From c4e1b49ff7d5b8f5860f5cc208476ff42159724e Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Tue, 29 Oct 2013 16:35:27 -0400 Subject: Plugins: Added TemplateDataProvider plugin interface This lets you provide variables to the top-level namespace of templates in a more seamless way than through a Connector plugin. It's mostly useful for TemplateHelper for now, but may find other uses in the future. --- .../TestPlugins/TestCfg/TestCfgCheetahGenerator.py | 21 ++++++++++---- .../TestPlugins/TestCfg/TestCfgGenshiGenerator.py | 32 +++++++++++++++++----- 2 files changed, 40 insertions(+), 13 deletions(-) (limited to 'testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestCfg') diff --git a/testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestCfg/TestCfgCheetahGenerator.py b/testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestCfg/TestCfgCheetahGenerator.py index 2285fb458..93331304a 100644 --- a/testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestCfg/TestCfgCheetahGenerator.py +++ b/testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestCfg/TestCfgCheetahGenerator.py @@ -26,12 +26,20 @@ class TestCfgCheetahGenerator(TestCfgGenerator): set_setup_default("repository", datastore) @patch("Bcfg2.Server.Plugins.Cfg.CfgCheetahGenerator.Template") - def test_get_data(self, mock_Template): + @patch("Bcfg2.Server.Plugins.Cfg.CfgCheetahGenerator.get_template_data") + def test_get_data(self, mock_get_template_data, mock_Template): ccg = self.get_obj() ccg.data = "data" entry = lxml.etree.Element("Path", name="/test.txt") metadata = Mock() + template_vars = dict(name=entry.get("name"), + metadata=metadata, + path=ccg.name, + source_path=ccg.name, + repo=datastore) + mock_get_template_data.return_value = template_vars + self.assertEqual(ccg.get_data(entry, metadata), mock_Template.return_value.respond.return_value) mock_Template.assert_called_with( @@ -39,8 +47,9 @@ class TestCfgCheetahGenerator(TestCfgGenerator): compilerSettings=ccg.settings) tmpl = mock_Template.return_value tmpl.respond.assert_called_with() - self.assertEqual(tmpl.metadata, metadata) - self.assertEqual(tmpl.name, entry.get("name")) - self.assertEqual(tmpl.path, entry.get("name")) - self.assertEqual(tmpl.source_path, ccg.name) - self.assertEqual(tmpl.repo, datastore) + for key, val in template_vars.items(): + self.assertEqual(getattr(tmpl, key), val) + self.assertItemsEqual(mock_get_template_data.call_args[0], + [entry, metadata, ccg.name]) + self.assertIsInstance(mock_get_template_data.call_args[1]['default'], + DefaultCheetahDataProvider) diff --git a/testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestCfg/TestCfgGenshiGenerator.py b/testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestCfg/TestCfgGenshiGenerator.py index 9b6e7fe88..b667d417a 100644 --- a/testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestCfg/TestCfgGenshiGenerator.py +++ b/testsuite/Testsrc/Testlib/TestServer/TestPlugins/TestCfg/TestCfgGenshiGenerator.py @@ -31,7 +31,8 @@ class TestCfgGenshiGenerator(TestCfgGenerator): cgg = self.get_obj() self.assertIsInstance(cgg.loader, cgg.__loader_cls__) - def test_get_data(self): + @patch("Bcfg2.Server.Plugins.Cfg.CfgGenshiGenerator.get_template_data") + def test_get_data(self, mock_get_template_data): cgg = self.get_obj() cgg._handle_genshi_exception = Mock() cgg.template = Mock() @@ -45,17 +46,22 @@ class TestCfgGenshiGenerator(TestCfgGenerator): def reset(): cgg.template.reset_mock() cgg._handle_genshi_exception.reset_mock() + mock_get_template_data.reset_mock() - template_vars = dict( - name=entry.get("name"), - metadata=metadata, - path=cgg.name, - source_path=cgg.name, - repo=datastore) + template_vars = dict(name=entry.get("name"), + metadata=metadata, + path=cgg.name, + source_path=cgg.name, + repo=datastore) + mock_get_template_data.return_value = template_vars self.assertEqual(cgg.get_data(entry, metadata), stream.render.return_value) cgg.template.generate.assert_called_with(**template_vars) + self.assertItemsEqual(mock_get_template_data.call_args[0], + [entry, metadata, cgg.name]) + self.assertIsInstance(mock_get_template_data.call_args[1]['default'], + DefaultGenshiDataProvider) fltr.filter.assert_called_with(removecomment) stream.render.assert_called_with( "text", @@ -70,6 +76,10 @@ class TestCfgGenshiGenerator(TestCfgGenerator): self.assertEqual(cgg.get_data(entry, metadata), stream.render.return_value) cgg.template.generate.assert_called_with(**template_vars) + self.assertItemsEqual(mock_get_template_data.call_args[0], + [entry, metadata, cgg.name]) + self.assertIsInstance(mock_get_template_data.call_args[1]['default'], + DefaultGenshiDataProvider) fltr.filter.assert_called_with(removecomment) self.assertEqual(stream.render.call_args_list, [call("text", @@ -83,6 +93,10 @@ class TestCfgGenshiGenerator(TestCfgGenerator): self.assertRaises(UndefinedError, cgg.get_data, entry, metadata) cgg.template.generate.assert_called_with(**template_vars) + self.assertItemsEqual(mock_get_template_data.call_args[0], + [entry, metadata, cgg.name]) + self.assertIsInstance(mock_get_template_data.call_args[1]['default'], + DefaultGenshiDataProvider) fltr.filter.assert_called_with(removecomment) stream.render.assert_called_with("text", encoding=Bcfg2.Options.setup.encoding, @@ -94,6 +108,10 @@ class TestCfgGenshiGenerator(TestCfgGenerator): self.assertRaises(ValueError, cgg.get_data, entry, metadata) cgg.template.generate.assert_called_with(**template_vars) + self.assertItemsEqual(mock_get_template_data.call_args[0], + [entry, metadata, cgg.name]) + self.assertIsInstance(mock_get_template_data.call_args[1]['default'], + DefaultGenshiDataProvider) fltr.filter.assert_called_with(removecomment) stream.render.assert_called_with("text", encoding=Bcfg2.Options.setup.encoding, -- cgit v1.2.3-1-g7c22